权限(数据库引擎)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse Analytics分析平台系统(PDW)Microsoft Fabric 中的 SQL 分析终结点Microsoft Fabric 中的仓库Microsoft Fabric 中的 SQL 数据库

每个 SQL Server 安全对象都有关联的权限,可以将这些权限授予主体。 数据库引擎中的权限在分配给登录名和服务器角色的服务器级别上,以及分配给数据库用户和数据库角色的数据库级别上进行管理。 Azure SQL 数据库的模型拥有与数据库权限相同的系统,但服务器级别权限不可用。 本文包含权限的完整列表。 有关权限的典型实现,请参阅 数据库引擎权限入门

SQL Server 2022 (16.x) 的权限总数为 292。 Azure SQL 数据库公开了 292 个权限。 大多数权限适用于所有平台,但有些不适用。 例如,大多数服务器级别权限无法对 SQL 数据库授予,一些权限仅在 Azure SQL 数据库上有意义。 新权限将随着新版本逐步引入。 SQL Server 2019 (15.x) 公开了 248 个权限。SQL Server 2017 (14.x) 公开了 238 个权限。 SQL Server 2016 (13.x) 公开了 230 个权限。 SQL Server 2014 (12.x) 公开了 219 个权限。 SQL Server 2012 (11.x) 公开了 214 个权限。 SQL Server 2008 R2 (10.50.x) 公开了 195 个权限。 文章 sys.fn_builtin_permissions 指明了哪些权限是近期版本中的新权限。

在 Microsoft Fabric 中的 SQL 数据库中,仅支持数据库级用户和角色。 服务器级登录名、角色和 sa 帐户不可用。 在 Microsoft Fabric 中的 SQL 数据库中,Microsoft数据库用户的 Entra ID 是唯一支持的身份验证方法。 有关详细信息,请参阅 Microsoft Fabric 中 SQL 数据库的授权

了解所需权限后,你可以通过 GRANTREVOKEDENY 语句将服务器级别权限应用于登录名或服务器角色,将数据库级别权限应用于用户或数据库角色。 例如:

GRANT SELECT ON SCHEMA::HumanResources TO role_HumanResourcesDept;
REVOKE SELECT ON SCHEMA::HumanResources TO role_HumanResourcesDept;

有关规划权限系统的提示,请参阅 数据库引擎权限入门

权限命名约定

以下介绍了权限命名所遵循的一般约定:

  • CONTROL

    授予受赠者类似所有权的能力。 受赠者实际上拥有该安全对象的所有已定义权限。 被授予 CONTROL 权限的主体也可以授予该安全对象的权限。 因为 SQL Server 安全模型是分层的,所以 CONTROL 权限在特定范围内隐含着对该范围内的所有安全对象的 CONTROL 权限。 例如,数据库上的 CONTROL 权限意味着拥有该数据库的所有权限、该数据库中所有程序集的所有权限、该数据库中所有架构的所有权限,以及该数据库中所有架构内的对象的所有权限。

  • ALTER

    授予更改特定安全对象的属性(所有权除外)的能力。 当在某个范围内授予 ALTER 权限时,还会授予更改、创建或删除该范围内包含的任何安全对象的能力。 例如,架构上的 ALTER 权限包括从该架构创建、更改和删除对象的能力。

  • ALTER ANY <Server Securable>,其中 Server Securable 可以是任何服务器安全对象。

    授予创建、更改或删除 Server Securable 的各个实例的能力。 例如,ALTER ANY LOGIN 授予创建、更改或删除实例中的任何登录名的能力。

  • ALTER ANY <Database Securable>,其中 Database Securable 可以是数据库级别的任何安全对象。

    授予创建、更改或删除 Database Securable 的各个实例的能力。 例如,ALTER ANY SCHEMA 授予创建、更改或删除数据库中的任何架构的能力。

  • 接管所有权

    使受赠者能够获得其所授予的安全对象的所有权。

  • IMPERSONATE <登录>

    使受赠者能够模拟该登录名。

  • IMPERSONATE <用户>

    使受赠者能够模拟该用户。

  • CREATE <Server 可保护对象>

    授予受赠者创建 Server Securable 的能力。

  • CREATE <数据库安全对象>

    授予受赠者创建 Database Securable 的能力。

  • CREATE <架构内包含的可保护对象>

    授予创建包含在架构中的安全对象的能力。 但是,要在特定架构中创建该安全对象,需要该架构的 ALTER 权限。

  • 视图定义

    使受赠者能够访问元数据。

  • REFERENCES

    创建引用某个表的 FOREIGN KEY 约束需要该表的 REFERENCES 权限。

    要创建带有引用某个对象的 WITH SCHEMABINDING 子句的 FUNCTION 或 VIEW,需要该对象的 REFERENCES 权限。

