SQLServer数据库的安全为题与安全策略摘要:随着网络和SQLServer数据库应用的发展,SQLServer数据库安全性一直是微软公司致力改善和用户关心的问题。本文就SQLServer数据库的安全漏洞的分析,帮助数据库管理员对数据库进行有效的安全配置,探讨数据库安全管理策略。关键词:SQL;数据库;安全;策略0.引言在各种数据库中,SQLServer是目前被广泛使用的网络关系型数据库,是设计中、小型数据库的首选的工具,虽然SQLServer版本不断更新,其安全性不断改进和完善,但随着网络和数据库使用的不断深入,SQLServer的安全性也是用户最关心的项目之一。1.数据库的安全漏洞SQLServer数据库任一版本都不同程度地存在着安全漏洞,这些漏洞大部分是由不良设置或者实施造成。其中,最常见的几个与数据库相关的安全漏洞:不良的口令政策、SQL注入、交叉站点脚本、数据泄漏、不适当的错误处理等。数据库安全漏洞不光威胁数据库安全,也威胁到操作系统和其他可信任的系统。因此,对数据库的安全漏洞详细了解,有助于让用户能够采取相应的措施来修补数据库存在的安全隐患。对于用户而言,在数据库方面存在的最大问题是经常使用默认或者软弱的口令,来保护像数据库一样重要信息。其补救措施是强制执行强大的口令政策。也就是说,口令要定期变换,口令长度最少为10位数且包含字母和符号。采用这种政策,你将关闭攻击者通向你的数据的方便之门。SQL注入是依靠软弱的数据库实施,特别是在如何向数据库发送SQL请求方面的实施。如果这个数据库接受了用户提供的不干净的或者没有经过验证的数据产生的SQL请求,这就会为SQL注入攻击敞开大门。例如,通过修改从基于网络的格式受到的信息,攻击者能够提供恶意的SQL请求并且把指令直接发送到数据库。要防止这种类型的攻击,在让这些数据接近你的脚本、数据访问程序和SQL查询之前,保证所有用户提供的数据是合法的是非常重要的。验证和清洁从用户那里收到的数据的另一个理由是防止交叉站点脚本攻击。这种攻击能够用来攻破连接到一个Web服务器的数据库。黑客通过一个网络蠕虫把JavaScript等客户方面的脚本注入到一个网络应用程序的输出中。这些脚本用于收集cookie数据。这些数据经常被错误地用来存储用户账户登录信息等资料。一个经常被忽略的问题是什么时候建立一个数据库应用程序是泄漏数据。这是敏感的数据要发送的地方或者是非故意踢敏感数据的地方。这个错误将导致不能保证访问数据库备份磁带的安全和控制这种访问。通常,更敏感的数据产生于有关数据的合法查询的答案,就像从医疗处方判断疾病一样。常用的解决方案是监视查询方式以检测这种行动。与数据泄漏密切相关的是在数据库出现错误时不适当地处理这些错误,许多应用程序显示了详细的信息。这些错误信息能够泄漏有关数据库结构信息。SQLServer数据库的系统漏洞的产生的主要原因都是由于程序员不正确和不安全的编程引起的。加上程序员的水平及经验的参差不齐,这部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。在使用时,由于用户的不正确配置就有可能导致漏洞产生。认识和了解SQLServer数据库和系统安全漏洞,分析漏洞产生的原因,找出SQLServer数据库的漏洞,是为了增加数据库的安全,这是解决SQLServer数据库安全的理论基础2.数据库的安全设置在设计SQLServer数据库时,要考虑数据库的安全机制,安装时要注意整个系统的安全设置,明确操作系统的用户权限,使用文件驱动程序对文件操作进行过滤,即对数据库文件、日志文件、备份文件等各操作事项限定为数据库进程和指定进程进行操作,其余的进程为禁止操作,这时数据库的安性就取决于操作系统本身、数据库系统本身和网络传输的安全性。随着B/S模式应用开发的发展,SQLINJECTION的攻击测试不可避免,很多大型的网站和论坛都相继被注入。目前网站一般使用SQLServer作为后台数据库,正因为如此,很多人开始怀疑SQLServer的安全性。其实SQLServer各个版本的数据库都已经通过了美国政府的C2级安全认证——这是该行业所能拥有的最高认证级别,所以使用SQLServer还是相当的安全的。当然和Orcal、DB2等还是有差距,但是SQLServer的易用性和实用性还是能被广大的用户所认同,那如何做好数据库的安全设置是解决问题关键。2.1注意操作系统的安全设置主要方法有:1)限制不必要的用户,禁用GUEST账号,并为amdinistrator用户账号更名并增中密码;2)设置系统登录中的各个选项;3)使用NTFS格式分区;4)修改注册表关闭默认共享服备;5)关闭不需要的服务;6)关闭不必要的端口,最好不要使用远程管理软件和不信任的服务器软件等。2.2安装最新SQLServer数据库补丁包为了保证数据库的安全性,一个常用的、最有效的方法是到微软官方网站上及时更新SQLServer的servicepack以及其它已发布的安全更新。2.3修改默认的1433端口,并且将SQLServer隐藏这样能禁止对试图枚举网络上现有的SQLServer客户端所发出的广播作出响应。另外,还需要在TCP/ip筛选中将1433端口屏蔽掉,尽可能的隐藏SQLServer数据库。这样子一但让攻击创建了SQLServer的账号,也不能马上使用查询分析器远程登陆来进行下一步的攻击。2.4删除有安全问题的SQL过程SQLINJECTION往往在WebCODE中产生。攻击者一旦确认了网站存在SQLINJECTION漏洞,肯定有一步操作步骤就是测试网站的SQLServer使用者具有多大的权限。一般都会借助SELECTIS_SRVROLEMEMBER('sysadmin'),或者SELECTIS_MEMBER('db_owner'),SQLServer就会提示了错误信息,从该信息中即可知道一些敏感信息)等语句进行测试。2.5删除危险函数SQLServer为了方便操作Excel、Access、远程服务器等数据库,增加了OPENDATASOURCE和OPENROWSET等函数,正是这些函数增加了数据库的危险性。黑客可以利用该函数进行数据库挂马,从而获得数据库,以及服务器的控制权限。如OPENDATASOURCE的用法:SELECT*FROMOPEN-DATASOURCE('SQLOLEDB','DataSource=ServerName;UserID=。MyUID;Password=MyPass').Northwind.dbo.Categories黑客完全可以用此语句获得注入数据库的库名、表名、列名、字段值的所有信息。2.6删除不安全的扩展存储过程xp_cmdshell是一个非常危险的扩展存储过程,它可执行dos命令,危险的不只是这个,还有Xp_regaddmulti-string、Xp_regdeletekey、Xp_regdeletevalue等都是删除的对象。3.数据库的管理策略为保证数据库安全,安全管理策略从几个方面加以分析。3.1访问控制访问控制(accesscontrol)是对用户访问数据库各种资源的权力控制。SQLServer对用户的访问控制分为两阶段:一是安全账户认证,二是访问许可认证。在安全账户认证阶段,Windows操作系统或SQLServer对用户登录进行认证,如认证成功,用户可连接到SQLServer,否则数据库服务器将拒绝用户的连接请求。访问许可确认指的是用户成功连接到SQLServer后,系统根据数据库中保存的与服务器登录标识相对应的用户帐户来判断他们是否拥有对数据库的访问许可。在建立SQLServer登录后,需要将许可授予用户或用户组,使他们能够在数据库中执行任务。默认条件下,数据库内只有一名特殊的用户——DBO,用以表示数据库所有者。它对数据库及其对象拥有完全控制权。要使用户拥有对数据库的访问权,管理员必须明白无误地将数据库许可赋予合法的登录者。区分好SQLServer的登录和数据库用户许可,管理员可以方便地将服务器上某一个数据库的访问权赋予某一用户,同时限此用户访问服务器上的其他数据库。有了访问控控制,SQLServer可以防止非法的用户进入。3.2数据库许可合法用户进入服务器和数据库后,对数据对象进行操作还要通过数据库访问许可机制来控制。首先,可通过数据库许可中的语句许可达到限制数据库用户执行某些Transact-SQL语句(如createtable、createview等)的目的。其次,可通过数据库许可中的对象许可达到限制数据库用户执行数据库对象某些任务(如select、insert、DRI等)的能力。但要注意的是,在应用过程中一定要分清每个许可的三种状态的区别。3.3使用系统存储过程建立数据安全性作为SQLServer数据库管理员,在某些情况下需要赋予用户在数据库中执行一个或多个任务能力,但出于安全性方面的考虑,你可能无法或不愿意赋予对那个数据源的用户许可。如你想让某一用户具有select许可,而不拥有delete许可,此时就可通过建立存储过程达到目的,从而保护了数据的安全。3.4使用视图建立数据安全性用户创建数据库的目的就是使用数据,而这些数据都是通过基本表来体现。但对于一名SQLServer管理员而言还应清醒地认识到,在一个数据库中可以包含多张表,可是用户仅使用某些表中的局部数据。若此时SQLServer管理员赋予用户能够访问这些表的许可,形成用户访问区域过大,从而造成用户对数据库中数据安全的威胁。为了避免这一情况,可以通过建立数据视图的方式达到数据安全的目的。3.5使用服务器角色建立数据安全性在SQLServer系统中,为了便于管理增加了同时能为多个数据库用户的登录和许可进行设置的能力,这种能力系统是通过角色来体现。服务器角色是一类特殊的功能的集合,拥有执行某些服务器操作的权力。服务器角色中包括了SQLServer登录,因为它们所拥有的许可在本质上是作用于整个服务器的,而不是单独哪个数据库。在SQLServer系统中提供了7种预定义服务器角色,我们使用时还应注意数据库创建者、进程管理员、安全管理员、服务器管理员、设置管理员、系统管理员等角色的使用。当我们将某一用户添加到这些角色中时,我们要慎重考虑,因为这些角色会给数据带来潜在的威胁。3.6使用数据库角色建立数据安全性此角色用于一次设置多个数据库用户对数据库的访问许可,它是直接面对数据的,若许可权限配置不当则直接威胁数据库中的数据,如PUBLIC(公共)角色,在默认情况下,所有的SQLServer登录都是这个组内的成员。作为管理员,在对公共角色赋予许可时必须非常小心谨慎。3.7数据备份在数据库日常管理过程中,进行数据备份为首要的工作。当服务器或SQLServer数据库系统发生崩溃时,其原先的数据很难恢复,因为SQLServer数据库不像VisualFoxpro等数据库可以直接拷贝数据库文件,前者必须要有备份策略才能安全恢复。因此,数据库应该安装在所属单位内部网的安全区域中,不要直接连接到Internet。另外,在处理异常故障时应实施异机备份策略,采用适当有效的备份措施,保护数据安全。3.8数据库加密数据库加密要求数据库密码系统将明文数据加密成密文数据,数据库中存储密文数据,查询时将密文数据取出解密得到明文信息,即便硬件存储失窃也不会泄漏数据,这样就大大提高了数据库系统的安全性,当然成本也随之提高。对于网络层面上的攻击,数据库主要采用安装防火墙、进行入侵检测等方式来提高其安全性能。防火墙阻挡来自外部的不可信连接。入侵检测系统一般部署在防火墙后,通过网络截包解析或者分析日志来检测网络中和主机上的异常。4.结束语由于SQLServer数据库安全事关各种因素,为尽可能保证SQLServer数据库系统的安全,除了注意以上的各种安全配置和加强安全管理策略外,还应加强内部管理人员的安全培训和完善安全管理制度。参考文献[1]杨苏.SQLServer常见的安全配置.改革与开放,+2010年4月刊.[2]胡登卫等.