许多Windows 2000和Windows NT的系统管理员都兼职着其他的工作...
数据库访问
SQL Server安全性的第二个层次是对数据库访问的控制。SQL Server可以在一个服务器上支持不止一个数据库,因此你可以使大多数用户拥有访问一个数据库的权限,而没有访问其他数据库的权限。除非你把这个登录作为一个数据库的用户,否则一个SQL Server登录没有访问这个数据库的权限。你可以在用户端或数据库端完成这个任务,通过“Login Properties”对话框可以使一个用户拥有对多个数据库的访问权限,此外,还可以在数据库系统上打开“New Database User”对话框,为某个数据库的所有用户添加登录。图4显示了如何利用“Login Properties”对话框的“Database Access”标签把一个用户添加到一个或多个数据库中。你可以指定一个与登录时不同的用户名,但我们不建议这样做,这样会给系统管理员带来不必要的麻烦。
在添加数据库用户登录时,你可以把这些登录放进数据库角色中,数据库角色是SQL Server 7.0中新引进的一个概念。与服务器角色一样,数据库角色与本地组有点类似,它也有一系列预定义的权限,你可以直接给用户指派权限,但在大多数情况下,只要通过简单地把用户放在正确的角色中就会给予它们所需要的权限。一个用户可以是多个角色中的成员,其权限等于多个角色权限的“和”,任何一个角色中的拒绝访问权限会覆盖这个用户所有的其他权限。与服务器角色相同的是,你不能修改预先定义的数据库角色,但可以合并现有的角色以使用户具有它们所需要的安全权限。你可以在任何时候修改角色的成员,但当把一个登录作为一个数据库用户时,无需指派它在所有角色中的登录。
公用数据库角色与NT中的“Everyone”相似。SQL Server把所有指派了数据库访问权限的登录放在公用角色中,你既不能从公用角色中移去用户,也不能删除用户。缺省情况下,公用角色对你所创建的任何数据库没有访问权限。
把需要从数据库中读取数据的用户放入db_datareader角色中,对数据库中的数据进行更新操作的用户必须被同时放入db_datareader和db_datawriter两个角色中。如果一个NT组需要对一个数据库进行访问而其中的一个用户却无须访问这个数据库,你就可以把这个组的SQL Server登录放入db_datareader和db_ datawriter角色中,而把这个用户的登录放入db_denydatareader和db_denydatawriter角色中。
使用db_datareader和db_datawriter角色会带来一些潜在的问题。一些数据库使用视图来强化安全性,视图是一种预定义的允许用户浏览的数据。例如,一个视图是一个表中的数据的子集,可以显示一些字段而隐藏另一些秘密的字段。在使用视图强化安全性时,你没有直接给予用户访问数据库的权限,而是给用户指派了访问特定的视图权限,你不能使用db_datareader和db_datawriter角色,因为这些角色会使用户拥有访问所有数据库、表的权限。
你可能希望委托一些数据库的管理权限。两个数据库角色可以交换这些角色中成员的有限的权限。db_accessadmin角色中的成员可以把一个现有的SQL Server登录添加为一个数据库用户,db_securityadmin角色中的成员可以向用户指派对表、视图等对象的权限。如果你希望一个人能完成两项任务,可以在两个角色中添加他的登录。
db_backupoperator角色的概念与NT Backup Operator类似,这个角色中的成员只能在进行备份操作时读取数据,而可能没有其他的访问权限。db_backupoperator角色可以对一个数据库进行备份但不能对它进行恢复,这个工作需要DBA或数据库所有者来完成。
如果你有一个测试或开发用数据库,或者你需要对一个数据库进行修改,开发人员的登录需要登录被放在db_ ddladmin角色中,这个角色中的成员可以创建、修改或删除数据库对象。无需过多地考虑db_owner角色,SQL Server中的每个对象都有一个所有者。一般情况下,谁创建了数据库,就是它的所有者。
SQL Server Enterprise Manager不能将每个数据库角色的权限显示出来。关于角色的详细说明,请参阅《SQL Server在线教程》(BOL),可以从SQL Server 7.0程序文件夹中或者Enterprise Manager中的“Help”选项中浏览BOL。预定义的角色功能非常多,但如果它们不能满足你的所有需求,你至少有二种方法来解决这个问题。一种是直接给用户指派权限,另一种是从Enterprise Manager中添加自己的角色,扩展数据库,右击“Roles”,选择“New Database Role”。在对话框中,输入一个新的角色名字,选择“Standard Role”,并为这个角色添加新的成员。在为这个角色指派权限前,需要退出对话框并创建这个角色,然后双击这个角色为它指派权限。当然,你也可以在以后的工作中改变角色的成员和指派给它的权限。