sql server角色成员身份权限

本文介绍了SQL Server中各种数据库角色的权限分配方式,包括固定数据库角色和自定义角色,以及如何通过角色管理数据库访问权限。

各个角色是对应不同权限的,sql server中有很多权限,可以把这些权限组合或单独赋给各个角色,从而使不同角色的用户的权限不同,你列出的都是内置角色。你看看下面这些对你有没有帮助,希望你解决你的问题。

为便于管理数据库中的权限,SQL Server 提供了若干“角色”,这些角色是用于分组其他主体的安全主体。它们类似于 Microsoft Windows 操作系统中的组。数据库级角色的权限作用域为数据库范围。

SQL Server 中有两种类型的数据库级角色:数据库中预定义的“固定数据库角色”和您可以创建的“灵活数据库角色”。

固定数据库角色是在数据库级别定义的,并且存在于每个数据库中。db_owner 和 db_securityadmin 数据库角色的成员可以管理固定数据库角色成员身份。但是,只有 db_owner 数据库角色的成员能够向 db_owner 固定数据库角色中添加成员。msdb 数据库中还有一些特殊用途的固定数据库角色。

您可以向数据库级角色中添加任何数据库帐户和其他 SQL Server 角色。固定数据库角色的每个成员都可向同一个角色添加其他登录名。

重要提示:

请不要将灵活数据库角色添加为固定角色的成员。这会导致意外的权限升级。

下表显示了固定数据库级角色及其能够执行的操作。所有数据库中都有这些角色。

数据库级别的角色名称及说明

db_owner 固定数据库角色的成员可以执行数据库的所有配置和维护活动,还可以删除数据库。

db_securityadmin 固定数据库角色的成员可以修改角色成员身份和管理权限。向此角色中添加主体可能会导致意外的权限升级。

db_accessadmin 固定数据库角色的成员可以为 Windows 登录名、Windows 组和 SQL Server 登录名添加或删除数据库访问权限。

db_backupoperator 固定数据库角色的成员可以备份数据库。

db_ddladmin 固定数据库角色的成员可以在数据库中运行任何数据定义语言 (DDL) 命令。

db_datawriter 固定数据库角色的成员可以在所有用户表中添加、删除或更改数据。

db_datareader 固定数据库角色的成员可以从所有用户表中读取所有数据。

db_denydatawriter 固定数据库角色的成员不能添加、修改或删除数据库内用户表中的任何数据。

db_denydatareader 固定数据库角色的成员不能读取数据库内用户表中的任何数据。

有关数据库级固定角色权限的特定信息,请参阅固定数据库角色的权限(数据库引擎)。

msdb 角色 msdb 数据库中包含下表显示的特殊用途的角色。

msdb 角色名称及说明

  • db_ssisadmin
  • db_ssisoperator
  • db_ssisltduser

这些数据库角色的成员可以管理和使用 SSIS。从早期版本升级的 SQL Server 实例可能包含使用 Data Transformation Services (DTS)(而不是 SSIS)命名的旧版本角色。有关详细信息,请参阅 使用 Integration Services 角色。

  • dc_admin
  • dc_operator
  • dc_proxy

这些数据库角色的成员可以管理和使用数据收集器。有关详细信息,请参阅数据收集器的安全性。

  • PolicyAdministratorRole

db_ PolicyAdministratorRole 数据库角色的成员可以对基于策略的管理策略和条件执行所有配置和维护活动。有关详细信息,请参阅使用基于策略的管理来管理服务器。

  • ServerGroupAdministratorRole
  • ServerGroupReaderRole

这些数据库角色的成员可以管理和使用注册的服务器组。有关详细信息,请参阅创建服务器组。

重要提示:

db_ssisadmin 角色和 dc_admin 角色的成员也许可以将其权限提升到 sysadmin。之所以会发生此权限提升,是因为这些角色可以修改 Integration Services 包,而 SQL Server 可以使用 SQL Server 代理的 sysadmin 安全上下文来执行 Integration Services 包。若要防止在运行维护计划、数据收集组和其他 Integration Services 包时出现此权限提升,请将运行包的 SQL Server 代理作业配置为使用拥有有限权限的代理帐户,或只将 sysadmin 成员添加到 db_ssisadmin 和 dc_admin 角色。

使用服务器级角色

下表说明了用于服务器级角色的命令、视图和函数。

