数据库是电子商务、金融以及ERP系统的基础,通常都保存着重要的商业伙伴和客户信息。大多数企业、组织以及政府部门的电子数据都保存在各种数据库中,他们用这些数据库保存一些个人资料,比如员工薪水、个人资料等等。数据库服务器还掌握着敏感的金融数据。包括交易记录、商业事务和帐号数据,战略上的或者专业的信息,比如专利和工程数据,甚至市场计划等等应该保护起来防止竞争者和其他非法者获取的资料。数据完整性和合法存取会受到很多方面的安全威胁,包括密码策略、系统后门、数据库操作以及本身的安全方案。但是数据库通常没有象操作系统和网络这样在安全性上受到重视。
2f9%HX(5 GU)NZ[e 微软的SQL Server是一种广泛使用的数据库,很多电子商务网站、企业内部信息化平台等都是基于SQL Server上的,但是数据库的安全性还没有被人们更系统的安全性等同起来,多数管理员认为只要把网络和操作系统的安全搞好了,那么所有的应用程序也就安全了。大多数系统管理员对数据库不熟悉而数据库管理员有对安全问题关心太少,而且一些安全公司也忽略数据库安全,这就使数据库的安全问题更加严峻了。数据库系统中存在的安全漏洞和不当的配置通常会造成严重的后果,而且都难以发现。数据库应用程序通常同操作系统的最高管理员密切相关。广泛SQL Server数据库又是属于“端口”型的数据库,这就表示任何人都能够用分析工具试图连接到数据库上,从而绕过操作系统的安全机制,进而闯入系统、破坏和窃取数据资料,甚至破坏整个系统。
opCQ=G1 "C+Fl
/v ,E4qxZC(X o4,m+: Zr;(a;QKs 这里,我们主要谈论有关SQL Server2000数据库的安全配置以及一些相关的安全和使用上的问题。
yn{U/+ $7\hszjZ zx5t
gZd,N 在进行SQL Server 2000数据库的安全配置之前,首先你必须对操作系统进行安全配置,保证你的操作系统处于安全状态。然后对你要使用的操作数据库软件(程序)进行必要的安全审核,比如对ASP、PHP等脚本,这是很多基于数据库的WEB应用常出现的安全隐患,对于脚本主要是一个过滤问题,需要过滤一些类似 , ‘ ; @ / 等字符,防止破坏者构造恶意的SQL语句。接着,安装SQL Server2000后请打上补丁sp1以及最新的sp2。
m RtE~~p AdRt\H < |CjdmQ u 下载地址是:
http://www.microsoft.com/sql/downloads/2000/sp1.asp 和
http://www.microsoft.com/sql/downloads/2000/sp2.asp +@#-S AFNE1q;{\ VHU,G+ms 在做完上面三步基础之后,我们再来讨论SQL Server的安全配置。
JZcW? Or .eDI ZX &E!-~'|z 1、使用安全的密码策略
B 6,X) U,$^|Iz fOO[`"'Pq 我们把密码策略摆在所有安全配置的第一步,请注意,很多数据库帐号的密码过于简单,这跟系统密码过于简单是一个道理。对于sa更应该注意,同时不要让sa帐号的密码写于应用程序或者脚本中。健壮的密码是安全的第一步!
5W?r04 cU r'mb $qhVow5~ SQL Server2000安装的时候,如果是使用混合模式,那么就需要输入sa的密码,除非你确认必须使用空密码。这比以前的版本有所改进。
Gt?ckMB 同时养成定期修改密码的好习惯。数据库管理员应该定期查看是否有不符合密码要求的帐号。比如使用下面的SQL语句:
[2ZZPY9?Q 26c1Yl,DMn oJEjg>%n Use master
`)eqTeW Select name,Password from syslogins where password is null
n!\&X9%[8 2、使用安全的帐号策略。
N/mC,7Q w1|YR 由于SQL Server不能更改sa用户名称,也不能删除这个超级用户,所以,我们必须对这个帐号进行最强的保护,当然,包括使用一个非常强壮的密码,最好不要在数据库应用中使用sa帐号,只有当没有其它方法登录到 SQL Server 实例(例如,当其它系统管理员不可用或忘记了密码)时才使用 sa。建议数据库管理员新建立一个拥有与sa一样权限的超级用户来管理数据库。安全的帐号策略还包括不要让管理员权限的帐号泛滥。
_{'HY+M \o,`@2H+' |;P9S SQL Server的认证模式有Windows身份认证和混合身份认证两种。如果数据库管理员不希望操作系统管理员来通过操作系统登陆来接触数据库的话,可以在帐号管理中把系统帐号“BUILTIN\Administrators”删除。不过这样做的结果是一旦sa帐号忘记密码的话,就没有办法来恢复了。
}!RFX)T w.H\j9E
l uCpk1d 很多主机使用数据库应用只是用来做查询、修改等简单功能的,请根据实际需要分配帐号,并赋予仅仅能够满足应用要求和需要的权限。比如,只要查询功能的,那么就使用一个简单的public帐号能够select就可以了。
LP:C9Ol\ rgg3{bU/ 1PJ8O|Zt8 3、加强数据库日志的记录。
b7bbrR8 cLe659 & nXqZkZE\ 审核数据库登录事件的“失败和成功”,在实例属性中选择“安全性”,将其中的审核级别选定为全部,这样在数据库系统和操作系统日志里面,就详细记录了所有帐号的登录事件。
$mG&4Y ``mW\=fe 请定期查看SQL Server日志检查是否有可疑的登录事件发生,或者使用DOS命令。
~ugK&0i[2 !B{N:?r findstr /C:"登录" d:\Microsoft SQL Server\MSSQL\LOG\*.*
ryp@<}A]!d g&"__~dS-F 38T2IN 4、管理扩展存储过程
cB9`U4< YkLEK|d \[w82%U 对存储过程进行大手术,并且对帐号调用扩展存储过程的权限要慎重。其实在多数应用中根本用不到多少系统的存储过程,而SQL Server的这么多系统存储过程只是用来适应广大用户需求的,所以请删除不必要的存储过程,因为有些系统的存储过程能很容易地被人利用起来提升权限或进行破坏。
B?r [| nzHsyL Jm8#M z 如果你不需要扩展存储过程xp_cmdshell请把它去掉。使用这个SQL语句:
D0=H&Z[ @l:\Ka~TS u;*Wc9>sU use master
niV= Ijt{5 sp_dropextendedproc 'xp_cmdshell'
fu 95-)M xp_cmdshell是进入操作系统的最佳捷径,是数据库留给操作系统的一个大后门。如果你需要这个存储过程,请用这个语句也可以恢复过来。
29E9ZjSK sp_addextendedproc 'xp_cmdshell', 'xpsql70.dll'
NPM}w! PO[
AP%; M[R\URu8 如果你不需要请丢弃OLE自动存储过程(会造成管理器中的某些特征不能使用),这些过程包括如下:
dF%sD|<) %Ot^G%34 Sp_OACreate Sp_OADestroy Sp_OAGetErrorInfo Sp_OAGetProperty
@OlV6M;qJ Sp_OAMethod Sp_OASetProperty Sp_OAStop
9RoN,e8! BJI
R !J +;Jb)8 去掉不需要的注册表访问的存储过程,注册表存储过程甚至能够读出操作系统管理员的密码来,如下:
v/BMzVi .q1OT> Xp_regaddmultistring Xp_regdeletekey Xp_regdeletevalue Xp_regenumvalues
&dkj