SQL Server 权限图表

下图显示了权限以及它们彼此之间的关系。 一些较高级别的权限(如 CONTROL SERVER)被多次列出。 在本文中,图表太小,无法阅读。 你可以下载 PDF 格式的完整数据库引擎权限文章

来自数据库引擎权限 PDF 的屏幕截图。

适用于特定安全对象的权限

下表列出了主要的权限类以及可能应用这些权限的安全对象的类型。

Permission 适用于
ALTER 除 TYPE 外的所有对象类。
CONTROL 所有对象类:

AGGREGATE,
应用程序角色
ASSEMBLY,
非对称密钥,
可用性组,
CERTIFICATE,
CONTRACT,
CREDENTIALS,
DATABASE,
DATABASE SCOPED CREDENTIAL、
DEFAULT,
ENDPOINT,
FULLTEXT CATALOG,
FULLTEXT STOPLIST,
FUNCTION,
LOGIN,
消息类型,
PROCEDURE,
QUEUE,
REMOTE SERVICE BINDING、
ROLE,
ROUTE,
RULE,
SCHEMA,
SEARCH PROPERTY LIST、
SERVER,
服务器角色,
SERVICE,
对称密钥,
SYNONYM,
TABLE,
TYPE,
USER,
VIEW 和
XML 架构集合
DELETE 除 DATABASE SCOPED CONFIGURATION、SERVER 和 TYPE 外的所有对象类。
EXECUTE CLR 类型、外部脚本、过程(Transact-SQL 和 CLR)、标量和聚合函数(Transact-SQL 和 CLR)以及同义词
IMPERSONATE 登录名和用户
INSERT 同义词、表和列、视图和列。 可以在数据库、架构或对象级别授予权限。
RECEIVE Service Broker 队列
REFERENCES AGGREGATE,
ASSEMBLY,
非对称密钥,
CERTIFICATE,
CONTRACT,
凭据(适用于 SQL Server 2022 (16.x)及更高版本),
DATABASE,
DATABASE SCOPED CREDENTIAL、
全文目录
FULLTEXT STOPLIST,
FUNCTION,
消息类型,
PROCEDURE,
QUEUE,
RULE,
SCHEMA,
SEARCH PROPERTY LIST、
SEQUENCE 对象,
对称密钥,
TABLE,
TYPE,
VIEW 和
XML 架构集合
SELECT 同义词、表和列、视图和列。 可以在数据库、架构或对象级别授予权限。
接管所有权 除 DATABASE SCOPED CONFIGURATION、LOGIN、SERVER 和 USER 外的所有对象类。
UPDATE 同义词、表和列、视图和列。 可以在数据库、架构或对象级别授予权限。
查看更改跟踪 架构和表
视图定义 除 DATABASE SCOPED CONFIGURATION 和 SERVER 外的所有对象类。

Caution

安装期间授予系统对象的默认权限已针对可能的威胁进行了仔细评估,并且作为强化 SQL Server 安装的一部分,无需进行更改。 对系统对象权限的任何更改都可能限制或破坏功能,并且可能让你的 SQL Server 安装处于不受支持的状态。

SQL Server 权限

下表提供了 SQL Server 权限的完整列表。 Azure SQL 数据库权限仅适用于受支持的基本安全对象。 不能在 Azure SQL 数据库中授予服务器级别权限,但在某些情况下,可以授予数据库权限。

