控制数据访问权限最简单的方法是,对于每一组用户,分别地为他创建一个满足该组用户权限需要的、域内全局有效的组。我们既能够为每一个应用分别创建组,也能够创建适用于整个企业的、涵盖广泛用户类别的组。然而,假如您想要能够精确地了解组成员能够做些什么,为每一个应用程式分别创建组是一种较好的选择。例如,在前面的会计系统中,我们应该创建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之类的角色。由于会计数据库中的角色和帐务处理任务有关,您可能想要缩短这些角色的名字。然而,假如角色名字和全局组的名字配套,您能够减少混乱,能够更方便地判断出哪些组属于特定的角色。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



