適用於: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為 sysnameNULL。
這個自變數必須是下列其中一個值:、、、APPLICATION ROLEASSEMBLYASYMMETRIC KEYCERTIFICATECONTRACTDATABASEENDPOINTFULLTEXT CATALOGLOGINMESSAGE TYPEOBJECTREMOTE SERVICE BINDINGROLEROUTESCHEMASERVERSERVICESYMMETRIC KEYTYPE 。USERXML SCHEMA COLLECTION 預設值為 NULLSERVER的值。
傳回的數據行
下表列出傳回的數據 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. 列出資料庫的有效許可權
下列範例會傳回資料庫上 AdventureWorks2025 呼叫端的有效許可權清單。
USE AdventureWorks2022;
SELECT * FROM fn_my_permissions(NULL, 'DATABASE');
GO
C. 列出檢視的有效許可權
下列範例會傳回資料庫架構vIndividualCustomer中Sales檢視上AdventureWorks2025呼叫端的有效許可權清單。
USE AdventureWorks2022;
GO
SELECT * FROM fn_my_permissions('Sales.vIndividualCustomer', 'OBJECT')
ORDER BY subentity_name, permission_name;
GO
D. 列出其他使用者的有效許可權
下列範例會傳回資料庫架構Wanida中Employee數據表上HumanResources資料庫使用者AdventureWorks2025的有效許可權清單。 呼叫端需要 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 架構集合的有效許可權
下列範例會傳回資料庫中名為 ProductDescriptionSchemaCollectionAdventureWorks2025 之 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. 列出另一個登入的有效許可權
下列範例會傳回資料庫架構WanidaBenshoof中Employee數據表上 HumanResources SQL Server 登入AdventureWorks2025的有效許可權清單。 呼叫端需要 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