sa安全
--禁用,启用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
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