【问题标题】:How to check whether a user has permission WITH GRANT OPTION?如何检查用户是否具有 WITH GRANT OPTION 权限?
【发布时间】:2014-12-18 09:14:21
【问题描述】:

在 MS SQL Server 2012 中,我可以通过特殊选项“WITH GRANT OPTION”授予用户一些权限:

USE MyDatabase
GRANT ALTER ANY USER TO MyUser WITH GRANT OPTION

现在,如果我使用该用户登录服务器并检查其权限:

USE MyDatabase
SELECT HAS_PERMS_BY_NAME('MyDatabase', 'DATABASE', 'ALTER ANY USER')

它按预期给出了我的“1”(用户确实拥有“ALTER ANY USER”权限)。但是如何使用“WITH GRANT OPTION”选项检查用户是否具有此权限? 我希望可能是这样的:

USE MyDatabase
SELECT HAS_PERMS_BY_NAME('MyDatabase', 'DATABASE', 'ALTER ANY USER WITH GRANT OPTION')

但是当然不行……

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    我想你必须查询sys.database_permissions

    select state from sys.database_permissions
    where class_desc='DATABASE' and
          permission_name='ALTER ANY USER' and
          grantee_principal_id = DATABASE_PRINCIPAL_ID()
    

    对于普通授权,状态将是 G,对于 WITH GRANT OPTION,状态将是 W

    【讨论】:

    • 感谢它适用于所描述的案例。我将其标记为答案。但不幸的是,它在更一般的情况下不起作用 - 诸如 sysadmin 之类的用户是否有权向其他用户授予权限。我的意思是,例如,如果我有 sysadmin 角色 - 我可以向其他用户授予任何权限,但如果我为 sysadmin 运行此脚本 - 结果将为空(只有当您明确授予“GRANT OPTION”权限时才有效)。基本上我真正需要的 - 这是一种了解用户是否有权将此权限授予另一个用户的方法。也许我应该在 SO 上提出另一个问题。
    猜你喜欢
    • 1970-01-01
    • 2012-07-07
    • 2013-12-09
    • 2016-04-23
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    相关资源
    最近更新 更多