sys.fn_my_permissions (Transact-SQL)
適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 的 SQL 端點分析 Microsoft Fabric 的倉儲
傳回安全性實體上有效授與主體的許可權清單。 相關的函式HAS_PERMS_BY_NAME。
語法
fn_my_permissions ( securable , 'securable_class' )
引數
securable
安全性實體的名稱。 如果安全性實體是伺服器或資料庫,這個值應該設定為 NULL
。 securable 為 sysname 類型的純量運算式。 安全性實體 可以是多部分名稱。
'securable_class'
列出許可權的安全性實體類別名稱。 securable_class為 sysname,預設值為 NULL
。
這個自變數必須是下列其中一個值:、、、LOGIN
ASYMMETRIC KEY
DATABASE
ROLE
REMOTE SERVICE BINDING
ROUTE
SERVICE
OBJECT
XML SCHEMA COLLECTION
ENDPOINT
SCHEMA
FULLTEXT CATALOG
SERVER
MESSAGE TYPE
CERTIFICATE
USER
CONTRACT
SYMMETRIC KEY
TYPE
。ASSEMBLY
APPLICATION ROLE
預設值為 NULL
SERVER
的值。
傳回的數據行
下表列出傳回的數據 fn_my_permissions
行。 傳回的每個數據列都會描述安全性實體上目前安全性內容所持有的許可權。 如果查詢失敗,則傳 NULL
回 。
資料行名稱 | 類型 | 描述 |
---|---|---|
entity_name |
sysname | 有效授與所列出許可權的安全性實體名稱。 |
subentity_name |
sysname | 如果安全性實體具有資料行,則為資料行名稱,否則 NULL 為 。 |
permission_name |
nvarchar | 許可權的名稱。 |
備註
這個數據表值函式會傳回呼叫主體在指定安全性實體上所持有的有效許可權清單。 有效的權限是下列任一選項:
- 直接授與主體的權限,且不被拒絕。
- 由主體保留的較高層級權限所隱含的權限,且不被拒絕。
- 授與角色或群組的權限,主體為其成員之一,且不被拒絕。
- 角色或群組所保留的權限,主體為其成員之一,且不被拒絕。
權限評估一律在呼叫端的安全性內容中執行。 若要判斷其他主體是否有有效的許可權,呼叫端必須擁有 IMPERSONATE
該主體的許可權。
若為架構層級實體,則會接受一部分、兩部分或三部分的非 Null 名稱。 若為資料庫層級實體,則會接受單部分名稱,其值為 Null,表示 目前的資料庫。 針對伺服器本身,需要 Null 值(表示 目前的伺服器)。 fn_my_permissions
無法檢查連結伺服器上的許可權。
下列查詢會傳回內建安全性實體類別的清單:
SELECT DISTINCT class_desc
FROM fn_builtin_permissions(DEFAULT)
ORDER BY class_desc;
GO
如果 DEFAULT
提供為安全性實體或securable_class的值,則值會解譯為 NULL
。
Azure Synapse Analytics 專用 SQL 集區不支援此 fn_my_permissions
函式。
權限
需要 public 角色的成員資格。
範例
A. 列出伺服器上的有效許可權
下列範例會傳回伺服器上呼叫端的有效許可權清單。
SELECT * FROM fn_my_permissions(NULL, 'SERVER');
GO
B. 列出資料庫的有效許可權
下列範例會傳回資料庫上 AdventureWorks2022
呼叫端的有效許可權清單。
USE AdventureWorks2022;
SELECT * FROM fn_my_permissions(NULL, 'DATABASE');
GO
C. 列出檢視的有效許可權
下列範例會傳回資料庫架構AdventureWorks2022
中Sales
檢視上vIndividualCustomer
呼叫端的有效許可權清單。
USE AdventureWorks2022;
GO
SELECT * FROM fn_my_permissions('Sales.vIndividualCustomer', 'OBJECT')
ORDER BY subentity_name, permission_name;
GO
D. 列出其他使用者的有效許可權
下列範例會傳回資料庫架構AdventureWorks2022
中HumanResources
數據表上Employee
資料庫使用者Wanida
的有效許可權清單。 呼叫端需要 IMPERSONATE
用戶 Wanida
的許可權。
EXECUTE AS USER = 'Wanida';
SELECT *
FROM fn_my_permissions('HumanResources.Employee', 'OBJECT')
ORDER BY subentity_name, permission_name;
REVERT;
GO
E. 列出憑證的有效許可權
下列範例會傳回目前資料庫中名為 Shipping47
之憑證上呼叫端的有效許可權清單。
SELECT * FROM fn_my_permissions('Shipping47', 'CERTIFICATE');
GO
F. 列出 XML 架構集合的有效許可權
下列範例會傳回資料庫中名為 ProductDescriptionSchemaCollection
AdventureWorks2022
之 XML 架構集合上呼叫端之有效許可權的清單。
USE AdventureWorks2022;
GO
SELECT * FROM fn_my_permissions(
'ProductDescriptionSchemaCollection',
'XML SCHEMA COLLECTION'
);
GO
G. 列出資料庫使用者的有效許可權
下列範例會傳回目前資料庫中名為 MalikAr
之使用者的有效許可權清單。
SELECT * FROM fn_my_permissions('MalikAr', 'USER');
GO
H. 列出另一個登入的有效許可權
下列範例會傳回資料庫架構AdventureWorks2022
中HumanResources
數據表上 Employee
SQL Server 登入WanidaBenshoof
的有效許可權清單。 呼叫端需要 IMPERSONATE
SQL Server 登入 WanidaBenshoof
的許可權。
EXECUTE AS LOGIN = 'WanidaBenshoof';
SELECT *
FROM fn_my_permissions('AdventureWorks2022.HumanResources.Employee', 'OBJECT')
ORDER BY subentity_name, permission_name;
REVERT;
GO