基本安全对象 基本安全对象的粒度权限 权限类型代码 包含基本安全对象的安全对象 容器安全对象上的隐含基本安全对象粒度权限的权限
应用程序角色 ALTER AL DATABASE 修改任意应用角色
应用程序角色 CONTROL CL DATABASE CONTROL
应用程序角色 视图定义 VW DATABASE 视图定义
ASSEMBLY ALTER AL DATABASE 更改任何程序集
ASSEMBLY CONTROL CL DATABASE CONTROL
ASSEMBLY REFERENCES RF DATABASE REFERENCES
ASSEMBLY 接管所有权 TO DATABASE CONTROL
ASSEMBLY 视图定义 VW DATABASE 视图定义
非对称密钥 ALTER AL DATABASE 更改任何非对称密钥
非对称密钥 CONTROL CL DATABASE CONTROL
非对称密钥 REFERENCES RF DATABASE REFERENCES
非对称密钥 接管所有权 TO DATABASE CONTROL
非对称密钥 视图定义 VW DATABASE 视图定义
可用性组 ALTER AL SERVER 修改任何可用性组
可用性组 CONTROL CL SERVER 控制服务器
可用性组 接管所有权 TO SERVER 控制服务器
可用性组 视图定义 VW SERVER 查看任何定义
CERTIFICATE ALTER AL DATABASE 修改任何证书
CERTIFICATE CONTROL CL DATABASE CONTROL
CERTIFICATE REFERENCES RF DATABASE REFERENCES
CERTIFICATE 接管所有权 TO DATABASE CONTROL
CERTIFICATE 视图定义 VW DATABASE 视图定义
CONTRACT ALTER AL DATABASE 更改任何合同
CONTRACT CONTROL CL DATABASE CONTROL
CONTRACT REFERENCES RF DATABASE REFERENCES
CONTRACT 接管所有权 TO DATABASE CONTROL
CONTRACT 视图定义 VW DATABASE 视图定义
CREDENTIAL CONTROL CL SERVER 控制服务器
CREDENTIAL REFERENCES RF SERVER 更改任何凭据
DATABASE 管理数据库批量操作 DABO SERVER 控制服务器
DATABASE ALTER AL SERVER 更改任何数据库
DATABASE 修改任意应用角色 ALAR SERVER 控制服务器
DATABASE 更改任何程序集 ALAS SERVER 控制服务器
DATABASE 更改任何非对称密钥 ALAK SERVER 控制服务器
DATABASE 修改任何证书 ALCF SERVER 控制服务器
DATABASE 更改任何列加密密钥 ALCK

适用范围:SQL Server(SQL Server 2016 (13.x) 到当前版本)、Azure SQL 数据库。
SERVER 控制服务器
DATABASE 更改任何列主密钥 ALCM

适用范围:SQL Server(SQL Server 2016 (13.x) 到当前版本)、Azure SQL 数据库。
SERVER 控制服务器
DATABASE 更改任何合同 ALSC SERVER 控制服务器
DATABASE 修改任何数据库审核 ALDA SERVER 修改任何服务器审计
DATABASE ALTER ANY DATABASE DDL TRIGGER ALTG SERVER 控制服务器
DATABASE 更改任何数据库事件通知 ALED SERVER 修改任何事件通知
DATABASE 更改任意数据库事件会话 AADS SERVER 更改任何事件会话
DATABASE 更改任何数据库事件会话添加事件 LDAE SERVER 更改任何事件会话以添加事件
DATABASE 更改任何数据库事件会话添加目标 LDAT SERVER 修改任何事件会话并添加目标
DATABASE ALTER ANY DATABASE EVENT SESSION DISABLE DDES SERVER 更改任何事件会话禁用
DATABASE ALTER ANY DATABASE EVENT SESSION DROP EVENT (SQL命令: 修改任何数据库事件会话删除事件) LDDE SERVER ALTER ANY EVENT SESSION(修改任何事件会话) DROP EVENT(删除事件)
DATABASE 修改任何数据库事件会话删除目标 LDDT SERVER 更改任意事件会话删除目标
DATABASE 启用 ALTER ANY DATABASE 事件会话功能 EDES SERVER 更改任何事件会话启用
DATABASE 更改任何数据库事件会话选项 LDSO SERVER 更改任何事件会话选项
DATABASE 更改任何数据库作用域配置 ALDC

适用范围:SQL Server(SQL Server 2016 (13.x) 到当前版本)、Azure SQL 数据库。
SERVER 控制服务器
DATABASE 更改任何数据空间 ALDS SERVER 控制服务器
DATABASE 修改任何外部数据源 AEDS SERVER 控制服务器
DATABASE 更改任何外部文件格式 AEFF SERVER 控制服务器
DATABASE 任何外部作业的ALTER操作 AESJ SERVER 控制服务器
DATABASE 更改任何外部语言 ALLA SERVER 控制服务器
DATABASE 更改任何外部库 ALEL SERVER 控制服务器
DATABASE 修改任何外部流 AEST SERVER 控制服务器
DATABASE 更改任何全文目录 ALFT SERVER 控制服务器
DATABASE 更改任意掩码 AAMK

适用范围:SQL Server(SQL Server 2016 (13.x) 到当前版本)、Azure SQL 数据库。
SERVER 控制服务器
DATABASE 更改任何消息类型 ALMT SERVER 控制服务器
DATABASE 更改任意远程服务绑定 ALSB SERVER 控制服务器
DATABASE 修改任意角色 ALRL SERVER 控制服务器
DATABASE 修改任何路由 ALRT SERVER 控制服务器
DATABASE 更改任何架构 ALSM SERVER 控制服务器
DATABASE 更改任何安全策略 ALSP

