主 页  下载中心 文章中心 在线杀毒 软件论坛
国内杀毒软件     瑞星杀毒 金山毒霸 江民杀毒 光华反病毒 更多... 木马专杀   木马杀客 木马克星 木马清道夫 AVG(原Ewido)Anti-Spyware 更多...
国外杀毒软件     卡巴斯基   诺顿   趋势 安博士 熊猫卫士  小红伞 驱逐舰 麦咖啡McAfee   NOD32   F-Secure   Dr.Web   Avast   更多...
升级补丁   瑞星升级 金山毒霸升级 江民升级 光华升级 卡巴斯基升级 诺顿升级 趋势升级 安博士升级 NOD32升级 Dr.Web升级 Avast升级
流氓软件清理     360安全卫士 瑞星卡卡   金山毒霸系统清理专家 Wopti流氓软件清除大师   恶意软件清理助手   超级兔子网络卫士 更多...
防火墙     天网 费尔 冰盾 更多... 病毒专题     熊猫烧香病毒专题 电眼间谍病毒专题 AV终结者病毒专题 灰鸽子清理     更多...
系统漏洞补丁     windowXP系统漏洞补丁 window2000系统漏洞补丁 window2003系统漏洞补丁 windowVISTA系统漏洞补丁 更多...
 您当前的位置:爱客者 -> 文章中心 -> 系统安全 -> 数据库安全 -> 文章内容
sql server数据库安全规划全攻略
来源:网络 时间:2006-5-9

  在改进sql server 7.0系列所实现的安全机制的过程中,microsoft建立了一种既灵活又强大的安全管理机制,它能够对用户访问sql server服务器系统和数据库的安全进行全面地管理。按照本文介绍的步骤,你可以为sql server 7.0(或2000)构造出一个灵活的、可管理的安全策略,而且它的安全性经得起考验。

  一、验证方法选择

本文对验证(authentication)和授权(authorization)这两个概念作不同的解释。验证是指检验用户的身份标识;授权是指允许用户做些什么。在本文的讨论中,验证过程在用户登录sql server的时候出现,授权过程在用户试图访问数据或执行命令的时候出现。

构造安全策略的第一个步骤是确定sql server用哪种方式验证用户。sql server的验证是把一组帐户、密码与master数据库sysxlogins表中的一个清单进行匹配。windows nt/2000的验证是请求域控制器检查用户身份的合法性。一般地,如果服务器可以访问域控制器,我们应该使用windows nt/2000验证。域控制器可以是win2k服务器,也可以是nt服务器。无论在哪种情况下,sql server都接收到一个访问标记(access token)。访问标记是在验证过程中构造出来的一个特殊列表,其中包含了用户的sid(安全标识号)以及一系列用户所在组的sid。正如本文后面所介绍的,sql server以这些sid为基础授予访问权限。注意,操作系统如何构造访问标记并不重要,sql server只使用访问标记中的sid。也就是说,不论你使用sql server 2000、sql server 7.0、win2k还是nt进行验证都无关紧要,结果都一样。

如果使用sql server验证的登录,它最大的好处是很容易通过enterprise manager实现,最大的缺点在于sql server验证的登录只对特定的服务器有效,也就是说,在一个多服务器的环境中管理比较困难。使用sql server进行验证的第二个重要的缺点是,对于每一个数据库,我们必须分别地为它管理权限。如果某个用户对两个数据库有相同的权限要求,我们必须手工设置两个数据库的权限,或者编写脚本设置权限。如果用户数量较少,比如25个以下,而且这些用户的权限变化不是很频繁,sql server验证的登录或许适用。但是,在几乎所有的其他情况下(有一些例外情况,例如直接管理安全问题的应用),这种登录方式的管理负担将超过它的优点。

  二、web环境中的验证

