適用於: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 = 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_principals 和 sys.database_permissions 聯結至 sys.objects 和 sys.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