适用于: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, , , , , ROUTESYMMETRIC KEYSERVICESCHEMAREMOTE SERVICE BINDINGUSERROLEDATABASEMESSAGE TYPECONTRACTFULLTEXT CATALOGCERTIFICATEASYMMETRIC KEYASSEMBLYXML 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, CONTRACTMESSAGE TYPEFULLTEXT CATALOGDATABASE, , 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, MESSAGE TYPEFULLTEXT CATALOGDATABASE对象, SCHEMASYMMETRIC KEYTYPEXML SCHEMA COLLECTION |
| SL | SELECT | DATABASE,对象, SCHEMA |
| SN | SEND | SERVICE |
| SPLN | SHOWPLAN | DATABASE |
| SUQN | 订阅查询通知 | DATABASE |
| TO | 接管所有权 | ASSEMBLY, , , , , ROLEREMOTE SERVICE BINDINGSYMMETRIC KEYSERVICESCHEMAROUTETYPEMESSAGE TYPEDATABASEFULLTEXT CATALOGCONTRACTCERTIFICATEASYMMETRIC KEYXML SCHEMA COLLECTION |
| UP | UPDATE | DATABASE,对象, SCHEMA |
| VW | VIEW 定义 | APPLICATION ROLE, ASSEMBLY, ASYMMETRIC KEY, CERTIFICATE, CONTRACTMESSAGE TYPEFULLTEXT CATALOGDATABASE, , 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。
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