即使最好的安全策略也常常在一种情形前屈服,这种情形就是在web应用中使用sql server的数据。在这种情形下,进行验证的典型方法是把一组sql server登录名称和密码嵌入到web服务器上运行的程序,比如asp页面或者cgi脚本;然后,由web服务器负责验证用户,应用程序则使用它自己的登录帐户(或者是系统管理员sa帐户,或者为了方便起见,使用sysadmin服务器角色中的登录帐户)为用户访问数据。

这种安排有几个缺点,其中最重要的包括:它不具备对用户在服务器上的活动进行审核的能力,完全依赖于web应用程序实现用户验证,当sql server需要限定用户权限时不同的用户之间不易区别。如果你使用的是iis 5.0或者iis 4.0,你可以用四种方法验证用户。第一种方法是为每一个网站和每一个虚拟目录创建一个匿名用户的nt帐户。此后,所有应用程序登录sql server时都使用该安全环境。我们可以通过授予nt匿名帐户合适的权限,改进审核和验证功能。

第二种方法是让所有网站使用basic验证。此时,只有当用户在对话框中输入了合法的帐户和密码,iis才会允许他们访问页面。iis依靠一个nt安全数据库实现登录身份验证,nt安全数据库既可以在本地服务器上,也可以在域控制器上。当用户运行一个访问sql server数据库的程序或者脚本时,iis把用户为了浏览页面而提供的身份信息发送给服务器。如果你使用这种方法,应该记住:在通常情况下,浏览器与服务器之间的密码传送一般是不加密的,对于那些使用basic验证而安全又很重要的网站,你必须实现ssl(secure sockets layer,安全套接字层)。



在客户端只使用ie 5.0、ie 4.0、ie 3.0浏览器的情况下,你可以使用第三种验证方法。你可以在web网站上和虚拟目录上都启用nt验证。ie会把用户登录计算机的身份信息发送给iis,当该用户试图登录sql server时iis就使用这些登录信息。使用这种简化的方法时,我们可以在一个远程网站的域上对用户身份进行验证(该远程网站登录到一个与运行着web服务器的域有着信任关系的域)。

最后,如果用户都有个人数字证书,你可以把那些证书映射到本地域的nt帐户上。个人数字证书与服务器数字证书以同样的技术为基础,它证明用户身份标识的合法性,所以可以取代nt的challenge/response(质询/回应)验证算法。netscape和ie都自动在每一个页面请求中把证书信息发送给iis。iis提供了一个让管理员把证书映射到nt帐户的工具。因此,我们可以用数字证书取代通常的提供帐户名字和密码的登录过程。

由此可见,通过nt帐户验证用户时我们可以使用多种实现方法。即使当用户通过iis跨越internet连接sql server时,选择仍旧存在。因此,你应该把nt验证作为首选的用户身份验证办法。

  三、设置全局组

构造安全策略的下一个步骤是确定用户应该属于什么组。通常,每一个组织或应用程序的用户都可以按照他们对数据的特定访问要求分成许多类别。例如,会计应用软件的用户一般包括:数据输入操作员,数据输入管理员,报表编写员,会计师,审计员,财务经理等。每一组用户都有不同的数据库访问要求。

控制数据访问权限最简单的方法是,对于每一组用户,分别地为它创建一个满足该组用户权限要求的、域内全局有效的组。我们既可以为每一个应用分别创建组,也可以创建适用于整个企业的、涵盖广泛用户类别的组。然而,如果你想要能够精确地了解组成员可以做些什么,为每一个应用程序分别创建组是一种较好的选择。例如,在前面的会计系统中,我们应该创建data entry operators、accounting data entry managers等组。请记住,为了简化管理,最好为组取一个能够明确表示出作用的名字。

除了面向特定应用程序的组之外,我们还需要几个基本组。基本组的成员负责管理服务器。按照习惯,我们可以创建下面这些基本组:sql server administrators,sql server users,sql server denied users,sql server db creators,sql server security operators,sql server database security operators,sql server developers,以及 db_name users(其中db_name是服务器上一个数据库的名字)。当然,如果必要的话,你还可以创建其他组。

