共用方式為


fn_my_permissions (Transact-SQL)

傳回有效授與安全性實體上主體的權限清單。相關的函數為 HAS_PERMS_BY_NAME

主題連結圖示Transact-SQL 語法慣例

語法

fn_my_permissions ( securable , 'securable_class' )

引數

  • securable
    這是安全性實體的名稱。如果安全性實體是伺服器或資料庫,這個值應該設為 NULL。securable 是 sysname 類型的純量運算式。securable 可以是多部分名稱。

  • 'securable_class'
    為列出權限之安全性實體的類別名稱。securable_class 為 sysname。securable_class 必須是下列其中一項:APPLICATION ROLE、ASSEMBLY、ASYMMETRIC KEY、CERTIFICATE、CONTRACT、DATABASE、ENDPOINT、FULLTEXT CATALOG、LOGIN、MESSAGE TYPE、OBJECT、REMOTE SERVICE BINDING、ROLE、ROUTE、SCHEMA、SERVER、SERVICE、SYMMETRIC KEY、TYPE、USER、XML SCHEMA COLLECTION。

傳回的資料行

下表將列出 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

如果 securable 或 securable_class 所提供的值為 DEFAULT,該值會被解譯為 NULL。

範例

A. 列出伺服器的有效權限

下列範例會傳回伺服器呼叫者的有效權限清單。

SELECT * FROM fn_my_permissions(NULL, 'SERVER');
GO

B. 列出資料庫的有效權限

下列範例會傳回 AdventureWorks2008R2 資料庫呼叫者的有效權限清單。

USE AdventureWorks2008R2;
SELECT * FROM fn_my_permissions (NULL, 'DATABASE');
GO

C. 列出檢視的有效權限

下列範例會傳回 AdventureWorks2008R2 資料庫之 Sales 結構描述中 vIndividualCustomer 檢視呼叫者的有效權限清單。

USE AdventureWorks2008R2;
SELECT * FROM fn_my_permissions('Sales.vIndividualCustomer', 'OBJECT') 
    ORDER BY subentity_name, permission_name ; 
GO 

D. 列出其他使用者的有效權限

下列範例會傳回 AdventureWorks2008R2 資料庫之 HumanResources 結構描述中 Employee 資料表資料庫使用者 Wanida 的有效權限清單。呼叫者需要使用者 Wanida 的 IMPERSONATE 權限。

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 結構描述集合的有效權限

下列範例會傳回 AdventureWorks2008R2 資料庫中 XML 結構描述集合名稱為 ProductDescriptionSchemaCollection 之呼叫者的有效權限清單。

USE AdventureWorks2008R2;
SELECT * FROM fn_my_permissions('ProductDescriptionSchemaCollection',
    'XML SCHEMA COLLECTION');
GO

G. 列出資料庫使用者的有效權限

下列範例會傳回目前資料庫中使用者名稱為 MalikAr 之呼叫者的有效權限清單。

SELECT * FROM fn_my_permissions('MalikAr', 'USER');
GO

H. 列出其他登入的有效權限

下列範例會傳回 AdventureWorks2008R2 資料庫之 HumanResources 結構描述中 Employee 資料表之 SQL Server 登入 WanidaBenshoof 的有效權限清單。呼叫者需要 SQL Server 登入 WanidaBenshoof 的 IMPERSONATE 權限。

EXECUTE AS LOGIN = 'WanidaBenshoof';
SELECT * FROM fn_my_permissions('AdventureWorks2008R2.HumanResources.Employee', 'OBJECT') 
    ORDER BY subentity_name, permission_name ;  
REVERT;
GO