功能 类型 说明

  • sp_helpdbfixedrole (Transact-SQL)   →  元数据   →  返回固定数据库角色的列表。
  • sp_dbfixedrolepermission (Transact-SQL)   →  元数据   →  显示固定数据库角色的权限。
  • sp_helprole (Transact-SQL)   →  元数据   →  返回当前数据库中有关角色的信息。
  • sp_helprolemember (Transact-SQL)   →  元数据   →  返回有关当前数据库中某个角色的成员的信息。
  • sys.database_role_members (Transact-SQL)   →  元数据   →  为每个数据库角色的每个成员返回一行。
  • IS_MEMBER (Transact-SQL)   →  元数据   →  指示当前用户是否为指定 Microsoft Windows 组或 Microsoft SQL Server 数据库角色的成员。
  • CREATE ROLE (Transact-SQL)   →  命令   →  在当前数据库中创建新的数据库角色。
  • ALTER ROLE (Transact-SQL)   →  命令   →  更改数据库角色的名称。
  • DROP ROLE (Transact-SQL)    →  命令从数据库中删除角色。
  • sp_addrole (Transact-SQL)   →  命令   →  在当前数据库中创建新的数据库角色。
  • sp_droprole (Transact-SQL)   →  命令   →  从当前数据库中删除数据库角色。
  • sp_addrolemember (Transact-SQL)   →  命令   →  为当前数据库中的数据库角色添加数据库用户、数据库角色、Windows 登录名或 Windows 组。
  • sp_droprolemember (Transact-SQL)   →  命令   →  从当前数据库的 SQL Server 角色中删除安全帐户。

public 数据库角色

每个数据库用户都属于 public 数据库角色。如果未向某个用户授予或拒绝对安全对象的特定权限时,该用户将继承授予该对象的 public 角色的权限。

SQL Server 2019 中,添加用户到数据库角色成员身份时遇到失败的问题可能由多种原因引起,包括权限不足、对象不存在、角色或用户名称拼写错误、以及数据库上下文不正确等。以下是解决此类问题的详细方法: ### 检查当前数据库上下文 确保在执行 `sp_addrolemember` 存储过程之前已经切换到了目标数据库上下文。使用 `USE [database_name];` 命令指定当前操作的数据库[^2]。 ```sql USE [YourDatabaseName]; GO ``` ### 验证角色和用户的合法性 确认要添加的角色(如 `db_executor`)和用户(如 `user1`)确实存在于数据库中。可以查询系统视图 `sys.database_principals` 来验证角色和用户是否存在[^3]。 ```sql SELECT name, type_desc FROM sys.database_principals WHERE name IN ('db_executor', 'user1'); ``` ### 使用正确的语法添加角色成员 确保使用正确的语法来添加角色成员。推荐使用 `ALTER ROLE ... ADD MEMBER` 语句替代过时的 `sp_addrolemember` 系统存储过程,因为后者将在未来的 SQL Server 版本中被移除[^2]。 ```sql ALTER ROLE [db_executor] ADD MEMBER [user1]; GO ``` 如果仍然需要使用 `sp_addrolemember`,则应按照以下格式执行: ```sql EXEC sp_addrolemember @rolename = N'db_executor', @membername = N'user1'; GO ``` ### 检查并授予必要的权限 确保执行添加操作的登录账户具有足够的权限来修改角色成员。通常情况下,这要求该账户至少是目标数据库中的 `db_owner` 角色成员,或者具有 `ALTER ANY ROLE` 权限[^3]。 ```sql -- 授予 ALTER ANY ROLE 权限给特定用户 GRANT ALTER ANY ROLE TO [your_login]; GO ``` ### 查看错误日志以获取更多信息 当添加角色成员失败时,SQL Server 会返回一个错误消息。查看完整的错误信息可以帮助定位具体的问题所在。例如,错误代码 15401 表示无法找到指定的用户或角色,而错误代码 15151 则意味着对某个对象的权限不足。 ### 示例:创建自定义角色并添加成员 以下是一个完整的示例,展示了如何创建自定义角色并将用户添加为该角色成员: ```sql -- 创建自定义角色 CREATE ROLE [CustomRole]; -- 授予执行权限 GRANT EXECUTE TO [CustomRole]; -- 将用户加入角色 ALTER ROLE [CustomRole] ADD MEMBER [ExistingUser]; -- 验证用户是否已成功添加到角色 SELECT dp.name AS principal_name, r.name AS role_name FROM sys.database_role_members rm JOIN sys.database_principals dp ON rm.member_principal_id = dp.principal_id JOIN sys.database_principals r ON rm.role_principal_id = r.principal_id WHERE dp.name = 'ExistingUser'; GO ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值