创建了全局组之后,接下来我们可以授予它们访问sql server的权限。首先为sql server users创建一个nt验证的登录并授予它登录权限,把master数据库设置为它的默认数据库,但不要授予它访问任何其他数据库的权限,也不要把这个登录帐户设置为任何服务器角色的成员。接着再为sql server denied users重复这个过程,但这次要拒绝登录访问。在sql server中,拒绝权限始终优先。创建了这两个组之后,我们就有了一种允许或拒绝用户访问服务器的便捷方法。

为那些没有直接在sysxlogins系统表里面登记的组授权时,我们不能使用enterpris managr,因为enterprise manager只允许我们从现有登录名字的列表选择,而不是域内所有组的列表。要访问所有的组,请打开query analyzer,然后用系统存储过程sp_addsrvrolemember以及sp_addrolemember进行授权。

对于操作服务器的各个组,我们可以用sp_addsrvrolemember存储过程把各个登录加入到合适的服务器角色:sql server administrators成为sysadmins角色的成员,sql server db creators成为dbcreator角色的成员,sql server security operators成为securityadmin角色的成员。注意sp_addsrvrolemember存储过程的第一个参数要求是帐户的完整路径。例如,bigco域的joes应该是bigco\joes(如果你想用本地帐户,则路径应该是server_name\joes)。



要创建在所有新数据库中都存在的用户,你可以修改model数据库。为了简化工作,sql server自动把所有对model数据库的改动复制到新的数据库。只要正确运用model数据库,我们无需定制每一个新创建的数据库。另外,我们可以用sp_addrolemember存储过程把sql server security operators加入到db_securityadmin,把sql server developers加入到db_owner角色。

注意我们仍然没有授权任何组或帐户访问数据库。事实上,我们不能通过enterprise manager授权数据库访问,因为enterprise manager的用户界面只允许我们把数据库访问权限授予合法的登录帐户。sql server不要求nt帐户在我们把它设置为数据库角色的成员或分配对象权限之前能够访问数据库,但enterprise manager有这种限制。尽管如此,只要我们使用的是sp_addrolemember存储过程而不是enterprise manager,就可以在不授予域内nt帐户数据库访问权限的情况下为任意nt帐户分配权限。

到这里为止,对model数据库的设置已经完成。但是,如果你的用户群体对企业范围内各个应用数据库有着类似的访问要求,你可以把下面这些操作移到model数据库上进行,而不是在面向特定应用的数据库上进行。

  四、允许数据库访问

在数据库内部,与迄今为止我们对登录验证的处理方式不同,我们可以把权限分配给角色而不是直接把它们分配给全局组。这种能力使得我们能够轻松地在安全策略中使用sql server验证的登录。即使你从来没有想要使用sql server登录帐户,本文仍旧建议分配权限给角色,因为这样你能够为未来可能出现的变化做好准备。

创建了数据库之后,我们可以用sp_grantdbaccess存储过程授权db_name users组访问它。但应该注意的是,与sp_grantdbaccess对应的sp_denydbaccess存储过程并不存在,也就是说,你不能按照拒绝对服务器访问的方法拒绝对数据库的访问。如果要拒绝数据库访问,我们可以创建另外一个名为db_name denied users的全局组,授权它访问数据库,然后把它设置为db_denydatareader以及db_denydatawriter角色的成员。注意sql语句权限的分配,这里的角色只限制对对象的访问,但不限制对ddl(data definition language,数据定义语言)命令的访问。

正如对登录过程的处理,如果访问标记中的任意sid已经在sysusers系统表登记,sql将允许用户访问数据库。因此,我们既可以通过用户的个人nt帐户sid授权用户访问数据库,也可以通过用户所在的一个(或者多个)组的sid授权。为了简化管理,我们可以创建一个名为db_name users的拥有数据库访问权限的全局组,同时不把访问权授予所有其他的组。这样,我们只需简单地在一个全局组中添加或者删除成员就可以增加或者减少数据库用户。

  五、分配权限

