SQL Server 安全检查列表

原创 2004年08月25日 17:46:00

SQL Server 安全检查列表
 
转贴自:http://www.sqlsecurity.com    
 
1. 确认已经安装了NT/2000和SQL Server的最新补丁程序,不用说大家应该已经安装好了,但是我觉得最好还是在这里提醒一下。

2. 评估并且选择一个考虑到最大的安全性但是同时又不影响功能的网络协议。 多协议是明智的选择, 但是它有时不能在异种的环境中使用。

3. 给 "sa" 和 "probe" 帐户设定强壮的密码来加强其安全性。设定一个强壮的密码并将其保存在一个安全的地方。 注意: probe帐户被用来进行性能分析和分发传输。 当在标准的安全模态中用的时候 , 给这个帐户设定高强度的密码能影响某些功能的使用。

4. 使用一个低特权用户作为 SQL 服务器服务的查询操作账户,不要用 LocalSystem 或sa。 这个帐户应该有最小的权利 ( 注意作为一个服务运行的权利是必须的)和应该包含( 但不停止)在妥协的情况下对服务器的攻击。 注意当使用企业管理器做以上设置时 , 文件,注册表和使用者权利上的 ACLs同时被处理。

5. 确定所有的 SQL 服务器数据,而且系统文件是装置在 NTFS 分区,且appropraite ACLs 被应用。 如果万一某人得到对系统的存取操作权限,该层权限可以阻止入侵者破坏数据,避免造成一场大灾难。  

6.如果不使用Xp_cmdshell就关掉。 如果使用 SQL 6.5, 至少使用Server Options中的SQLExecutieCmdExec 账户操作限制非sa用户使用XP_cmdshell.
在任何的 isql/ osql 窗口中( 或查询分析器):

use master
exec sp_dropextendedproc'xp_cmdshell'

对 SQLExecutiveCmdExec 的详细情况请查看下列文章:

http://support.microsoft.com/support/kb/article/Q159/2/21.

如果你不需要 xp_cmdshell 那请停用它。请记住一个系统系统管理员如果需要的话总是能把它增加回来。这也好也不好 - 一个侵入者可能发现它不在,只需要把他加回来。考虑也除去在下面的 dll但是移除之前必须测试因为有些dll同时被一些程序所用。 要找到其他的程序是否使用相同的 dll:

首先得到该 dll 。

select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and o.name='xp_cmdshell'

其次,使用相同的 dll发现其他的扩展储存操作是否使用该dll。

select o.name,c.text from dbo.syscomments c , dbo.sysobjects o where c.id=o.id and c.text='xplog70.dll'

用户可以用同样的办法处理下面步骤中其他你想去掉的进程。

 

7. 如不需要就停用对象连接与嵌入自动化储存程序 ( 警告 - 当这些储存程序被停用的时候 , 一些企业管理器功能可能丢失). 这些包括:

Sp_OACreate

Sp_OADestroy

Sp_OAGetErrorInfo

Sp_OAGetProperty

Sp_OAMethod

Sp_OASetProperty

Sp_OAStop

如果你决定停用该进程那么请给他们写一个脚本这样在以后你用到他们的时候你能够把他们重新添加回来 。  记住, 我们在这里正在做的是锁定一个应用程序的功能 - 你的开发平台应该放到其他机器上。

 

8. 禁用你不需要的注册表存取程序。(同上面的警告)这些包括:

Xp_regaddmultistring

Xp_regdeletekey

Xp_regdeletevalue

Xp_regenumvalues

Xp_regremovemultistring

注意 :我过去一直在这里列出 xp_regread/ xp_regwrite但是这些程序的移除影响一些主要功能包括日志和SP的安装,所以他们的移除不被推荐。

 

9.移除其他你认为会造成威胁的系统储存进程。 这种进程是相当多的,而且他们也会浪费一些cpu时间。 小心不要首先在一个配置好的服务器上这样做。首先在开发的机器上测试,确认这样不会影响到任何的系统功能。在下面是我们所推荐的有待你评估的一些列表:

sp_sdidebug
xp_availablemedia
xp_cmdshell
xp_deletemail
xp_dirtree
xp_dropwebtask
xp_dsninfo
xp_enumdsn
xp_enumerrorlogs
xp_enumgroups
xp_enumqueuedtasks
xp_eventlog
xp_findnextmsg
xp_fixeddrives
xp_getfiledetails
xp_getnetname
xp_grantlogin
xp_logevent
xp_loginconfig
xp_logininfo
xp_makewebtask
xp_msver xp_perfend
xp_perfmonitor
xp_perfsample
xp_perfstart
xp_readerrorlog
xp_readmail
xp_revokelogin
xp_runwebtask
xp_schedulersignal
xp_sendmail
xp_servicecontrol
xp_snmp_getstate
xp_snmp_raisetrap
xp_sprintf
xp_sqlinventory
xp_sqlregister
xp_sqltrace
xp_sscanf
xp_startmail
xp_stopmail
xp_subdirs
xp_unc_to_drive
xp_dirtree

 


10. 在企业管理器中"安全选项" 之下禁用默认登录。(只有SQL 6.5) 当使用整合的安全时候,这使未经认可的不在 syslogins 表中使用者无权登陆一个有效的数据库服务器。
11. 除去数据库的guest账户把未经认可的使用者据之在外。  例外情况是master和 tempdb 数据库,因为对他们guest帐户是必需的。
12. 若非必须,请完全地禁用SQL邮件功能。它的存在使潜在的攻击者递送潜在的 trojans ,病毒或是简单实现一个DOS攻击成为可能

13. 检查master..Sp_helpstartup看有无可疑的木马进程。 确定没有人已经在这里放置秘密的后门程序。 使用 Sp_unmakestartup 移除任何可疑进程。

14. 检查master..Sp_password看有无trojan代码。比较你的产品scripts和一个新安装的系统的默认scripts而且方便的保存。

15. 记录所有的用户存取访问情况。  从企业管理器做这些设定或通过以sa登陆进入查询分析器的下列各项:
xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'SOFTWARE/ Microsoft/MSSQLServer/MSSQLServer',N'AuditLevel',REG_DWORD,3

