适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
分析平台系统(PDW)
Microsoft Fabric 中的 SQL 分析终结点
Microsoft Fabric 中的仓库
Microsoft Fabric 中的 SQL 数据库
为数据库中的每个权限或列异常权限返回一行。 对于列,每个权限有与相应的对象级别权限不同的一行。 如果列权限与相应的对象权限相同,则此处无该列权限行,所应用的权限将是对象权限。
Important
列级别权限的优先级高于同一实体的对象级别权限。
| 列名称 | 数据类型 | Description |
|---|---|---|
| class | tinyint | 标识权限所在的类。 有关详细信息,请参阅 sys.securable_classes (Transact-SQL)。 0 = 数据库 1 = 对象或列 3 = 架构 4 = 数据库主体 5 = 程序集 - 适用于:SQL Server 2008 (10.0.x) 及更高版本。 6 = 类型 10 = XML 架构集合 - 适用于:SQL Server 2008 (10.0.x) 及更高版本。 15 = 消息类型 - 适用于:SQL Server 2008 (10.0.x) 及更高版本。 16 = 服务协定 - 适用于:SQL Server 2008 (10.0.x) 及更高版本。 17 = 服务 - 适用于:SQL Server 2008 (10.0.x) 及更高版本。 18 = 远程服务绑定 - 适用于:SQL Server 2008 (10.0.x) 及更高版本。 19 = 路由 - 适用于:SQL Server 2008 (10.0.x) 及更高版本。 23 =全文目录 - 适用于:SQL Server 2008 (10.0.x) 及更高版本。 24 = 对称密钥 - 适用于:SQL Server 2008 (10.0.x) 及更高版本。 25 = 证书 - 适用于:SQL Server 2008 (10.0.x) 及更高版本。 26 = 非对称密钥 - 适用于:SQL Server 2008 (10.0.x) 及更高版本。 29 = 全文非索引字表 - 适用于:SQL Server 2008 (10.0.x) 及更高版本。 31 = 搜索属性列表 - 适用于:SQL Server 2008 (10.0.x) 及更高版本。 32 = 数据库作用域凭据 - 适用于:SQL Server 2016 (13.x) 及更高版本。 34 = 外部语言 - 适用于:SQL Server 2019 (15.x) 及更高版本。 |
| class_desc | nvarchar(60) | 权限所针对的类的说明。 DATABASE OBJECT_OR_COLUMN SCHEMA DATABASE_PRINCIPAL ASSEMBLY TYPE XML_SCHEMA_COLLECTION MESSAGE_TYPE SERVICE_CONTRACT SERVICE REMOTE_SERVICE_BINDING ROUTE FULLTEXT_CATALOG SYMMETRIC_KEYS CERTIFICATE ASYMMETRIC_KEY FULLTEXT STOPLIST SEARCH PROPERTY LIST DATABASE SCOPED CREDENTIAL EXTERNAL LANGUAGE |
| major_id | int | 存在权限的对象的 ID,根据类解释。 通常, major_id 仅适用于类所表示的 ID 类型。 0 = 数据库本身 >0 = 用户对象的对象 ID <0 = 系统对象的 Object-ID |
| minor_id | int | 存在权限的对象的辅助 ID,根据类解释。 通常为 minor_id 零,因为没有可用于对象类的子类别。 否则,它是表的 Column-ID。 |
| grantee_principal_id | int | 向其授予权限的数据库主体 ID。 |
| grantor_principal_id | int | 这些权限的授权者的数据库主体 ID。 |
| type | char(4) | 数据库权限类型。 有关权限类型的列表,请参阅下一个表。 |
| permission_name | nvarchar(128) | 权限名。 |
| state | char(1) | 许可状态: D = 拒绝 R = 撤消 G = 授予 W = 带授权选项的授权 |
| state_desc | nvarchar(60) | 权限状态的说明: DENY REVOKE GRANT GRANT_WITH_GRANT_OPTION |
数据库权限
可以使用以下类型的权限。
| 权限类型 | 权限名称 | 适用于安全对象 |
|---|---|---|
| AADS | 改变任何 DATABASEEVENT SESSION | DATABASE |
| AAMK | 更改任意掩码 | DATABASE |
| AEDS | 更改任意 EXTERNAL DATA SOURCE | DATABASE |
| AEFF | 更改任意 EXTERNAL FILE FORMAT | DATABASE |
| AL | ALTER | APPLICATION ROLE, , , , , ASSEMBLYASYMMETRIC KEYCERTIFICATECONTRACTDATABASEFULLTEXT CATALOGMESSAGE TYPEREMOTE SERVICE BINDINGROLEROUTESCHEMASERVICESYMMETRIC KEYUSERXML SCHEMA COLLECTION |
| ALAK | 更改任意 ASYMMETRIC KEY | DATABASE |
| ALAR | 更改任意 APPLICATION ROLE | DATABASE |
| ALAS | 更改任意 ASSEMBLY | DATABASE |
| ALCF | 更改任意 CERTIFICATE | DATABASE |
| ALDS | 更改任何数据空间 | DATABASE |
| ALED | 改变任何 DATABASEEVENT NOTIFICATION | DATABASE |
| ALFT | 更改任意 FULLTEXT CATALOG | DATABASE |
| ALMT | 更改任意 MESSAGE TYPE | DATABASE |
| ALRL | 更改任意 ROLE | DATABASE |
| ALRT | 更改任意 ROUTE | DATABASE |
| ALSB | 更改任意 REMOTE SERVICE BINDING | DATABASE |
| ALSC | 更改任意 CONTRACT | DATABASE |
| ALSK | 更改任意 SYMMETRIC KEY | DATABASE |
| ALSM | 更改任意 SCHEMA | DATABASE |
| ALSV | 更改任意 SERVICE | DATABASE |
| ALTG | 修改任何 DATABASE DDL TRIGGER | DATABASE |
| ALUS | 更改任意 USER | DATABASE |
| AUTH | AUTHENTICATE | DATABASE |
| BADB | BACKUP DATABASE | DATABASE |
| BALO | BACKUP 日志 | DATABASE |
| CL | CONTROL | APPLICATION ROLE, ASSEMBLY, ASYMMETRIC KEY, CERTIFICATE, CONTRACTDATABASEFULLTEXT CATALOGMESSAGE TYPE, , REMOTE SERVICE BINDINGROLEROUTESCHEMASERVICESYMMETRIC KEYTYPEUSERXML SCHEMA COLLECTION |
| CO | CONNECT | DATABASE |
| CORP | 连接复制 | DATABASE |
| CP | CHECKPOINT | DATABASE |
| CRAG | CREATE AGGREGATE | DATABASE |
| CRAK | CREATE ASYMMETRIC KEY | DATABASE |
| CRAS | CREATE ASSEMBLY | DATABASE |
| CRCF | CREATE CERTIFICATE | DATABASE |
| CRDB | CREATE DATABASE | DATABASE |
| CRDF | CREATE DEFAULT | DATABASE |
| CRED | CREATE DATABASE DDL EVENT NOTIFICATION | DATABASE |
| CRFN | CREATE FUNCTION | DATABASE |
| CRFT | CREATE FULLTEXT CATALOG | DATABASE |
| CRMT | CREATE MESSAGE TYPE | DATABASE |
| CRPR | CREATE PROCEDURE | DATABASE |
| CRQU | CREATE QUEUE | DATABASE |
| CRRL | CREATE ROLE | DATABASE |
| CRRT | CREATE ROUTE | DATABASE |
| CRRU | CREATE RULE | DATABASE |
| CRSB | CREATE REMOTE SERVICE BINDING | DATABASE |
| CRSC | CREATE CONTRACT | DATABASE |
| CRSK | CREATE SYMMETRIC KEY | DATABASE |
| CRSM | CREATE SCHEMA | DATABASE |
| CRSN | CREATE SYNONYM | DATABASE |
| CRSO |
适用于:SQL Server 2012 (11.x) 及更高版本。 CREATE SEQUENCE |
DATABASE |
| CRSV | CREATE SERVICE | DATABASE |
| CRTB | CREATE TABLE | DATABASE |
| CRTY | CREATE TYPE | DATABASE |
| CRVW | CREATE VIEW | DATABASE |
| CRXS | 适用于:SQL Server 2008 (10.0.x) 及更高版本。 CREATE XML SCHEMA COLLECTION |
DATABASE |
| DABO | 管理 DATABASE 散装作业 | DATABASE |
| DL | DELETE | DATABASE,对象, SCHEMA |
| EAES | 执行任何外部脚本 | DATABASE |
| EX | EXECUTE | ASSEMBLY, DATABASE, 宾语, SCHEMA, TYPE, XML SCHEMA COLLECTION |
| IM | IMPERSONATE | USER |
| IN | INSERT | DATABASE,对象, SCHEMA |
| RC | RECEIVE | OBJECT |
| RF | REFERENCES | ASSEMBLY, ASYMMETRIC KEY, CERTIFICATE, CONTRACT, DATABASEFULLTEXT CATALOGMESSAGE TYPE对象, SCHEMASYMMETRIC KEYTYPEXML SCHEMA COLLECTION |
| SL | SELECT | DATABASE,对象, SCHEMA |
| SN | SEND | SERVICE |
| SPLN | SHOWPLAN | DATABASE |
| SUQN | 订阅查询通知 | DATABASE |
| TO | 接管所有权 | ASSEMBLY, , , , , ASYMMETRIC KEYCERTIFICATECONTRACTDATABASEFULLTEXT CATALOGMESSAGE TYPEREMOTE SERVICE BINDINGROLEROUTESCHEMASERVICESYMMETRIC KEYTYPEXML SCHEMA COLLECTION |
| UP | UPDATE | DATABASE,对象, SCHEMA |
| VW | VIEW 定义 | APPLICATION ROLE, ASSEMBLY, ASYMMETRIC KEY, CERTIFICATE, CONTRACTDATABASEFULLTEXT CATALOGMESSAGE TYPE, , REMOTE SERVICE BINDINGROLEROUTESCHEMASERVICESYMMETRIC KEYTYPEUSERXML SCHEMA COLLECTION |
| VWCK | VIEW 任何 COLUMN ENCRYPTION KEY 定义 | DATABASE |
| VWCM | VIEW 任何 COLUMN MASTER KEY 定义 | DATABASE |
| VWCT | VIEW 变更追踪 | TABLE、SCHEMA |
| VWDS | VIEW DATABASE 州际 | DATABASE |
REVOKE 以及列例外权限
在大多数情况下,命令 REVOKE 会从sys.database_permissions中移除 GRANT or DENY 条目。
不过,可以先对对象进行 GRANT 权限 DENY ,再 REVOKE 对列进行权限。 这个列例外权限会显示在 REVOKE sys.database_permissions。 请考虑以下示例:
GRANT SELECT ON Person.Person TO [Sales];
REVOKE SELECT ON Person.Person(AdditionalContactInfo) FROM [Sales];
这些权限会在sys.database_permissions中以表 GRANT 上的和列 REVOKE 上的一显示。
Important
REVOKE 与 DENY不同,因为 Sales 主体仍可能通过其他权限访问该列。 如果我们拒绝权限而不是撤销, Sales 就无法查看列内内容,因为 DENY 总是取代 GRANT。
Permissions
任何用户都可以查看自己的权限。 要查看其他用户的权限,需要 VIEW 对用户设置定义、更改任意 USER或任何权限。 要查看用户定义的角色,需要更改任何 ROLE,或是角色的成员身份(如公共)。
目录视图中仅显示用户拥有的安全对象的元数据,或用户对其拥有某些权限的安全对象的元数据。 有关详细信息,请参阅 Metadata Visibility Configuration。
SQL Server 2022 及更高版本的权限
需要在数据库上具有VIEW SECURITY DEFINITION权限。
Examples
A. 列出数据库主体的所有权限
以下查询将列出明确对数据库主体授予或拒绝的权限。
Important
固定数据库角色的权限不会出现在 sys.database_permissions 中。 因此,数据库主体可能具有此处未列出的其他权限。
SELECT pr.principal_id
,pr.name
,pr.type_desc
,pr.authentication_type_desc
,pe.state_desc
,pe.permission_name
FROM sys.database_principals AS pr
INNER JOIN sys.database_permissions AS pe ON pe.grantee_principal_id = pr.principal_id;
B. 列出对数据库中架构对象的权限
以下查询将sys.database_principals和 sys.objects 和 sys.database_permissions 联接,以列出向特定架构对象授予或拒绝的权限。
SELECT pr.principal_id
,pr.name
,pr.type_desc
,pr.authentication_type_desc
,pe.state_desc
,pe.permission_name
,s.name + '.' + o.name AS ObjectName
FROM sys.database_principals AS pr
INNER JOIN sys.database_permissions AS pe ON pe.grantee_principal_id = pr.principal_id
INNER JOIN sys.objects AS o ON pe.major_id = o.object_id
INNER JOIN sys.schemas AS s ON o.schema_id = s.schema_id
WHERE pe.class = 1;
C. 列出特定对象的权限
可以使用前面的示例查询特定于单个数据库对象的权限。
例如,请考虑向示例数据库中test授予以下精细权限:
GRANT SELECT ON dbo.vAssocSeqOrders TO [test];
查找分配给以下项的 dbo.vAssocSeqOrders粒度权限:
SELECT pr.principal_id
,pr.name
,pr.type_desc
,pr.authentication_type_desc
,pe.state_desc
,pe.permission_name
,s.name + '.' + o.name AS ObjectName
FROM sys.database_principals AS pr
INNER JOIN sys.database_permissions AS pe ON pe.grantee_principal_id = pr.principal_id
INNER JOIN sys.objects AS o ON pe.major_id = o.object_id
INNER JOIN sys.schemas AS s ON o.schema_id = s.schema_id
WHERE pe.class = 1
AND o.name = 'vAssocSeqOrders'
AND s.name = 'dbo';
返回输出:
principal_id name type_desc authentication_type_desc state_desc permission_name ObjectName
5 test SQL_USER INSTANCE GRANT SELECT dbo.vAssocSeqOrders