sys.database_permissions(Transact-SQL)

适用于:SQL ServerAzure 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.objectssys.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

另请参阅

后续步骤