sys.database_permissions (Transact-SQL)

適用於:SQL ServerAzure SQL 資料庫Azure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric 中的 SQL 分析端點Microsoft Fabric 中的倉儲

傳回資料庫中每個許可權或數據行例外狀況許可權的數據列。 針對數據行,每個許可權的數據列都與對應的物件層級許可權不同。 如果數據行許可權與對應的物件許可權相同,則沒有任何數據列,而且套用的許可權就是對象的數據列。

重要

數據行層級許可權會覆寫相同實體上的物件層級許可權。

資料行名稱 資料類型 描述
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 = Route - 適用於: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

外部語言
major_id int 存在許可權的標識碼,根據類別解譯。 通常, major_id 只會套用至 類別所代表的標識符類型。

0 = 資料庫本身

>0 = 使用者物件的物件識別碼

<0 = 系統對象的物件識別碼
minor_id int 存在許可權之專案的次要標識符,根據類別解譯。 通常, minor_id 是零,因為對象類別沒有子類別可用。 否則,它是數據表的數據行標識符。
grantee_principal_id int 授與許可權的資料庫主體標識碼。
grantor_principal_id int 這些許可權授與者的資料庫主體標識碼。
type char(4) 資料庫許可權類型。 如需許可權類型清單,請參閱下表。
permission_name nvarchar(128) 許可權名稱。
state char(1) 權限狀態:

D = 拒絕

R = 撤銷

G = 授與

W = 授與授與選項
state_desc nvarchar(60) 權限狀態的描述:

拒絕

REVOKE

GRANT

GRANT_WITH_GRANT_OPTION

資料庫權限

下列類型的許可權是可能的。

權限類型 權限名稱 適用於安全性實體
AADS ALTER ANY DATABASE EVENT SESSION DATABASE
AAMK ALTER ANY MASK DATABASE
AEDS ALTER ANY EXTERNAL DATA SOURCE DATABASE
AEFF ALTER ANY EXTERNAL FILE FORMAT DATABASE
AL ALTER 應用程式角色、元件、非對稱密鑰、憑證、合約、資料庫、全文檢索目錄、訊息類型、對象、遠端服務系結、角色、路由、架構、服務、對稱密鑰、使用者、XML 架構集合
ALAK ALTER ANY ASYMMETRIC KEY DATABASE
ALAR ALTER ANY APPLICATION ROLE DATABASE
ALAS ALTER ANY ASSEMBLY DATABASE
ALCF ALTER ANY CERTIFICATE DATABASE
ALDS ALTER ANY DATASPACE DATABASE
ALED ALTER ANY DATABASE EVENT NOTIFICATION DATABASE
ALFT ALTER ANY FULLTEXT CATALOG DATABASE
ALMT ALTER ANY MESSAGE TYPE DATABASE
ALRL ALTER ANY ROLE DATABASE
ALRT ALTER ANY ROUTE DATABASE
ALSB ALTER ANY REMOTE SERVICE BINDING DATABASE
ALSC ALTER ANY CONTRACT DATABASE
ALSK ALTER ANY SYMMETRIC KEY DATABASE
ALSM ALTER ANY SCHEMA DATABASE
ALSV ALTER ANY SERVICE DATABASE
ALTG ALTER ANY DATABASE DDL TRIGGER DATABASE
ALUS 修改任何使用者 DATABASE
AUTH AUTHENTICATE DATABASE
BADB BACKUP DATABASE DATABASE
BALO BACKUP LOG DATABASE
CL CONTROL 應用程式角色、元件、非對稱密鑰、憑證、合約、資料庫、全文檢索目錄、訊息類型、對象、遠端服務系結、角色、路由、架構、服務、對稱密鑰、類型、使用者、XML 架構集合
CO CONNECT DATABASE
CORP CONNECT REPLICATION 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 建立程序 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 建立資料表 DATABASE
CRTY 建立類型 DATABASE
CRVW 建立檢視 DATABASE
CRXS 適用於:SQL Server 2008 (10.0.x) 和更新版本。

CREATE XML SCHEMA COLLECTION
DATABASE
DABO ADMINISTER DATABASE BULK OPERATIONS DATABASE
DL DELETE DATABASE、OBJECT、SCHEMA
EAES EXECUTE ANY EXTERNAL SCRIPT DATABASE
EX 執行 CREATE 陳述式之前,請先執行 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 SUBSCRIBE QUERY NOTIFICATIONS DATABASE
收件人 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 應用程式角色、元件、非對稱密鑰、憑證、合約、資料庫、全文檢索目錄、訊息類型、對象、遠端服務系結、角色、路由、架構、服務、對稱密鑰、類型、使用者、XML 架構集合
VWCK VIEW ANY COLUMN ENCRYPTION KEY DEFINITION DATABASE
VWCM VIEW ANY COLUMN MASTER KEY DEFINITION DATABASE
VWCT VIEW CHANGE TRACKING TABLE、SCHEMA
VWDS 檢視資料庫狀態 DATABASE

權限

任何使用者都可以看到自己的許可權。 若要查看其他用戶的許可權,需要 VIEW DEFINITION、ALTER ANY USER 或使用者的任何許可權。 若要查看使用者定義角色,需要 ALTER ANY ROLE,或角色的成員資格(例如 public)。

目錄檢視中元數據的可見度僅限於用戶擁有的安全性實體,或用戶獲授與某些許可權的安全性實體。 如需相關資訊,請參閱 Metadata Visibility Configuration

範例

A. 列出資料庫主體的所有許可權

下列查詢會列出明確授與或拒絕資料庫主體的許可權。

重要

固定資料庫角色的許可權不會出現在 中 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_principalssys.database_permissions 聯結至 sys.objectssys.schemas ,以列出授與或拒絕特定架構對象的許可權。

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. 列出特定對象的許可權

您可以使用上述範例來查詢單一資料庫物件特定的許可權。

例如,請考慮在範例資料庫中AdventureWorksDW2022授與給資料庫使用者的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

另請參閱

下一步