16. 重写应用程序使用更多用户定义的储存和察看进程所以一般的对表的访问可以被禁用。 在这里你也应该看到由于不必经常进行查询计划操作而带来的性能提升。
17. 除去不需要的网络协议。
18. 注意SQL 服务器的物理安全。把它锁在固定的房间里,并且注意钥匙的安全。只要有机会到服务器面前,就总是会找到一个方法进入。
19. 建立一个计划的任务运行:
findstr/C:" Login Failed"/mssql7/log/*.*'

然后再重定向输出到一个文本文件或电子邮件,因此你监测失败的登录尝试。这也为系统管理员提供一个好的记录攻击的方法。 也有很多用来分析NT日志事件的第三者工具。 注意: 你可能需要将路径换成你安装SQL的路径。

20. 设定非法访问和登陆失败日志警报。到 企业管理器中的"Manager SQL Server Messages "搜寻任何有关无权访问的消息 ( 从查找"login failed"和"denied"开始). 确定你所有感兴趣的信息被记录到事件日志。然后在这些信息上设定警报 , 发送一个电子邮件或信息到一个能够对问题及时响应的操作员。

21. 确定在服务器和数据库层次上的角色都只被授给了需要的用户。 当 SQL Server  安全模型 7 有许多增强的时候, 它也增加额外的许可层,我们必须监控该层,确定没有人被授予了超过必需的权限。

22. 经常检查组或角色全体会员并且确定用组分配权限,这样你的审计工作能够简化。 确定当你在的时候 , 公众的组不能从系统表执行选择操作。
23. 花些时间审计用空密码登陆的请求。 使用下面的代码进行空密码检查:
使用主体
选择名字,
      password
from syslogins
where password is null
order by name


24. 如果可能,在你的组织中利用整合的安全策略。 通过使用整合的安全策略,你能够依赖系统的安全,最大简化管理工作从维护二个分开的安全模型中分离开来。这也不让密码接近连接字串。
25. 检查所有非sa用户的存取进程和扩充存储进程的权限。 使用下面的查询定期的查询哪一个进程有公众存储权限。(在SQL Server中 使用 "type" 而不是 "xtype"):
Use master
select sysobjects.name
from sysobjects,sysprotects
where sysprotects.uid=0
AND xtype 在 ('X','P')
AND sysobjects.id=sysprotects.id
Order by name

26. 当时用企业管理器的时候,使用整合的安全策略。 过去,企业管理器被发现在标准的安全模态中储存 "sa" 密码在注册表的 plaintext 中。 注意: 即使你改变模态,密码也会留在注册表中。 使用 regedit 而且检查键:
HKEY_CURRENT_USER/SOFTWARE/Microsoft/
MSSQLServer/SQLEW/ Regedi/
SQL 6.5

现在数据被隐藏在

HKEY_USERS/{yourSID}/software/Microsoft/Microsoft SQL server/80/tool/SQLEW/registered server X/SQL server group

("SQL server组" 是默认值但是你可能已建立用户组因此相应地改变其位置)

27. 发展一个审核计划而且订定每月的安全报告,对IT主管可用的报表包括任何的新exploit,成功的攻击 , 备份保护 , 和对象存取失败统计。
28. 不要允许使用者交互式登陆到 SQL Server之上。这个规则适用任何的服务器。   一旦一个使用者能够交互式进入一个服务器之内,就有能用来获得管理员的存取特权得到管理员权限。    
30. 尽力限制对SQL Server的查询与存取操作。 用户可以用最小权限查询sql server中的很多东西。若非必须不要给他们机会
 
 

SQL Server中的窗口计算

SQL Server中的窗口函数 - CareySon - 博客园 http://www.cnblogs.com/CareySon/p/3411176.html 1. 窗口计算简介 为了支持窗口计...
  • xiaohu2022
  • xiaohu2022
  • 2016年01月25日 11:03
  • 339

sql语句优化之SQL Server(详细整理)

这篇文章主要介绍了sql语句优化之SQL Server篇,整理的比较详细,推荐收藏 MS SQL Server查询优化方法 查询速度慢的原因很多,常见如下几种 1、没有索引或者没有用到...
  • zxh2075
  • zxh2075
  • 2015年03月14日 14:31
  • 768

不同版本SQL server数据库中表数据的复用

岁末将至,北风呼啸,吹慢了快递的脚步,本来预计送给女神的平安夜礼物变成了圣诞节礼物,,,(不知不觉扯远中。。。) 期末将至(再次撸一把胡须),小编发现数据库实验还有一大部分欠着账,之前都是接...
  • perterli
  • perterli
  • 2017年12月24日 19:49
  • 87

SQLServer数据库设置性能列表

性能监控列表 数据库配置选项 缺省值 当前值 auto_close off   auto_create_statistics on ...
  • ozhanjun
  • ozhanjun
  • 2013年10月09日 11:56
  • 770

SQL SERVER 2014数据库引擎15项新功能

1.内存优化表    内存中 OLTP 是一种内存优化的数据库引擎,它集成到 SQL Server 引擎中。    内存中 OLTP 已针对 OLTP 进行优化。对于内存中 OLTP 支持的 Tran...
  • maco_wang
  • maco_wang
  • 2014年04月01日 00:41
  • 15102

sql server 数据库设计实例

本实例为综合实例,考察数据库原理中的,sql脚本的编写,创建——增删改查,视图和索引的创建等;数据库ER图,关系模式;以及一些高级的应用包括:触发器,函数和存储过程的应用。 (一). 数据库设计题目如...
  • u013139259
  • u013139259
  • 2015年01月14日 22:13
  • 2879

Sql Server服务远程过程调用失败

由于开发系统,需要vs版本统一,于是经过了昨天一整天艰苦卓绝的斗争,小编终于成功的写在了13版本的vs,重新装上了12版本的vs,本来想着,12版本的vs搭建成功了,就赶快搭建框架,然后敲例子,可是天...
  • u010850027
  • u010850027
  • 2015年02月09日 07:53
  • 6198

SQL Server索引进阶第十二篇:索引的创建,修改和删除

索引设计是数据库设计中比较重要的一个环节,对数据库的性能其中至关重要的作用,但是索引的设计却又不是那么容易的事情,性能也不是那么轻易就获取到的,很多的技术人员因为不恰当的创建索引,最后使得其效果适得其...
  • pingqingbo
  • pingqingbo
  • 2013年01月22日 14:10
  • 812

SQLServer 可更新订阅的订阅库数据未同步到发布库查看

刚更新几行数据,同事查到一个分库的数据未同步到总库。于是想到是不是同步出现什么错误了。 在发布实例中打开 “复制监视器” ,没发现有错误,队列读取器、日志读取器、分发都正常同步数据。 发布数据库没...
  • kk185800961
  • kk185800961
  • 2015年11月10日 10:59
  • 1544

列类型与unpivot列表中其他列类型冲突

列类型与unpivot列表中其他列类型冲突
  • jzt_designer
  • jzt_designer
  • 2016年10月24日 17:01
  • 1247
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL Server 安全检查列表
举报原因:
原因补充:

(最多只允许输入30个字)