Sql-Server
驗證使用者是否具有對錶的讀取權限
我正在開發一個 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 必須知道如何正確確定有效權限。這個函式暴露了這種能力。