验证用户是否对表具有读取权限

Hik*_*ari 4 sql-server permissions sql-server-2012 ssis-2012

我正在开发一个 ETL,其提取步骤必须从表中读取数据。

有时我的用户对该表的访问权限被撤销。因此,为了避免 ETL 失败,在阅读表之前,我必须验证我是否有权这样做。如果没有,我将跳过提取步骤并运行 ETL 的其余部分。

验证我的用户是否对表具有读取权限的正确方法是什么?

Pau*_*ite 8

要检查安全对象的特定有效权限,请使用HAS_PERMS_BY_NAME*.

例如,要显示当前安全上下文是否SELECTProduction.ProductAdventureWorks 示例数据库中的表具有权限:

SELECT 
    HAS_PERMS_BY_NAME
    (
        N'Production.Product', 
        N'OBJECT', 
        N'SELECT'
    );
Run Code Online (Sandbox Code Playgroud)

相关:要列出安全对象的有效权限,请使用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];
Run Code Online (Sandbox Code Playgroud)

* 内置函数将一切都考虑在内。SQL Server 必须知道如何正确确定有效权限。这个函数暴露了这种能力。