sys.database_permissions (Transact-SQL)
適用於:MICROSOFT網狀架構倉儲中的SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體Azure Synapse Analytics Analytics Platform System (PDW) SQL 分析端點,Microsoft Fabric SQL 資料庫中的網狀架構倉儲Microsoft網狀架構
傳回資料庫中每個許可權或數據行例外狀況許可權的數據列。 針對數據行,每個許可權的數據列都與對應的物件層級許可權不同。 如果數據行許可權與對應的物件許可權相同,則沒有任何數據列,而且套用的許可權就是對象的數據列。
重要
數據行層級許可權會覆寫相同實體上的物件層級許可權。
資料行名稱 | 資料類型 | 描述 |
---|---|---|
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 |
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(在數據行上)。
重要
REVOKE 與 DENY 不同,因為 Sales
主體可能仍可透過其他許可權存取數據行。 如果我們拒絕許可權,而不是撤銷許可權,Sales
將無法檢視數據行的內容,因為 DENY 一律取代 GRANT。
權限
任何使用者都可以看到自己的許可權。 若要查看其他用戶的許可權,需要 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_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. 列出特定對象的許可權
您可以使用上述範例來查詢單一資料庫物件特定的許可權。
例如,請考慮在範例資料庫中AdventureWorksDW2022
下列細微許可權:
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