共用方式為


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

全文檢索停止清單

搜尋房產清單

資料庫範圍憑證

外部語言
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) 權限狀態的描述:

DENY

REVOKE

GRANT

GRANT_WITH_GRANT_OPTION

資料庫權限

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

權限類型 權限名稱 適用於安全性實體
AADS 修改任何資料庫事件會話 DATABASE
AAMK 更改任何遮罩 DATABASE
AEDS 更改任何外部資料來源 DATABASE
AEFF 修改任何外部檔案格式 DATABASE
AL ALTER 應用程式角色、元件、非對稱密鑰、憑證、合約、資料庫、全文檢索目錄、訊息類型、對象、遠端服務系結、角色、路由、架構、服務、對稱密鑰、使用者、XML 架構集合
ALAK 更改任何非對稱密鑰 DATABASE
ALAR 更改任何應用程式角色 DATABASE
ALAS 變更任何組件 DATABASE
ALCF 變更任何證書 DATABASE
ALDS 修改任何資料空間 DATABASE
ALED 變更任何資料庫事件通知 DATABASE
ALFT ALTER ANY 全文目錄 DATABASE
ALMT 更改任何訊息類型 DATABASE
ALRL 變更任何角色 DATABASE
ALRT 變更任何路由 DATABASE
ALSB 更改任何遠端服務綁定 DATABASE
ALSC 修改任何合約 DATABASE
ALSK 變更任意對稱金鑰 DATABASE
ALSM 更改任何架構 DATABASE
ALSV 變更任何服務 DATABASE
ALTG 更改任何資料庫 DDL 觸發器 DATABASE
ALUS 修改任何使用者 DATABASE
AUTH AUTHENTICATE DATABASE
BADB 備份資料庫 DATABASE
BALO 備份日誌 DATABASE
CL CONTROL 應用程式角色、元件、非對稱密鑰、憑證、合約、資料庫、全文檢索目錄、訊息類型、對象、遠端服務系結、角色、路由、架構、服務、對稱密鑰、類型、使用者、XML 架構集合
CO CONNECT DATABASE
CORP 連接複本 DATABASE
CP CHECKPOINT DATABASE
CRAG 建立彙總 DATABASE
CRAK 建立非對稱金鑰 DATABASE
CRAS 建立組裝 DATABASE
CRCF 建立憑證 DATABASE
CRDB 建立資料庫 DATABASE
CRDF 建立預設值 DATABASE
CRED 建立資料庫 DDL 事件通知 DATABASE
CRFN 建立函數 DATABASE
CRFT 建立全文目錄 DATABASE
CRMT 建立消息類型 DATABASE
CRPR 建立程序 DATABASE
CRQU 建立佇列 DATABASE
CRRL 創建角色 DATABASE
CRRT 建立路由 DATABASE
CRRU 建立規則 DATABASE
CRSB 建立遠端服務系結 DATABASE
CRSC 建立合約 DATABASE
CRSK 建立對稱金鑰 DATABASE
CRSM 建立結構描述 DATABASE
CRSN 建立同義詞 DATABASE
CRSO 適用於:SQL Server 2012 (11.x) 和更新版本。

建立序列
DATABASE
CRSV 建立服務 DATABASE
CRTB CREATE TABLE DATABASE
CRTY 建立類型 DATABASE
CRVW 建立視圖 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 掌握所有權 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 檢視定義 應用程式角色、元件、非對稱密鑰、憑證、合約、資料庫、全文檢索目錄、訊息類型、對象、遠端服務系結、角色、路由、架構、服務、對稱密鑰、類型、使用者、XML 架構集合
VWCK 檢視任何數據行加密金鑰定義 DATABASE
VWCM 檢視任何資料行主要金鑰定義 DATABASE
VWCT 查看變更追蹤 表格,結構
VWDS 檢視資料庫狀態 DATABASE

REVOKE 和數據行例外狀況許可權

在大部分情況下,REVOKE 命令會從 sys.database_permissions移除 GRANT 或 DENY 專案。

不過,可以授與 或 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,或角色的成員資格(例如 public)。

目錄檢視內中繼資料的可見性會限制在使用者所擁有的安全性實體,或已授與使用者某些權限的安全性實體。 如需相關資訊,請參閱 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_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. 列出特定對象的許可權

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

例如,請考慮在範例資料庫中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

另請參閱

後續步驟