适用范围:SQL Server(SQL Server 2016 (13.x) 到当前版本)、Azure SQL 数据库。
SERVER 控制服务器
DATABASE 更改任何敏感度分类 AASC
适用范围:SQL Server(SQL Server 2019 (15.x) 到当前版本)、Azure SQL 数据库。
SERVER 控制服务器
DATABASE 更改任何服务 ALSV SERVER 控制服务器
DATABASE 更改任意对称密钥 ALSK SERVER 控制服务器
DATABASE 更改任何用户 ALUS SERVER 控制服务器
DATABASE ALTER LEDGER ALR SERVER CONTROL
DATABASE 更改分类帐配置 ALC SERVER 控制服务器
DATABASE AUTHENTICATE AUTH SERVER 身份验证服务器
DATABASE 备份数据库 BADB SERVER 控制服务器
DATABASE 备份日志 (BACKUP LOG) BALO SERVER 控制服务器
DATABASE CHECKPOINT CP SERVER 控制服务器
DATABASE CONNECT CO SERVER 控制服务器
DATABASE 连接复制 CORP SERVER 控制服务器
DATABASE CONTROL CL SERVER 控制服务器
DATABASE 创建聚合 CRAG SERVER 控制服务器
DATABASE 创建任何数据库事件会话 CRDS SERVER 创建任意事件会话
DATABASE CREATE ASSEMBLY (创建程序集) CRAS SERVER 控制服务器
DATABASE 创建非对称密钥 CRAK SERVER 控制服务器
DATABASE 创建证书 CRCF SERVER 控制服务器
DATABASE 创建合同 CRSC SERVER 控制服务器
DATABASE 创建数据库 CRDB SERVER 创建任意数据库
DATABASE 创建数据库 DDL 事件通知 CRED SERVER 创建 DDL 事件通知
DATABASE 创建默认值 CRDF SERVER 控制服务器
DATABASE 创建外部语言 CRLA SERVER 控制服务器
DATABASE 创建外部库 CREL SERVER 控制服务器
DATABASE 创建全文目录 CRFT SERVER 控制服务器
DATABASE 创建函数 CRFN SERVER 控制服务器
DATABASE 创建消息类型 CRMT SERVER 控制服务器
DATABASE CREATE PROCEDURE CRPR SERVER 控制服务器
DATABASE 创建队列 CRQU SERVER 控制服务器
DATABASE 创建远程服务绑定 CRSB SERVER 控制服务器
DATABASE 创建角色 CRRL SERVER 控制服务器
DATABASE CREATE ROUTE CRRT SERVER 控制服务器
DATABASE 创建规则 CRRU SERVER 控制服务器
DATABASE 创建架构 CRSM SERVER 控制服务器
DATABASE 创建服务 CRSV SERVER 控制服务器
DATABASE 创建对称密钥 CRSK SERVER 控制服务器
DATABASE CREATE SYNONYM CRSN SERVER 控制服务器
DATABASE CREATE TABLE CRTB SERVER 控制服务器
DATABASE 创建类型 CRTY SERVER 控制服务器
DATABASE 创建用户 CUSR SERVER 控制服务器
DATABASE 创建视图 CRVW SERVER 控制服务器
DATABASE 创建 XML 架构集合 CRXS SERVER 控制服务器
DATABASE DELETE DL SERVER 控制服务器
DATABASE 删除任意数据库事件会话 DRDS SERVER 删除任意事件会话
DATABASE 启用账本 EL SERVER CONTROL
DATABASE EXECUTE EX SERVER 控制服务器
DATABASE 执行任何外部终结点 EAEE SERVER 控制服务器
DATABASE 执行任何外部脚本 EAES

适用范围:SQL Server(SQL Server 2016 (13.x) 到当前版本)。
SERVER 控制服务器
DATABASE INSERT IN SERVER 控制服务器
DATABASE 终止数据库连接 KIDC

适用范围:Azure SQL 数据库。 在 SQL Server 中使用 ALTER ANY CONNECTION。
SERVER 更改任何连接
DATABASE REFERENCES RF SERVER 控制服务器
DATABASE SELECT SL SERVER 控制服务器
DATABASE SHOWPLAN SPLN SERVER ALTER TRACE
DATABASE 订阅查询通知 SUQN SERVER 控制服务器
DATABASE 接管所有权 TO SERVER 控制服务器
DATABASE UNMASK UMSK

