1
数据库原理与应用技术
1.11.2.3 10.2.3 管理数据库的用户
10.2.3 管理数据库的用户

如果一个用户登录到SQL Server服务器后,还不能对数据库进行操作,这是因为系统管理员还没有为他在数据库中建立一个用户名。SQL Server用户分为两级:登录账号和用户账号。其中用户账号是由SQL Server管理的,用户必须通过登录账号建立自己的连接(身份验证),以便获得对SQL Server实例的访问权限。如同先刷卡再进入公司(登录服务器),然后再拿钥匙打开自己的办公室(进入数据库)一样。

每台服务器都有一套服务器登录账号列表,每个数据库中都有一套相互独立的数据库用户列表。因此,每个数据库用户与服务器登录账号之间存在着一种映射关系,系统管理员可以将一个服务器登录账号映射到用户需要访问的每个数据库中的一个用户账号或角色上。一个登录账号在不同的数据库中可以映射成不同的用户,从而可以具有不同的权限。这种映射关系为同一服务器上不同数据库的权限管理提供了灵活性。

图10-5 选择要添加的成员

管理数据库用户的过程实际上就是管理这种映射关系的过程。

每个数据库都有两个默认的用户:dbo和guest。dbo(DataBase Owner)代表数据库的拥有者,sysadmin服务器角色的成员会自动映射成dbo。任何一个登录账号都可以通过guest用户账号来存取相应的数据库。但是,当新建一个数据库时,默认只有dbo用户账号而没有guest用户账号。每个登录账号在一个数据库中只能有一个用户账号,但是每个登录账号可以在不同的数据库中各有一个用户账号。如果在新建登录账号过程中要指定某个数据库有存取权限,则应在该数据库中自动创建一个与登录账号同名的用户账号。

当数据库存在guest用户时,所有通过自己账号访问数据库的用户都可作为guest用户访问。guest用户可以像其他用户一样设置权限,也可以增加或删除,但在 master 和tempdb中不能删除guest。因为master数据库中记录了所有的系统信息,每个登录的用户若没有特别指定数据库,默认都使用master数据库。tempdb数据库是临时使用的数据库,所有与服务器连接的数据都会存储在该处,因此也必须提供guest用户账号。用户自建的数据库默认状态下没有guest用户,可以手工创建。但是guest用户如果使用不当,则有可能成为安全隐患。

需要注意的是,登录账号具有对某个数据库的访问权限,并不表示该登录账号对数据库具有存取的权限。如果要对数据库的对象进行插入、更新等操作,还需要设置用户账号的权限。

要查看数据库用户,可以在企业管理器中单击数据库节点,展开“安全性”,即可看到用户。展开用户即可看到该数据库拥有的用户。

1. 添加数据库用户

可以使用企业管理器添加数据库用户,如在students数据库中添加数据库用户,只要在“students”数据库的“用户”节点上单击鼠标右键,在弹出的快捷菜单中选择“新建用户”,然后在如图10-6所示的对话框中输入用户名,映射登录账号,选择相应内容即可。

图10-6 新建数据库用户

创建数据库用户账号后还可对其拥有的架构进行修改。在对象资源管理器中的用户账号上右击,然后选择“属性”,打开“数据库用户”对话框进行修改。

通过T-SQL语句添加数据库用户,需要使用系统存储过程sp_grantdbaccess。

2. 修改数据库用户

为了管理数据库用户的权限,与服务器一样,数据库中也设计了角色的概念。与服务器角色不同的是,在数据库中,除了有固定角色外,还可以有自定义角色。

固定数据库角色是在每个数据库中都存在的预定义组。系统管理员可以将一个用户加入到一个或多个数据库角色中。固定角色有权执行一些特殊的数据库级管理活动。固定角色不能被添加、修改或删除。表10-2说明了固定数据库角色及其能够执行的操作,所有数据库中都有这些角色。

表10-2 固定数据库角色说明

实际上,系统中除有固定数据库角色外,还有用户自定义数据库角色。若已经创建了数据库students,再创建数据库角色如R1,则只要在该数据库下的“角色”节点中单击鼠标右键,选择“新建数据库角色”,在弹出的对话框中填入角色名称R1,再选择此角色拥有的架构及添加角色成员即可,如图10-7所示。

如果使用T-SQL语句添加角色成员,则可以使用系统存储过程sp_addrolemember。

3. 删除用户自定义角色

在企业管理器中,用鼠标右键选择角色,从弹出的快捷菜单中选择“删除”,确认后就可以删除这个角色。但只能删除用户自定义的角色,不能删除系统的固定角色。

如果使用T-SQL语句删除角色,则可以使用系统存储过程sp_droprolemember。

图10-7 添加数据库角色