Sql-Server

驗證使用者是否具有對錶的讀取權限

  • November 29, 2019

我正在開發一個 ETL,其提取步驟必須從表中讀取數據。

有時我的使用者對該表的訪問權限被撤銷。因此,為了避免 ETL 失敗,在閱讀表格之前,我必須驗證我是否有權這樣做。如果沒有,我將跳過提取步驟並執行 ETL 的其餘部分。

驗證我的使用者是否對錶具有讀取權限的正確方法是什麼?

要檢查安全對象的特定有效權限,請使用HAS_PERMS_BY_NAME*.

例如,顯示目前安全上下文是否對AdventureWorks 範例數據庫中SELECT的表具有權限:Production.Product

SELECT 
   HAS_PERMS_BY_NAME
   (
       N'Production.Product', 
       N'OBJECT', 
       N'SELECT'
   );

相關:要列出安全對象的有效權限,請使用sys.fn_my_permissions

SELECT
   P.[entity_name],
   P.subentity_name,
   P.[permission_name]
FROM sys.fn_my_permissions
   (
       N'Production.Product', 
       N'OBJECT'
   ) AS P
ORDER BY
   P.subentity_name,
   P.[permission_name];
  • 內置函式將所有內容都考慮在內。SQL Server 必須知道如何正確確定有效權限。這個函式暴露了這種能力。

引用自:https://dba.stackexchange.com/questions/83474