谈谈SQL Server数据库安全配置
2009-02-07张燕春
张燕春
随着数据库在各类区域性业务网络系统中的广泛应用,数据库安全问题日益凸显。如何加强数据库的安全呢?结合本人社保业务系统数据库管理工作中的一些经验,和大家全面分享SQL Server 2000数据库的安全配置。
一、对 SQL Server 2000进行安全配置
首先对操作系统进行安全配置,保证操作系统处于安全状态。然后对要使用的操作数据库软件进行安全审核,如ASP、PHP脚本等,这是很多基于数据库的WEB应用可能常出现的安全隐患,过滤掉脚本中类似 @、 / 等字符,防止被构造恶意SQL语句。再安装SQL Server2000后打上sp1、 sp2补丁。
二、确认SQL服务器系统安装在NTFS分区,且应用权限控制列表
如果入侵者得到对数据库系统存取操作权限,该层权限可以阻止入侵者进一步破坏数据。
配置方法:找到SQL Server安装文件夹,默认安装在“C:\Program Files Microsoft SQL Server”目录下。鼠标右键,选择“属性”。注意“共享”属性选项卡,设定为“不共享”。点击安全选项,只允许许可的用户访问该文件夹。
三、使用协议加密
SQL Server 2000使用Tabular Data Stream协议来进行网络数据交换,此协议所有的网络传输,如数据库内容、密码等都是明文的,是很大的安全隐患。它能被其他人在网络中截获,所以在条件容许情况下,最好使用SSL来加密协议。
四、修改或删除SA账户
修改或删除SA账户配置方法:打开SQL中的企业管理器,在工具选项卡中选择SQL server配置属性,点服务器设置,勾选允许“对系统目录直接进行修改”,然后打开查询分析器,登陆进去输入:
update sysxlogins set name=你要改成的名字 where sid=0x01
update sysxlogins set
sid=0xE765555BD44F054F89CD0076A06EA823where name=你要改成的名字。然后,在企业管理器中刷新登陆,可以看到SA变成了修改后的账户名,选中该账户名点击右键,出现删除的选项,即可执行删除SA账户操作。
五、使用安全的密码策略,禁用默认登录
很多数据库账号的密码过于简单,这跟系统密码过于简单是一个道理。SQL Server的“SA”账户在默认状态下是空密码,使用如下配置方法修改密码:
开始→所有程序→Microsoft SQL Server→企业管理器,展开控制台根目录,选择“安全性”,点击“登录”,用户列表中可以看到SA用户。双击打开,更改用户密码,设定一个足够复杂并且足够长度密码来加强其安全性,同时不要让该账号的密码写于应用程序或者脚本中。
另外可使用下面的SQL语句定期查看是否有不符合密码要求的账号:
Use master
Select name,Password from syslogins where password is null
在企业管理器中"安全选项" 之下禁用默认登录,使未经认可的不在 syslogins 表中的使用者无权登陆到有效的数据库服务器。
六、关闭允许对“系统目录直接进行修改”功能
配置方法:鼠标右键数据库服务器,选择“服务器设置”,在“服务器行为”字段下,关闭“系统目录直接进行修改”。如果开启此功能,在数据库架构内可以使用扩展存储过程对系统目录下的文件或者其他信息进行修改,或者在数据库架构内上传具有恶意功能的代码。严禁使用Xp_cmdshell命令。限制所有的账户拥有操作、因为如果恶意入侵者拥有操作该命令的权限,就可以轻松得到系统管理员的权限。
七、关闭远程服务器连接
如果允许使用远程服务器连接,入侵者在自己的机器上安装SQL Server就可以使用数据库服务器连接到你服务器的数据库上,从而造成级别很高的安全风险。
配置方法:展开控制台根目录,选择“(Local)Windows NT”,鼠标右键,选择“属性”,在配置窗口中选择“连接”,去掉“允许其他SQL Server使用RPC远程连接到本SQL Server”选项,防止他人使用数据库的恶意连接。
八、关闭远程终端服务和Web管理功能,禁用使用者交互式登录SQL Server
一旦其中某个使用者能够交互式进入一个服务器之内,就有可能利用管理员的存取特权得到管理员权限。
配置方法: 展开控制台根目录,选择“(Local)Windows NT”,鼠标右键,选择“属性”,在配置窗口中选择“安全性”选项卡,启用混合模式安全性认证,在默认状态只是执行失败的审核,使用“SQL Server和Windows”身份验证,审核级别使用“全部”, 记录所有的身份验证状况。“无”表示不执行审核;“成功”表示只审核成功的登录尝试;“失败”表示只审核失败的登录尝试;“全部”表示审核成功的和失败的登录尝试。
九、建立一个低权限用户做为SQL服务器服务的查询操作专用账户
最好不要用LocalSystem或SA。 这个账户应该设定作为一个服务运行的最小权利,注意当使用企业管理器做以上设置时,文件、注册表和使用者权利上的 ACLs也同时被处理。。
配置方法:展开控制台根目录,选择“数据库”,展开,点击“用户”,在右侧用户列表中可以看到已经授权的用户,在默认状态下只有“SA”和“Guest”两个用户。双击打开已经建立的低权限账户,打开数据库用户属性。选择数据库脚色,尽可能低的权限。打开“权限”按钮,赋予用户相应的权限。
十、不要让人随便探测到你的TCP/IP端口
默认情况下,SQL Server使用1433端口监听,配置SQL Server时 请改变该端口。
配置方法:在实例属性中选择TCP/IP协议的属性,选择隐藏 SQL Server 实例。如果隐藏了 SQL Server 实例,则禁止了对试图枚举网络上现有的 SQL Server 实例的客户端所发出的广播作出响应,这样,除非用Port Scan,否则别人无法用1434来探测你的TCP/IP端口了。
十一、管理扩展存储过程
对存储过程进行大手术,并且对账号调用扩展存储过程的权限要慎重。我们在大多数应用中其实用不到多少系统的存储过程,而SQL Server的这么多系统存储过程只是用来适应广大用户需求的,所以可以删除不必要的存储过程,因为有些系统的存储过程能很容易地被人利用起来提升权限或进行破坏。如果不需要扩展存储过程xp_cmdshell ,使用这个SQL语句把它去掉:
use master
exec sp_dropextendedproc'xp_cmdshell'
使用以下语句也可以恢复该存储过程:
Exec sp_addextendedproc ' xp_cmdshell ', 'xpsql70.dll'
如果不需要可停用部分对象连接与嵌入自动化储存程序( 注意: 当这些储存程序被停用的时候 , 部分企业管理器功能可能丢失):
Sp_OASetProperty
Sp_OAStop
Sp_OADestroy
Sp_OAGetProperty
Sp_OACreate
Sp_OAMethod
Sp_OAGetErrorInfo
禁用你不需要的以下注册表存储过程,它们有些能够读出操作系统管理员的密码,如:
Xp_regdeletevalue
Xp_regremovemultistring
Xp_regenumvalues
Xp_regread
Xp_regwrite
Xp_regaddmultistring
Xp_regdeletekey
移除其他您认为会造成威胁的系统储存进程如:
xp_enumqueuedtasks
xp_grantlogin
xp_logevent
xp_loginconfig
xp_logininfo
sp_sdidebug
xp_availablemedia
xp_cmdshell
xp_deletemail
xp_dirtree
xp_fixeddrives
xp_getfiledetails
xp_getnetname
xp_dropwebtask
xp_dsninfo
xp_enumdsn
xp_eventlog
xp_findnextmsg
xp_enumerrorlogs
xp_enumgroups
xp_revokelogin
xp_runwebtask
xp_snmp_raisetrap
xp_sprintf
xp_sqlinventory
xp_sqlregister
xp_sqltrace
xp_schedulersignal
xp_sendmail
xp_sscanf
xp_startmail
十二、加强数据库日志的记录,定期检测SQL日志文件
审核数据库登录事件的“失败和成功”,在实例属性中选择“安全性”,将审核级别选定为全部,这样在数据库系统和操作系统日志里面,就会详细记录所有账号的登录事件。
定期查看SQL Server日志,检查是否有可疑登录事件发生,或者使用DOS命令。findstr /C:“登录” d:Microsoft SQL ServerMSSQLLOG*.* ,检索其中成功登录或者登录失败的信息,从中找到非法入侵所作的数据库登录尝试, 配置方法:展开控制台根目录,选择“管理”,展开,选择“SQL Server日志”,在右侧窗口列表中打开所选日志文件,会看到上面有详细的记录。
十三、将数据库文件和日志文件分开存储在不同的物理存储设备上
配置方法:双击数据库文件名,打开数据库属性,点击“数据文件”选项,设置数据文件存放的位置。点击“事务日志”选项,设置日至文件存放的位置。一旦发生灾难性故障,如硬件损坏,数据文件和日志存放在一起,没有任何手段可以恢复数据。但若是做过数据备份,同时日志文件保存在其它位置,日志文件没有损坏,就可能恢复数据。
十四、禁用SQL邮件功能
它的存在会使潜在的攻击者递送潜在的 trojans ,病毒或是简单实现一个DOS攻击成为可能。
十五、推荐使用SQL Server2000支持的“完全”数据库故障还原模型方式
SQL Server2000支持“简单”、“完全”和“大容量日志记录”三种数据库故障还原模型,配置方法:选中数据库名称,鼠标右键选择属性,点击“选项”选项卡,在故障还原子段下有‘模型栏目,选择“完全”方式。
第十六、制定严格的数据库备份还原策略
设计有效的备份和还原策略需考虑的因此包括:数据可用性和防数据丢失目标、数据库特性、资源约束等。当然其中最重要的一点是务必将将数据库和备份放置在不同的设备上。 否则,如果包含数据库的设备失败,备份也将不可用。 此外,将数据和备份放置在不同的设备上还可以提高写入备份和使用数据库时的 I/O 性能。
以上是SQL Server 2000数据库安全配置常用的一些方法,我们如果能结合自身工作灵活使用,数据库的安全管理工作应该就不是一件难事了。