分享方式:


sys.fn_my_permissions (Transact-SQL)

適用於:sql Server Azure SQL 資料庫 Azure SQL 受控執行個體 azure Synapse Analytics Platform System (PDW) MICROSOFT網狀架構倉儲中 Microsoft Fabric 中的 SQL 分析端點

傳回安全性實體上有效授與主體的許可權清單。 相關的函式HAS_PERMS_BY_NAME

Transact-SQL 語法慣例

語法

fn_my_permissions ( securable , 'securable_class' )

引數

securable

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

'securable_class'

列出許可權的安全性實體類別名稱。 securable_class為 sysname,預設值為 NULL

這個自變數必須是下列其中一個值:、、、LOGINASYMMETRIC KEYDATABASEROLEREMOTE SERVICE BINDINGROUTESERVICEOBJECTXML SCHEMA COLLECTIONENDPOINTSCHEMAFULLTEXT CATALOGSERVERMESSAGE TYPECERTIFICATEUSERCONTRACTSYMMETRIC KEYTYPEASSEMBLYAPPLICATION 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. 列出檢視的有效許可權

下列範例會傳回資料庫架構AdventureWorks2022Sales檢視上vIndividualCustomer呼叫端的有效許可權清單。

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

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

下列範例會傳回資料庫架構AdventureWorks2022HumanResources數據表上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. 列出另一個登入的有效許可權

下列範例會傳回資料庫架構AdventureWorks2022HumanResources數據表上 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