适用范围:SQL Server(SQL Server 2016 (13.x) 到当前版本)、Azure SQL 数据库。
SERVER 控制服务器
DATABASE UPDATE UP SERVER 控制服务器
DATABASE 查看任何列加密密钥定义 VWCK

适用范围:SQL Server(SQL Server 2016 (13.x) 到当前版本)、Azure SQL 数据库。
SERVER 查看服务器状态
DATABASE 查看任何列主密钥定义 VWCM

适用范围:SQL Server(SQL Server 2016 (13.x) 到当前版本)、Azure SQL 数据库。
SERVER 查看服务器状态
DATABASE 查看任何敏感度分类 VASC SERVER 控制服务器
DATABASE 查看加密安全的定义 VCD SERVER 查看任何加密保护的定义
DATABASE 查看数据库性能状态 VDP SERVER 查看服务器性能状态
DATABASE 查看数据库安全审核 VDSA SERVER 控制服务器
DATABASE 查看数据库安全状态 VDS SERVER 查看服务器安全状态
DATABASE 查看数据库状态 VWDS SERVER 查看服务器状态
DATABASE 视图定义 VW SERVER 查看任何定义
DATABASE 查看账本内容 VLC SERVER CONTROL
DATABASE 查看安全定义 VWS SERVER 查看任何安全定义
DATABASE 查看性能定义 VWP SERVER 查看任何性能定义
数据库作用域凭据 ALTER AL DATABASE CONTROL
数据库作用域凭据 CONTROL CL DATABASE CONTROL
数据库作用域凭据 REFERENCES RF DATABASE REFERENCES
数据库作用域凭据 接管所有权 TO DATABASE CONTROL
数据库作用域凭据 视图定义 VW DATABASE 视图定义
ENDPOINT ALTER AL SERVER 修改任何终结点
ENDPOINT CONNECT CO SERVER 控制服务器
ENDPOINT CONTROL CL SERVER 控制服务器
ENDPOINT 接管所有权 TO SERVER 控制服务器
ENDPOINT 视图定义 VW SERVER 查看任何定义
FULLTEXT 目录 ALTER AL DATABASE 更改任何全文目录
FULLTEXT 目录 CONTROL CL DATABASE CONTROL
FULLTEXT 目录 REFERENCES RF DATABASE REFERENCES
FULLTEXT 目录 接管所有权 TO DATABASE CONTROL
FULLTEXT 目录 视图定义 VW DATABASE 视图定义
全文停止词列表 ALTER AL DATABASE 更改任何全文目录
全文停止词列表 CONTROL CL DATABASE CONTROL
全文停止词列表 REFERENCES RF DATABASE REFERENCES
全文停止词列表 接管所有权 TO DATABASE CONTROL
全文停止词列表 视图定义 VW DATABASE 视图定义
LOGIN ALTER AL SERVER 修改任意登录
LOGIN CONTROL CL SERVER 控制服务器
LOGIN IMPERSONATE IM SERVER 控制服务器
LOGIN 视图定义 VW SERVER 查看任何定义
消息类型 ALTER AL DATABASE 更改任何消息类型
消息类型 CONTROL CL DATABASE CONTROL
消息类型 REFERENCES RF DATABASE REFERENCES
消息类型 接管所有权 TO DATABASE CONTROL
消息类型 视图定义 VW DATABASE 视图定义
OBJECT ALTER AL SCHEMA ALTER
OBJECT CONTROL CL SCHEMA CONTROL
OBJECT DELETE DL SCHEMA DELETE
OBJECT EXECUTE EX SCHEMA EXECUTE
OBJECT INSERT IN SCHEMA INSERT
OBJECT RECEIVE RC SCHEMA CONTROL
OBJECT REFERENCES RF SCHEMA REFERENCES
OBJECT SELECT SL SCHEMA SELECT
OBJECT 接管所有权 TO SCHEMA CONTROL
OBJECT UNMASK UMSK SCHEMA UNMASK
OBJECT UPDATE UP SCHEMA UPDATE
OBJECT 查看更改跟踪 VWCT SCHEMA 查看更改跟踪
OBJECT 视图定义 VW SCHEMA 视图定义
远程服务绑定 ALTER AL DATABASE 更改任意远程服务绑定
远程服务绑定 CONTROL CL DATABASE CONTROL
远程服务绑定 接管所有权 TO DATABASE CONTROL
远程服务绑定 视图定义 VW DATABASE 视图定义
ROLE ALTER AL DATABASE 修改任意角色
ROLE CONTROL CL DATABASE CONTROL
ROLE 接管所有权 TO DATABASE CONTROL
ROLE 视图定义 VW DATABASE 视图定义
ROUTE ALTER AL DATABASE 修改任何路由
ROUTE CONTROL CL DATABASE CONTROL
ROUTE 接管所有权 TO DATABASE CONTROL
ROUTE 视图定义 VW DATABASE 视图定义
SCHEMA ALTER AL DATABASE 更改任何架构
SCHEMA CONTROL CL DATABASE CONTROL
SCHEMA 创建序列 CRSO DATABASE CONTROL
SCHEMA DELETE DL DATABASE DELETE
SCHEMA EXECUTE EX DATABASE EXECUTE
SCHEMA INSERT IN DATABASE INSERT
SCHEMA REFERENCES RF DATABASE REFERENCES
SCHEMA SELECT SL DATABASE SELECT
SCHEMA 接管所有权 TO DATABASE CONTROL
SCHEMA UNMASK UMSK DATABASE UNMASK
SCHEMA UPDATE UP DATABASE UPDATE
SCHEMA 查看更改跟踪 VWCT DATABASE 查看更改跟踪
SCHEMA 视图定义 VW DATABASE 视图定义
搜索属性列表 ALTER AL SERVER 更改任何全文目录
搜索属性列表 CONTROL CL SERVER CONTROL
搜索属性列表 REFERENCES RF SERVER REFERENCES
搜索属性列表 接管所有权 TO SERVER CONTROL
搜索属性列表 视图定义 VW SERVER 视图定义
SERVER 管理批量操作 ADBO 不適用 不適用
SERVER 修改任何可用性组 ALAG 不適用 不適用
SERVER 更改任何连接 ALCO 不適用 不適用
SERVER 更改任何凭据 ALCD 不適用 不適用
SERVER 更改任何数据库 ALDB 不適用 不適用
SERVER 修改任何终结点 ALHE 不適用 不適用
SERVER 修改任何事件通知 ALES 不適用 不適用
SERVER 更改任何事件会话 AAES 不適用 不適用
SERVER 更改任何事件会话以添加事件 LSAE 不適用 不適用
SERVER 修改任何事件会话并添加目标 LSAT 不適用 不適用
SERVER 更改任何事件会话禁用 DES 不適用 不適用
SERVER ALTER ANY EVENT SESSION(修改任何事件会话) DROP EVENT(删除事件) LSDE 不適用 不適用
SERVER 更改任意事件会话删除目标 LSDT 不適用 不適用
SERVER 更改任何事件会话启用 EES 不適用 不適用
SERVER 更改任何事件会话选项 LESO 不適用 不適用
SERVER 更改任何链接服务器 ALLS 不適用 不適用
SERVER 修改任意登录 ALLG 不適用 不適用
SERVER 修改任何服务器审计 ALAA 不適用 不適用
SERVER 更改任意服务器角色 ALSR 不適用 不適用
SERVER 更改资源 ALRS 不適用 不適用
SERVER 更改服务器状态 ALSS 不適用 不適用
SERVER 修改设置 ALST 不適用 不適用
SERVER 更改跟踪 ALTR 不適用 不適用
SERVER 身份验证服务器 AUTH 不適用 不適用
SERVER 连接任何数据库 CADB 不適用 不適用
SERVER 连接 SQL COSQ 不適用 不適用
SERVER 控制服务器 CL 不適用 不適用
SERVER 创建任意数据库 CRDB 不適用 不適用
SERVER 创建可用性组 CRAC 不適用 不適用
SERVER 创建 DDL 事件通知 CRDE 不適用 不適用
SERVER 创建终结点 CRHE 不適用 不適用
SERVER 创建服务器角色 CRSR 不適用 不適用
SERVER 创建跟踪事件通知 CRTE 不適用 不適用
SERVER 外部访问程序集 XA 不適用 不適用
SERVER 模拟任何登录 IAL 不適用 不適用
SERVER 选择所有用户安全对象 SUS 不適用 不適用
SERVER SHUTDOWN SHDN 不適用 不適用
SERVER 不安全的组装 XU 不適用 不適用
SERVER 查看任意数据库 VWDB 不適用 不適用
SERVER 查看任何定义 VWAD 不適用 不適用
SERVER 查看服务器状态 VWSS 不適用 不適用
服务器角色 ALTER AL SERVER 更改任意服务器角色
服务器角色 CONTROL CL SERVER 控制服务器
服务器角色 接管所有权 TO SERVER 控制服务器
服务器角色 视图定义 VW SERVER 查看任何定义
SERVICE ALTER AL DATABASE 更改任何服务
SERVICE CONTROL CL DATABASE CONTROL
SERVICE SEND SN DATABASE CONTROL
SERVICE 接管所有权 TO DATABASE CONTROL
SERVICE 视图定义 VW DATABASE 视图定义
对称密钥 ALTER AL DATABASE 更改任意对称密钥
对称密钥 CONTROL CL DATABASE CONTROL
对称密钥 REFERENCES RF DATABASE REFERENCES
对称密钥 接管所有权 TO DATABASE CONTROL
对称密钥 视图定义 VW DATABASE 视图定义
TYPE CONTROL CL SCHEMA CONTROL
TYPE EXECUTE EX SCHEMA EXECUTE
TYPE REFERENCES RF SCHEMA REFERENCES
TYPE 接管所有权 TO SCHEMA CONTROL
TYPE 视图定义 VW SCHEMA 视图定义
USER ALTER AL DATABASE 更改任何用户
USER CONTROL CL DATABASE CONTROL
USER IMPERSONATE IM DATABASE CONTROL
USER 视图定义 VW DATABASE 视图定义
XML 架构集合 ALTER AL SCHEMA ALTER
XML 架构集合 CONTROL CL SCHEMA CONTROL
XML 架构集合 EXECUTE EX SCHEMA EXECUTE
XML 架构集合 REFERENCES RF SCHEMA REFERENCES
XML 架构集合 接管所有权 TO SCHEMA CONTROL
XML 架构集合 视图定义 VW SCHEMA 视图定义

