6.5 数据库角色
6.5.1 数据库角色
为了便于管理数据库中的权限,可以在数据库范围内设置数据库角色。
6.5.2 固定数据库角色
SQL Server 预定义了以下数据库角色。
数据库角色 |
说明 |
db_accessadmin |
成员可以为 Windows 登录名、Windows 组和 SQL Server 登录名添加或删除数据库访问权限。 |
db_backupoperator | 成员可以备份数据库。 |
db_datareader | 成员可以从所有用户表中读取所有数据。 |
db_datawriter | 成员可以在所有用户表中添加、删除或更改数据。 |
db_ddladmin | 成员可以在数据库中运行任何数据定义语言 (DDL) 命令。 |
db_denydatareader | 成员不能读取数据库内用户表中的任何数据。 |
db_denydatawriter | 成员不能添加、修改或删除数据库内用户表中的任何数据。 |
db_owner | 成员可以执行数据库的所有配置和维护活动,还可以删除数据库。 |
db_securityadmin | 成员可以修改角色成员身份和管理权限。向此角色中添加主体可能会导致意外的权限升级。 |
public | 每个数据库用户都属于public 数据库角色。如果未向某个用户授予或拒绝对安全对象的特定权限时,该用户将继承授予该对象的public 角色的权限。 |
6.5.3 用户定义的数据库角色
在 SQL Server 中还可以创建灵活的数据库角色。
数据库角色的名称可以包含 1 到 128 个字符,包括字母、符号和数字。数据库角色的名称不能包含反斜杠(“\”)、不能为 NULL 或空字符串。
可以同时为新角色指定一个“所有者”。如果未指定所有者,则执行当前操作的数据库用户(例如:dbo)将拥有该角色。
T-SQL 语法示例如下:
CREATE ROLE [DbRole1] CREATE ROLE [DbRole2] AUTHORIZATION [dbo] |
要求对数据库具有 CREATE ROLE 权限或者在 db_securityadmin 固定数据库角色中具有成员身份。使用 AUTHORIZATION 选项时,还需要具有下列权限:
若要将角色的所有权分配给另一个用户,则需要对该用户具有 IMPERSONATE 权限。
若要将角色的所有权分配给另一个角色,则需要具有被分配角色的成员身份或对该角色具有 ALTER 权限。
若要将角色的所有权分配给应用程序角色,则需要对该应用程序角色具有 ALTER 权限。
最佳实践:
不要将用户定义的数据库角色添加为固定角色的成员。这可能会导致意外的权限升级。
6.5.4 为数据库角色添加成员
可以将用户或数据为角色添加到角色的成员列表中。
不能将角色添加为该角色自身的成员,否则将报“不能使角色成为其自身的成员”错误。
T-SQL 语法示例如下:
ALTER ROLE [DbRole1] ADD MEMBER [sqluser002] |
提示:
不推荐使用 sp_addrole、 sp_addrolemember 等存储过程。
时间: 2024-08-06 07:58:50