实施安全策略的最后一个步骤是创建用户定义的数据库角色,然后分配权限。完成这个步骤最简单的方法是创建一些名字与全局组名字配套的角色。例如对于前面例子中的会计系统,我们可以创建accounting data entry operators、accounting data entry managers之类的角色。由于会计数据库中的角色与帐务处理任务有关,你可能想要缩短这些角色的名字。然而,如果角色名字与全局组的名字配套,你可以减少混乱,能够更方便地判断出哪些组属于特定的角色。

创建好角色之后就可以分配权限。在这个过程中,我们只需用到标准的grant、revoke和deny命令。但应该注意deny权限,这个权限优先于所有其他权限。如果用户是任意具有deny权限的角色或者组的成员,sql server将拒绝用户访问对象。

接下来我们就可以加入所有sql server验证的登录。用户定义的数据库角色可以包含sql server登录以及nt全局组、本地组、个人帐户,这是它最宝贵的特点之一。用户定义的数据库角色可以作为各种登录的通用容器,我们使用用户定义角色而不是直接把权限分配给全局组的主要原因就在于此。

由于内建的角色一般适用于整个数据库而不是单独的对象,因此这里建议你只使用两个内建的数据库角色,即db_securityadmin和db_owner。其他内建数据库角色,例如db_datareader,它授予对数据库里面所有对象的select权限。虽然你可以用db_datareader角色授予select权限,然后有选择地对个别用户或组拒绝select权限,但使用这种方法时,你可能忘记为某些用户或者对象设置权限。一种更简单、更直接而且不容易出现错误的方法是为这些特殊的用户创建一个用户定义的角色,然后只把那些用户访问对象所需要的权限授予这个用户定义的角色。

  六、简化安全管理

sql server验证的登录不仅能够方便地实现,而且与nt验证的登录相比,它更容易编写到应用程序里。但是,如果用户的数量超过25,或者服务器数量在一个以上,或者每个用户都可以访问一个以上的数据库,或者数据库有多个管理员,sql server验证的登录不容易管理。由于sql server没有显示用户有效权限的工具,要记忆每个用户具有哪些权限以及他们为何要得到这些权限就更加困难。即使对于一个数据库管理员还要担负其他责任的小型系统,简化安全策略也有助于减轻问题的复杂程度。因此,首选的方法应该是使用nt验证的登录,然后通过一些精心选择的全局组和数据库角色管理数据库访问。

下面是一些简化安全策略的经验规则:

  ·用户通过sql server users组获得服务器访问,通过db_name users组获得数据库访问。

  ·用户通过加入全局组获得权限,而全局组通过加入角色获得权限,角色直接拥有数据库里的权限。

  ·需要多种权限的用户通过加入多个全局组的方式获得权限。

只要规划得恰当,你能够在域控制器上完成所有的访问和权限维护工作,使得服务器反映出你在域控制器上进行的各种设置调整。虽然实际应用中情况可能有所变化,但本文介绍的基本措施仍旧适用,它们能够帮助你构造出很容易管理的安全策略。

相关新闻
专家称甲骨文许多漏洞长期得不到修复2006/5/15
sql server数据库安全规划全攻略2006/5/9
用ids(入侵检测系统)保卫数据库安全2006/5/9
打响数据库保卫战 建一面“铜墙铁壁”2006/5/9
数据库系统防止黑客入侵之技术综述2006/5/9
 
    其它相关新闻
·用Regsvr32命令解决系统疑难杂症
·如何隐藏硬盘分区
·卡巴再次误报 将注册表判为木马
·英特尔酷睿2存在安全缺陷
·赛门铁克误杀受损用户理赔网站开通
·蹊跷的微软后门事件
·spoolsv.exe系统进程介绍
    最新新闻