SQL Server 2022 添加的新粒度权限

以下权限将添加到 SQL Server 2022:

  • 添加了 10 个新权限,允许访问系统元数据。

  • 为扩展事件添加了 18 个新权限。

  • 针对安全相关对象添加了 9 个新权限。

  • 为账本添加了 4 个权限。

  • 3 个其他数据库权限。

有关详细信息,请参阅 SQL Server 2022 和 Azure SQL 的新粒度权限,以改进对 PoLP 的遵守。

系统元数据的访问权限

服务器级别:

  • 查看任何安全定义
  • 查看任何性能定义
  • 查看服务器安全状态
  • 查看服务器性能状态
  • 查看任何加密保护的定义

数据库级别:

  • 查看数据库安全状态
  • 查看数据库性能状态
  • 查看安全定义
  • 查看性能定义
  • 查看加密安全的定义

扩展事件权限

服务器级别:

  • 创建任意事件会话
  • 删除任意事件会话
  • 更改任何事件会话选项
  • 更改任何事件会话以添加事件
  • ALTER ANY EVENT SESSION(修改任何事件会话) DROP EVENT(删除事件)
  • 更改任何事件会话启用
  • 更改任何事件会话禁用
  • 修改任何事件会话并添加目标
  • 更改任意事件会话删除目标

