sys.database_permissions (Transact-SQL)

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

为数据库中的每个权限或列异常权限返回一行。 对于列,每个权限有与相应的对象级别权限不同的一行。 如果列权限与相应的对象权限相同,则此处无该列权限行,所应用的权限将是对象权限。

Important

列级别权限的优先级高于同一实体的对象级别权限。

Column name Data type 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

搜索属性列表

数据库作用域凭据

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) Permission name.
state char(1) Permission state:

D = 拒绝

R = 撤消

G = 授予

W = 带授权选项的授权
state_desc nvarchar(60) 权限状态的说明:

DENY

REVOKE

GRANT

GRANT_WITH_GRANT_OPTION

Database Permissions

可以使用以下类型的权限。

Permission type Permission name 适用于安全对象
AADS 更改任意数据库事件会话 DATABASE
AAMK 更改任意掩码 DATABASE
AEDS 修改任何外部数据源 DATABASE
AEFF 更改任何外部文件格式 DATABASE
AL ALTER APPLICATION ROLE、ASSEMBLY、ASYMMETRIC KEY、CERTIFICATE、CONTRACT、DATABASE、FULLTEXT CATALOG、MESSAGE TYPE、OBJECT、REMOTE SERVICE BINDING、ROLE、ROUTE、SCHEMA、SERVICE、SYMMETRIC KEY、USER、XML SCHEMA COLLECTION
ALAK 更改任何非对称密钥 DATABASE
ALAR 修改任意应用角色 DATABASE
ALAS ALTER ANY ASSEMBLY DATABASE
ALCF 修改任何证书 DATABASE
ALDS 更改任何数据空间 DATABASE
ALED 更改任何数据库事件通知 DATABASE
ALFT 更改任何全文目录 DATABASE
ALMT 更改任何消息类型 DATABASE
ALRL 修改任意角色 DATABASE
ALRT 修改任何路由 DATABASE
ALSB 更改任意远程服务绑定 DATABASE
ALSC 更改任何合同 DATABASE
ALSK 更改任意对称密钥 DATABASE
ALSM 更改任何架构 DATABASE
ALSV 更改任何服务 DATABASE
ALTG ALTER ANY DATABASE DDL TRIGGER DATABASE
ALUS 更改任何用户 DATABASE
AUTH AUTHENTICATE DATABASE
BADB BACKUP DATABASE DATABASE
BALO BACKUP LOG DATABASE
CL CONTROL APPLICATION ROLE、ASSEMBLY、ASYMMETRIC KEY、CERTIFICATE、CONTRACT、DATABASE、FULLTEXT CATALOG、MESSAGE TYPE、OBJECT、REMOTE SERVICE BINDING、ROLE、ROUTE、SCHEMA、SERVICE、SYMMETRIC KEY、TYPE、USER、XML SCHEMA COLLECTION
CO CONNECT DATABASE
CORP CONNECT REPLICATION DATABASE
CP CHECKPOINT DATABASE
CRAG CREATE AGGREGATE DATABASE
CRAK 创建非对称密钥 DATABASE
CRAS CREATE ASSEMBLY DATABASE
CRCF CREATE CERTIFICATE DATABASE
CRDB CREATE DATABASE DATABASE
CRDF CREATE DEFAULT DATABASE
CRED CREATE DATABASE DDL 事件通知 DATABASE
CRFN CREATE FUNCTION DATABASE
CRFT 创建全文目录 DATABASE
CRMT 创建消息类型 DATABASE
CRPR CREATE PROCEDURE DATABASE
CRQU CREATE QUEUE DATABASE
CRRL CREATE ROLE DATABASE
CRRT CREATE ROUTE DATABASE
CRRU CREATE RULE DATABASE
CRSB 创建远程服务绑定 DATABASE
CRSC CREATE CONTRACT DATABASE
CRSK 创建对称密钥 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) 及更高版本。

创建 XML 架构集合
DATABASE
DABO 管理数据库批量操作 DATABASE
DL DELETE DATABASE、OBJECT、SCHEMA
EAES 执行任何外部脚本 DATABASE
EX EXECUTE ASSEMBLY、DATABASE、OBJECT、SCHEMA、TYPE、XML SCHEMA COLLECTION
IM IMPERSONATE USER
IN INSERT DATABASE、OBJECT、SCHEMA
RC RECEIVE OBJECT
RF REFERENCES ASSEMBLY、ASYMMETRIC KEY、CERTIFICATE、CONTRACT、DATABASE、FULLTEXT CATALOG、MESSAGE TYPE、OBJECT、SCHEMA、SYMMETRIC KEY、TYPE、XML SCHEMA COLLECTION
SL SELECT DATABASE、OBJECT、SCHEMA
SN SEND SERVICE
SPLN SHOWPLAN DATABASE
SUQN 订阅查询通知 DATABASE
TO TAKE OWNERSHIP ASSEMBLY、ASYMMETRIC KEY、CERTIFICATE、CONTRACT, DATABASE、FULLTEXT CATALOG、MESSAGE TYPE、OBJECT、REMOTE SERVICE BINDING、ROLE、ROUTE、SCHEMA、SERVICE、SYMMETRIC KEY、TYPE、XML SCHEMA COLLECTION
UP UPDATE DATABASE、OBJECT、SCHEMA
VW VIEW DEFINITION APPLICATION ROLE、ASSEMBLY、ASYMMETRIC KEY、CERTIFICATE、CONTRACT、DATABASE、FULLTEXT CATALOG、MESSAGE TYPE、OBJECT、REMOTE SERVICE BINDING、ROLE、ROUTE、SCHEMA、SERVICE、SYMMETRIC KEY、TYPE、USER、XML SCHEMA COLLECTION
VWCK 查看任何列加密密钥定义 DATABASE
VWCM 查看任何列主密钥定义 DATABASE
VWCT 查看更改跟踪 TABLE, SCHEMA
VWDS 查看数据库状态 DATABASE

REVOKE 和列异常权限

在大多数情况下,REVOKE 命令将从sys.database_permissions中删除 GRANT 或 DENY 条目。

但是,可以授予或拒绝对对象的权限,然后撤消对该列的权限。 此列异常权限将显示在sys.database_permissions中显示为 REVOKE。 请考虑以下示例:

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 DEFINITION、ALTER ANY USER 或任何相关的用户权限。 要查看用户定义的角色,需要获取 ALTER ANY 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;

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 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

See also

Next steps