·磁碟机病毒的十大罪行
·病毒预警:光华反病毒资讯(7月16日-7月22日)
·病毒预警:光华反病毒资讯(7月9日-7月15日)
·用Regsvr32命令解决系统疑难杂症
·Windows的DLL文件原理与修改方法
·如何隐藏硬盘分区
·攻防全面分析 常用九种攻击方法
·卡巴再次误报 将注册表判为木马
·英特尔酷睿2存在安全缺陷
    相关软件下载
·AVG(原Ewido)Anti-Spyware最新完整病毒库更新(2008.06.02)-Anti-Spyware升级包
·AVG(原Ewido)Anti-Spyware每日增量病毒库更新(2008.06.02)-Anti-Spyware升级包
·Kaspersky Anti-Virus7.0.0.125增量包(2008.05.31)-卡巴斯基升级包
·Kaspersky Internet Security7.0.0.125完整升级包(2008.06.01)-卡巴斯基升级包
·熊猫卫士06月01号最新病毒升级包通用版-熊猫卫士升级包
·Avast杀毒软件病毒库升级包(2008-06-01)for avast! 4.0 VPS更新-Avast升级包
·Avast杀毒软件病毒库升级包(2008-06-01)for avast! 4.x VPS更新-Avast升级包
·小红伞AntiVir最新病毒库(2008.06.01) for WindowsNT/2000/XP-小红伞升级包
·McAfee VirusScan DAT 5306病毒库-麦咖啡升级包
·更多相关杀毒软件
  [本站导航]  
瑞星  瑞星杀毒软件瑞星升级包 瑞星杀毒瑞星2007 瑞星在线杀毒瑞星杀毒软件下载瑞星升级
卡巴斯基  卡巴斯基下载卡巴斯基6.0卡巴斯基杀毒软件卡巴斯基7.0卡巴斯基病毒库卡巴斯基升级包
江民  江民杀毒软件江民杀毒江民2007江民杀毒软件下载江民升级包江民升级江民离线升级包
金山毒霸  金山毒霸2007下载金山毒霸下载金山毒霸2007升级包金山毒霸升级金山毒霸杀毒软件
诺顿  诺顿杀毒软件诺顿杀毒诺顿病毒库诺顿企业版诺顿升级包诺顿升级诺顿下载
小红伞AntiVir  德国小红伞小红伞下载小红伞中文小红伞杀毒软件小红伞汉化Avira AntiVir
麦咖啡McAfee  麦咖啡杀毒软件麦咖啡升级包麦咖啡8.0麦咖啡企业版麦咖啡8.5mcafee virusscan
NOD32  nod32升级nod32升级服务器nod32下载nod32 2.7nod32升级idnod32更新nod32升级包
F-Secure  F-secure杀毒软件f-secure anti-virusF-secure汉化版F-secure注册机F-secure2007
Dr.Web  dr.web keydr.web cureitdr.web注册码dr.web汉化dr.web病毒库大蜘蛛大蜘蛛杀毒软件
Avast  avast注册码 序列号avast antivirusavast杀毒软件avast中文版avast 升级avast升级包
木马专杀  木马杀客木马克星AVG Ewido Anti-SpywareAVG Ewido Anti-Spyware升级包 更新
防火墙  瑞星防火墙天网防火墙arp防火墙瑞星个人防火墙江民防火墙防火墙下载风云防火墙
流氓软件清理  瑞星卡卡360安全卫士Wopti流氓软件清除大师奇虎360安全卫士360安全卫士绿色版
推荐软件  Firefox火狐浏览器浏览器Picasa照片处理软件非主流图片制作软件非主流照片制作
关于本站 - 广告合作 - 联系我们 - 下载声明 - 网站地图 - RSS2.0 - 合作伙伴:爱客宝
Copyright©1998 - 2007 爱客者 All Rights Reserved

粤ICP备07006801号