所有这些权限都在同一父权限下:ALTER ANY EVENT SESSION

数据库级别:

  • 创建任何数据库事件会话
  • 删除任意数据库事件会话
  • 更改任何数据库事件会话选项
  • 更改任何数据库事件会话添加事件
  • ALTER ANY DATABASE EVENT SESSION DROP EVENT (SQL命令: 修改任何数据库事件会话删除事件)
  • 启用 ALTER ANY DATABASE 事件会话功能
  • ALTER ANY DATABASE EVENT SESSION DISABLE
  • 更改任何数据库事件会话添加目标
  • 修改任何数据库事件会话删除目标

所有这些权限都在同一父权限下:ALTER ANY DATABASE EVENT SESSION

  • 控制(凭据)
  • CREATE LOGIN(创建登录)
  • 创建用户
  • 证明文件(凭证)
  • 解除屏蔽(对象)
  • UNMASK (SCHEMA)
  • 查看任何错误日志
  • 查看服务器安全审核
  • 查看数据库安全审核

账本权限

  • ALTER LEDGER
  • 更改分类帐配置
  • 启用账本
  • 查看账本内容

其他数据库权限

  • 任何外部作业的ALTER操作
  • 修改任何外部流
  • 执行任何外部终结点

权限检查算法摘要

检查权限可能很复杂。 权限检查算法包括重叠的组成员身份和所有权链、显式和隐式权限,并且可能会受到包含该安全对象实体的安全对象类的权限的影响。 该算法的一般过程是收集所有相关权限。 如果未找到阻塞性的 DENY,则算法会搜索提供足够访问权限的 GRANT。 该算法包含三个基本要素:安全上下文权限空间所需权限

