关于SQL SERVER数据库安全设置的检测 关于SQL SERVER数据库安全设置的检测应该在哪里实现是注册表的某一项还是配置文件?我是个新手,请详细说明,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1. 权限 (1) 各个盘的根目录应该只有 system 跟 administrator有权限(网站目录自行酌情配置) (2) 目录权限 c:\windows administrators 和 SYSTEM 完全控制,其它删除 c:\windows\repair administrators 和 SYSTEM 完全控制,其它删除 c:\windows\temp everyone -> 完全 c:\windows\assembly everyone -> 读 c:\windows\microsoft.net administrators 和 SYSTEM 完全控制,users 读取,读取和运行,列出文件夹目录,其它删除 c:\windows\system32 administrators 和 SYSTEM 完全控制,users 读取,读取和运行,列出文件夹目录,其它删除 c:\windows\system32\inetsrv\MetaBack administrators 和 SYSTEM 完全控制,其它删除 c:\program files\ administrators 和 SYSTEM 完全控制,其它删除 c:\program files\Common Files administrators 和 SYSTEM 完全控制,users 读取,读取和运行,列出文件夹目录,其它删除 c:\Documents and Settingrs administrators 和 SYSTEM 完全控制,其它删除 c:\Documents and Settingrs\All Users administrators 和 SYSTEM 完全控制,其它删除 (3) 文件权限 adsnt.dll;adsiis.dll;adsiisex.dll;cmd.exe;command.exe;netstat.exe;net.exe;net1.exe;cacls.exe;sc.exe;regsvr32.exe;ftp.exe;tftp.exe;regedit.exe;at.exe;attrib.exe 只有 administrators 和 SYSTEM 有权限 删除sethc.exe文件,建立同名文件夹,然后给此文件夹administrators 和 SYSTEM 完全控制,其它删除 (4)网站目录权限 网站目录可以给administrators 和 SYSTEM 完全控制,aspnet,iwan完全控制,iusr则看情况,如果要上传,则完全控制,如果不需要,那给读取权限则可.2. 注册表 到HKEY_CLASSES_ROOT\CLSID\删除以下的CLSID clsid:72C24DD5-D70A-438B-8A42-98424B88AFB8 clsid:F935DC26-1CF0-11D0-ADB9-00C04FD58A0B clsid:F935DC22-1CF0-11D0-ADB9-00C04FD58A0B clsid:093FF999-1EA0-4079-9525-9614C3504B74 3. 服务 没用的服务可以禁用 browser,cryptsvc,dhcp,dfs,trkwks,msdtc,dnscache,ersvc,helpsvc,spooler,remoteregistry,lmhosts,wzcsvc,lanmanworkstation4. 组件删除危险组件regsvr32 /u C:\WINDOWS\System32\wshom.ocxdel C:\WINDOWS\System32\wshom.ocxregsvr32 /u C:\WINDOWS\system32\shell32.dlldel C:\WINDOWS\System32\shell32.dll运行 gpedit.msc -> 计算机配置 -> 安全设置 -> 本地策略 ->安全选项网络访问: 可匿名访问的共享网络访问: 可匿名访问的命名管道网络访问: 可远程访问的注册表路径网络访问: 可远程访问的注册表路径和子路径将以上四项的内容全部删除 网络访问: 不允许 SAM 账户的匿名枚举网络访问: 不允许 SAM 账户和共享的匿名枚举网络访问: 不允许存储网络身份验证的凭据或 .NET Passports网络访问: 限制匿名访问命名管道和共享将以上四项通通设为“已启用”5. 删除 administratos 组的终端登录权限,改为为每个管理员加上远程权限(可选)运行 gpedit.msc -> 计算机配置 -> 安全设置 -> 本地策略 -> 用户权限分配 -> 通过终端允许登录7.审核策略(可选)运行 gpedit.msc ->计算机配置 ->安全设置 ->本地策略 ->审核策略 策略更改: 无审核 登录事件: 成功,失败 对象访问: 失败 过程追踪: 无审核 目录服务访问:无审核 特权使用: 无审核 系统事件: 成功,失败 账户登录事件:成功,失败 账户管理: 成功,失败8.用户锁定(可选)运行 gpedit.msc ->计算机配置 ->安全设置 ->帐户策略 设置为阈值3次,复位时间30分钟. 1、登录认证:为了安全起见,如果可以的话把Windows认证模式设置为唯一认证模式 由于使用了集成安全方式,用户可以信赖操作系统的安全性,不必再维持两个独立的安全模式,这样大大简化了用户的管理工作,还可以使密码不再受到连接字符串的限制。 2、花上一定时间审计用空密码或者弱密码登录SQL的请求 使用以下的代码可以对空密码进行检测: Use master Select name, Password from syslogins where password is null order by name 有很多免费工具和商业工具可以用来检测弱密码登录。SQLPing2就是一款可以用来检测弱密码和空密码的免费软件。 3、勤于检查组和角色成员 虽然SQL服务器安全模式有很多增强功能,但是它还是增加了一个额外许可层,我们必须监控好该层,以确定没有任何用户被赋予超过他们需要的访问权限,并确定没有任何用户规避了安全系统获得了权限的提升。还有一些幽灵用户,他们在公司内的职位改变了,但SQL服务器的许可结构并没有及时做出调整。确定用组进行对象访问权限的分配,而不是个人。 4、注意SQL服务器的物理安全 当你忙于干活的时候,把服务器锁在安全的地方,藏好你的钥匙。要知道如果有人接近了服务器,总会找到方法进入系统。 5、 多用用户自定义的存储表过程和视图来重写应用程序。 这样做可以最大限度减少需要直接访问数据表的操作,程序开发人员可以更好地控制数据存取的过程。 6、启用日志功能,记录所有的用户登录情况。 可以用以下的代码编写脚本达到这个目的: xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'SOFTWARE\Microsoft\MSSQLServer\MSSQLServer',N'AuditLevel', REG_DWORD,3 7、检查master..Sp_password,看存不存在木马程序代码。 比较你的产品脚本和全新安装系统的默认脚本之间的区别,并使该代码处于方便使用的状态。 8、检查master..Sp_helpstartup,看存不存在可疑木马进程。 确保没有被人在服务器里安装了后门程序。用Sp_unmakestartup移除任何可疑进程。 9、除非确实需要,否则请禁用SQL邮件功能。 启用邮件功能会让潜伏的攻击者找到另外一个途径来传播潜在的木马程序和病毒,并让他们很轻易发动一次拒绝服务攻击。虽然邮件功能的存在本身是无害的,但是它很可能会被攻击者所利用。 10、从数据库移除的游客(Guest)身份用户,避免任何未授权用户的非法操作。 这原本就是默认设置,不过还是要警惕以防万一某些DBO放松了对访问权的控制。也有存在例外的情况,那就是主数据库和临时数据库(tempdb),因为对它们而言,游客帐户是必需的。 11、确保所有的SQL服务器数据和系统文件都安装在NTFS分区。 确认必要的许可已经准备就绪,以防有非法入侵者获得对操作系统的存取操作权限,酿成大灾难。 12、使用低特权用户而不是LocalSystem或Administrator作为SQL服务器服务的访问操作帐户。 这个帐户应该只拥有最低权限(最好是本地用户的权限),并应该能够协助阻止服务器受到攻击。请注意,当使用Enterprise Manager或SQL Server Configuration Manager (SQL 2005版) 想要执行这个设置时,对文件、注册表和用户权限的访问控制表都是自动完成的。 13、设置强密码来保护sa帐户的安全。 前提是你设置的是SQL Server和Windows安全认证模式。如果可以,请把Windows认证模式设置为唯一的认证模式,这样可以不必担心有人会强行切入你的sa帐户。即便做了这样的设置,你还是要设置一个强密码,以防有人改变你的安全认证模式。 14、选择你确实需要的那些网络库 如果SQL服务器只允许本地访问,那何不禁用所有的网络库,并使用共享内存来访问SQL服务器呢?这样做可能会更好。只要把'(local)'作为服务器名就可以了。如果你的SQL服务器需要连接其他主机,那就使用TCP/IP netlib,然后确定是否需要SSL安全协议。 15、确保你已经安装了最新的操作系统及SQL服务器的Service Packs和Hot-Fixes。 这个应该不用别人提醒广大用户都会去做的。很简单,只要在你的SQL服务器上运行代码"select @@version",比较连接页面的结果就行了。 16、把危险存储过程和扩展存储过程设置为只允许系统管理员对其进行存取操作。 这些进程很多(推荐对下面列表中的进程进行设置),需要花上不少时间才能完成以上设置。切记先不要在产品服务器上执行这些设置,最好先在开发机上做测试,这样你就不用担心会影响到任何系统功能了。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_regread xp_perfend xp_perfmonitor xp_perfsample xp_perfstart xp_readerrorlog xp_readmail xp_revokelogin xp_runweb 文章来源:www.itzero.com-IT动力源 exec sp_dropsrvrolemember N'aa', sysadmingoexec sp_addsrvrolemember N'aa', securityadmingo--作好SQL的安全管理--作者:邹建首先,做好用户安全: --简单的,只允许sql的用户访问sql(防止利用administrator组用户访问) 1.企业管理器--右键SQL实例--属性--安全性--身份验证--选择"sql server和windows"--确定 2.企业管理器--安全性--登陆--右键sa--设置密码--其他用户也设置密码 3.删除用户: BUILTIN\Administrators <机器名>\Administrator --这个用户不一定有 这样可以防止用windows身份登陆SQL 4.设置进入企业管理器需要输入密码 在企业管理器中 --右键你的服务器实例(就是那个有绿色图标的) --编辑SQL Server注册属性 --选择"使用 SQL Server 身份验证" --并勾选"总是提示输入登录名和密码" --确定 --经过上面的设置,你的SQL Server基本上算是安全了. ------------------------------------------------------------------------ 其次,改默认端口,隐藏服务器,减少被攻击的可能性 SQL Server服务器 --开始 --程序 --Microsoft SQL Server --服务器网络实用工具 --启用的协议中"TCP/IP" --属性 --默认端口,输入一个自已定义的端口,比如2433 --勾选隐藏服务器 ---------------------------------------------------------------------------- --管好sql的用户,防止访问他不该访问的数据库(总控制,明细还可以控制他对于某个数据库的具体对象具有的权限) --切换到你新增的用户要控制的数据库 use 你的库名 go --新增用户 exec sp_addlogin 'test' --添加登录 exec sp_grantdbaccess N'test' --使其成为当前数据库的合法用户 exec sp_addrolemember N'db_owner', N'test' --授予对自己数据库的所有权限 --这样创建的用户就只能访问自己的数据库,及数据库中包含了guest用户的公共表 go --删除测试用户 exec sp_revokedbaccess N'test' --移除对数据库的访问权限 exec sp_droplogin N'test' --删除登录 如果在企业管理器中创建的话,就用:企业管理器--安全性--右键登录--新建登录常规项--名称中输入用户名--身份验证方式根据你的需要选择(如果是使用windows身份验证,则要先在操作系统的用户中新建用户)--默认设置中,选择你新建的用户要访问的数据库名服务器角色项这个里面不要选择任何东西数据库访问项勾选你创建的用户需要访问的数据库名数据库角色中允许,勾选"public","db_ownew"确定,这样建好的用户与上面语句建立的用户一样 --------------------------------------------------------------------------- 最后一步,为具体的用户设置具体的访问权限,这个可以参考下面的最简示例: --添加只允许访问指定表的用户: exec sp_addlogin '用户名','密码','默认数据库名' --添加到数据库 exec sp_grantdbaccess '用户名' --分配整表权限 GRANT SELECT , INSERT , UPDATE , DELETE ON table1 TO [用户名]--分配权限到具体的列GRANT SELECT , UPDATE ON table1(id,AA) TO [用户名] ------------------------------------------------------------------- 至于具体的安全设置和理论知道,参考SQL联机帮助 求简单SQL 字符串拆分,急! CASE的疑问 select 只包含文字的 内容。 SQLserver2000个人版(WIN7旗舰)打SP4出现问题了,请教高手!!! 请教sql查询问题 向前辈请教 哪位知道IAM页信息 SQL SERVER容易学还是ORACLE容易一些? 树型数据库的设计--要在VB中进行调用,最理想的方法是那一种? 新手问个简单的问题(答者有分) 关于SQL2005 sa登录失败的一个怪问题
(1) 各个盘的根目录应该只有 system 跟 administrator有权限(网站目录自行酌情配置)
(2) 目录权限
c:\windows administrators 和 SYSTEM 完全控制,其它删除
c:\windows\repair administrators 和 SYSTEM 完全控制,其它删除
c:\windows\temp everyone -> 完全
c:\windows\assembly everyone -> 读
c:\windows\microsoft.net administrators 和 SYSTEM 完全控制,users 读取,读取和运行,列出文件夹目录,其它删除
c:\windows\system32 administrators 和 SYSTEM 完全控制,users 读取,读取和运行,列出文件夹目录,其它删除
c:\windows\system32\inetsrv\MetaBack administrators 和 SYSTEM 完全控制,其它删除
c:\program files\ administrators 和 SYSTEM 完全控制,其它删除
c:\program files\Common Files administrators 和 SYSTEM 完全控制,users 读取,读取和运行,列出文件夹目录,其它删除
c:\Documents and Settingrs administrators 和 SYSTEM 完全控制,其它删除
c:\Documents and Settingrs\All Users administrators 和 SYSTEM 完全控制,其它删除
(3) 文件权限
adsnt.dll;adsiis.dll;adsiisex.dll;cmd.exe;command.exe;netstat.exe;net.exe;net1.exe;cacls.exe;sc.exe;regsvr32.exe;ftp.exe;tftp.exe;regedit.exe;at.exe;attrib.exe
只有 administrators 和 SYSTEM 有权限
删除sethc.exe文件,建立同名文件夹,然后给此文件夹administrators 和 SYSTEM 完全控制,其它删除
(4)网站目录权限
网站目录可以给administrators 和 SYSTEM 完全控制,aspnet,iwan完全控制,iusr则看情况,如果要上传,则完全控制,如果不需要,那给读取权限则可.2. 注册表
到HKEY_CLASSES_ROOT\CLSID\删除以下的CLSID clsid:72C24DD5-D70A-438B-8A42-98424B88AFB8
clsid:F935DC26-1CF0-11D0-ADB9-00C04FD58A0B
clsid:F935DC22-1CF0-11D0-ADB9-00C04FD58A0B
clsid:093FF999-1EA0-4079-9525-9614C3504B74 3. 服务
没用的服务可以禁用
browser,cryptsvc,dhcp,dfs,trkwks,msdtc,dnscache,ersvc,helpsvc,spooler,remoteregistry,lmhosts,wzcsvc,lanmanworkstation4. 组件
删除危险组件
regsvr32 /u C:\WINDOWS\System32\wshom.ocx
del C:\WINDOWS\System32\wshom.ocx
regsvr32 /u C:\WINDOWS\system32\shell32.dll
del C:\WINDOWS\System32\shell32.dll运行 gpedit.msc -> 计算机配置 -> 安全设置 -> 本地策略 ->安全选项
网络访问: 可匿名访问的共享
网络访问: 可匿名访问的命名管道
网络访问: 可远程访问的注册表路径
网络访问: 可远程访问的注册表路径和子路径
将以上四项的内容全部删除 网络访问: 不允许 SAM 账户的匿名枚举
网络访问: 不允许 SAM 账户和共享的匿名枚举
网络访问: 不允许存储网络身份验证的凭据或 .NET Passports
网络访问: 限制匿名访问命名管道和共享
将以上四项通通设为“已启用”
5. 删除 administratos 组的终端登录权限,改为为每个管理员加上远程权限(可选)
运行 gpedit.msc -> 计算机配置 -> 安全设置 -> 本地策略 -> 用户权限分配 -> 通过终端允许登录
7.审核策略(可选)
运行 gpedit.msc ->计算机配置 ->安全设置 ->本地策略 ->审核策略
策略更改: 无审核
登录事件: 成功,失败
对象访问: 失败
过程追踪: 无审核
目录服务访问:无审核
特权使用: 无审核
系统事件: 成功,失败
账户登录事件:成功,失败
账户管理: 成功,失败8.用户锁定(可选)
运行 gpedit.msc ->计算机配置 ->安全设置 ->帐户策略
设置为阈值3次,复位时间30分钟.
由于使用了集成安全方式,用户可以信赖操作系统的安全性,不必再维持两个独立的安全模式,这样大大简化了用户的管理工作,还可以使密码不再受到连接字符串的限制。 2、花上一定时间审计用空密码或者弱密码登录SQL的请求 使用以下的代码可以对空密码进行检测: Use master
Select name,
Password
from syslogins
where password is null
order by name
有很多免费工具和商业工具可以用来检测弱密码登录。SQLPing2就是一款可以用来检测弱密码和空密码的免费软件。 3、勤于检查组和角色成员 虽然SQL服务器安全模式有很多增强功能,但是它还是增加了一个额外许可层,我们必须监控好该层,以确定没有任何用户被赋予超过他们需要的访问权限,并确定没有任何用户规避了安全系统获得了权限的提升。还有一些幽灵用户,他们在公司内的职位改变了,但SQL服务器的许可结构并没有及时做出调整。确定用组进行对象访问权限的分配,而不是个人。 4、注意SQL服务器的物理安全 当你忙于干活的时候,把服务器锁在安全的地方,藏好你的钥匙。要知道如果有人接近了服务器,总会找到方法进入系统。 5、 多用用户自定义的存储表过程和视图来重写应用程序。 这样做可以最大限度减少需要直接访问数据表的操作,程序开发人员可以更好地控制数据存取的过程。 6、启用日志功能,记录所有的用户登录情况。 可以用以下的代码编写脚本达到这个目的: xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'SOFTWARE\Microsoft\MSSQLServer\MSSQLServer',N'AuditLevel', REG_DWORD,3 7、检查master..Sp_password,看存不存在木马程序代码。 比较你的产品脚本和全新安装系统的默认脚本之间的区别,并使该代码处于方便使用的状态。 8、检查master..Sp_helpstartup,看存不存在可疑木马进程。 确保没有被人在服务器里安装了后门程序。用Sp_unmakestartup移除任何可疑进程。 9、除非确实需要,否则请禁用SQL邮件功能。 启用邮件功能会让潜伏的攻击者找到另外一个途径来传播潜在的木马程序和病毒,并让他们很轻易发动一次拒绝服务攻击。虽然邮件功能的存在本身是无害的,但是它很可能会被攻击者所利用。 10、从数据库移除的游客(Guest)身份用户,避免任何未授权用户的非法操作。 这原本就是默认设置,不过还是要警惕以防万一某些DBO放松了对访问权的控制。也有存在例外的情况,那就是主数据库和临时数据库(tempdb),因为对它们而言,游客帐户是必需的。 11、确保所有的SQL服务器数据和系统文件都安装在NTFS分区。 确认必要的许可已经准备就绪,以防有非法入侵者获得对操作系统的存取操作权限,酿成大灾难。 12、使用低特权用户而不是LocalSystem或Administrator作为SQL服务器服务的访问操作帐户。 这个帐户应该只拥有最低权限(最好是本地用户的权限),并应该能够协助阻止服务器受到攻击。请注意,当使用Enterprise Manager或SQL Server Configuration Manager (SQL 2005版) 想要执行这个设置时,对文件、注册表和用户权限的访问控制表都是自动完成的。 13、设置强密码来保护sa帐户的安全。 前提是你设置的是SQL Server和Windows安全认证模式。如果可以,请把Windows认证模式设置为唯一的认证模式,这样可以不必担心有人会强行切入你的sa帐户。即便做了这样的设置,你还是要设置一个强密码,以防有人改变你的安全认证模式。 14、选择你确实需要的那些网络库 如果SQL服务器只允许本地访问,那何不禁用所有的网络库,并使用共享内存来访问SQL服务器呢?这样做可能会更好。只要把'(local)'作为服务器名就可以了。如果你的SQL服务器需要连接其他主机,那就使用TCP/IP netlib,然后确定是否需要SSL安全协议。 15、确保你已经安装了最新的操作系统及SQL服务器的Service Packs和Hot-Fixes。 这个应该不用别人提醒广大用户都会去做的。很简单,只要在你的SQL服务器上运行代码"select @@version",比较连接页面的结果就行了。 16、把危险存储过程和扩展存储过程设置为只允许系统管理员对其进行存取操作。 这些进程很多(推荐对下面列表中的进程进行设置),需要花上不少时间才能完成以上设置。切记先不要在产品服务器上执行这些设置,最好先在开发机上做测试,这样你就不用担心会影响到任何系统功能了。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_regread xp_perfend xp_perfmonitor
xp_perfsample xp_perfstart xp_readerrorlog xp_readmail xp_revokelogin
xp_runweb 文章来源:www.itzero.com-IT动力源
go
exec sp_addsrvrolemember N'aa', securityadmin
go
--作好SQL的安全管理
--作者:邹建首先,做好用户安全:
--简单的,只允许sql的用户访问sql(防止利用administrator组用户访问)
1.企业管理器--右键SQL实例--属性--安全性--身份验证--选择"sql server和windows"--确定
2.企业管理器--安全性--登陆--右键sa--设置密码--其他用户也设置密码
3.删除用户:
BUILTIN\Administrators
<机器名>\Administrator --这个用户不一定有
这样可以防止用windows身份登陆SQL
4.设置进入企业管理器需要输入密码
在企业管理器中
--右键你的服务器实例(就是那个有绿色图标的)
--编辑SQL Server注册属性
--选择"使用 SQL Server 身份验证"
--并勾选"总是提示输入登录名和密码"
--确定
--经过上面的设置,你的SQL Server基本上算是安全了. ------------------------------------------------------------------------
其次,改默认端口,隐藏服务器,减少被攻击的可能性
SQL Server服务器
--开始
--程序
--Microsoft SQL Server
--服务器网络实用工具
--启用的协议中"TCP/IP"
--属性
--默认端口,输入一个自已定义的端口,比如2433
--勾选隐藏服务器
----------------------------------------------------------------------------
--管好sql的用户,防止访问他不该访问的数据库(总控制,明细还可以控制他对于某个数据库的具体对象具有的权限)
--切换到你新增的用户要控制的数据库
use 你的库名
go
--新增用户
exec sp_addlogin 'test' --添加登录
exec sp_grantdbaccess N'test' --使其成为当前数据库的合法用户
exec sp_addrolemember N'db_owner', N'test' --授予对自己数据库的所有权限
--这样创建的用户就只能访问自己的数据库,及数据库中包含了guest用户的公共表
go
--删除测试用户
exec sp_revokedbaccess N'test' --移除对数据库的访问权限
exec sp_droplogin N'test' --删除登录
如果在企业管理器中创建的话,就用:企业管理器--安全性--右键登录--新建登录常规项
--名称中输入用户名
--身份验证方式根据你的需要选择(如果是使用windows身份验证,则要先在操作系统的用户中新建用户)
--默认设置中,选择你新建的用户要访问的数据库名服务器角色项
这个里面不要选择任何东西数据库访问项
勾选你创建的用户需要访问的数据库名
数据库角色中允许,勾选"public","db_ownew"确定,这样建好的用户与上面语句建立的用户一样
--------------------------------------------------------------------------- 最后一步,为具体的用户设置具体的访问权限,这个可以参考下面的最简示例:
--添加只允许访问指定表的用户:
exec sp_addlogin '用户名','密码','默认数据库名'
--添加到数据库
exec sp_grantdbaccess '用户名'
--分配整表权限
GRANT SELECT , INSERT , UPDATE , DELETE ON table1 TO [用户名]--分配权限到具体的列
GRANT SELECT , UPDATE ON table1(id,AA) TO [用户名]
-------------------------------------------------------------------
至于具体的安全设置和理论知道,参考SQL联机帮助