Note

不能授予、拒绝或撤销对sadboinformation_schemasys、实体所有者或您自己的权限。

  • 安全上下文

    这是为访问检查提供权限的主体组。 这些是与当前登录名或用户相关的权限,除非通过使用 EXECUTE AS 语句将安全上下文更改为另一个登录名或用户。 安全上下文包括以下主体:

    • 登录

    • 用户

    • 角色成员资格

    • Windows 组成员身份

    • 如果使用模块签名,则包括用于签名用户当前正在执行的模块的证书的任何登录名或用户帐户,以及该主体的相关角色成员身份。

  • 权限空间

    这是安全对象实体以及包含该安全对象的任何安全对象类。 例如,表(一种安全对象实体)包含在架构安全对象类和数据库安全对象类中。 访问可能会受到表、架构、数据库和服务器级权限的影响。 有关详细信息,请参阅权限层次结构(数据库引擎)

  • 所需权限

    所需的权限类型。 例如,INSERT、UPDATE、DELETE、SELECT、EXECUTE、ALTER、CONTROL 等。

    访问可能需要多个权限,如下例所示:

    • 存储过程可能既需要该存储过程的 EXECUTE 权限,又需要该存储过程所引用的多个表的 INSERT 权限。

    • 动态管理视图可能既需要 VIEW SERVER STATE 权限,又需要该视图的 SELECT 权限。

算法的通用步骤

当算法确定是否允许访问某个安全对象时,其使用的确切步骤可能会有所不同,具体取决于所涉及的主体和安全对象。 但是,该算法执行以下一般步骤:

  1. 如果登录名是 sysadmin 固定服务器角色的成员,或者用户是当前数据库中的 dbo 用户,则跳过权限检查。

  2. 如果所有权链适用,且对链中较早对象的访问检查通过了安全检查,则允许访问。

  3. 聚合与调用方相关联的服务器级、数据库级和已签名模块标识,以创建安全上下文

  4. 针对该安全上下文,收集对权限空间授予或拒绝的所有权限。 权限可以显式声明为 GRANT、GRANT WITH GRANT 或 DENY;或者权限可以是隐含的或涵盖性的 GRANT 或 DENY 权限。 例如,架构上的 CONTROL 权限隐含表上的 CONTROL 权限。 表上的 CONTROL 权限隐含 SELECT 权限。 因此,如果授予了架构的 CONTROL 权限,则授予表的 SELECT 权限。 如果拒绝了表的 CONTROL 权限,则拒绝表的 SELECT 权限。

    Note

    列级权限的 GRANT 会覆盖对象级的 DENY。 有关详细信息,请参阅 DENY 对象权限

  5. 确定所需权限

  6. 如果对权限空间中的对象的安全上下文中的任何标识直接或隐含地拒绝了所需权限,则权限检查失败。

  7. 如果没有拒绝必需的权限, 而且必需的权限 包含对安全上下文中任何标识直接或隐式的 GRANT 或 GRANT WITH GRANT 权限,则要通过权限检查,这适用于权限空间中的任何对象。

列级权限的特殊注意事项

列级权限使用语法 <table_name>(<column _name>) 授予。 例如:

GRANT SELECT ON OBJECT::Customer(CustomerName) TO UserJoe;

表上的 DENY 会被列上的 GRANT 覆盖。 但是,随后对表的 DENY 将移除列的 GRANT。

Examples

本部分中的示例演示如何检索权限信息。

A. 返回可授予权限的完整列表

下列语句使用 fn_builtin_permissions 函数返回所有数据库引擎权限。 有关详细信息,请参阅 sys.fn_builtin_permissions

SELECT * FROM fn_builtin_permissions(default);
GO

B. 返回针对某类对象的权限

以下示例使用 fn_builtin_permissions 查看一类安全对象可用的所有权限。 该示例返回程序集的权限。

SELECT * FROM fn_builtin_permissions('assembly');
GO

C. 返回授予对象的执行主体的权限

以下示例使用 fn_my_permissions 返回调用主体在指定安全对象上拥有的有效权限列表。 该示例返回名为 Orders55 的对象的权限。 有关详细信息,请参阅 sys.fn_my_permissions

SELECT * FROM fn_my_permissions('Orders55', 'object');
GO

D. 返回适用于指定对象的权限

以下示例返回适用于名为 Yttrium 的对象的权限。 使用内置函数 OBJECT_ID 来检索对象 Yttrium 的 ID。

SELECT * FROM sys.database_permissions
    WHERE major_id = OBJECT_ID('Yttrium');
GO