【问题标题】:Grantor does not have GRANT permission - issue授予者没有 GRANT 权限 - 问题
【发布时间】:2014-03-21 09:17:09
【问题描述】:

我在向我创建的服务器级角色授予适当权限时遇到问题。每当该角色的用户尝试向其他用户授予许可时,我都会收到标题中的错误。当我授予角色权限时,我做了一些研究并添加了授予选项,但这没有帮助。我想将我的角色权限保持在执行给定脚本所需的最低水平。

这是我创建角色的方式

CREATE SERVER ROLE [My_Server_Role]
go

GRANT    ALTER ANY LOGIN
        ,ALTER ANY SERVER ROLE
        ,CONNECT SQL
TO [My_Server_Role] 
WITH GRANT OPTION
go

现在我有一个像这样创建的用户(第二个也是同样的方法)

CREATE  LOGIN   JohnSmith
    WITH    PASSWORD = 'MyPassword'

CREATE  USER JohnSmith
FOR     LOGIN JohnSmith

EXEC sp_addsrvrolemember [My_Server_Role], [JohnSmith] 


现在,我的问题是每当 JohmSmith 尝试执行

DENY CONNECT SQL TO [ThatOtherUser] 

我已阅读将WITH GRANT OPTIONS 添加到CREATE ROLES 语句,但它没有帮助。我可以将CONTROL SERVER 添加到MyServerRole 但随后用户获得了过高的权限并且能够共同控制其他数据库

有人可以帮忙吗?也许我把这个想法搞砸了。我的观点是仅授予用户(角色)对一个数据库的权限,而且我不想使用内置服务器和数据库角色

【问题讨论】:

    标签: sql sql-server sql-server-2012


    【解决方案1】:

    您有两种解决方案:

    1) 为角色定义AUTHORIZATION (See here)

    CREATE SERVER ROLE role_name [ AUTHORIZATION server_principal ]

    角色名称
    是要创建的服务器角色的名称。

    授权 server_principal
    是拥有新服务器角色的登录名。如果未指定登录名,则服务器角色将归执行CREATE SERVER ROLE 的登录名所有。

    服务器主体将能够授予该角色。

    2) 使用CONTROL ON ROLE

    您可以将其添加到GRANTed 权限列表中。查看this document中的数据库角色权限部分:

    【讨论】:

      【解决方案2】:

      来自DENY server permissions

      需要 CONTROL SERVER 权限或安全对象的所有权。如果您使用 AS 子句,则指定的主体必须拥有权限被拒绝的安全对象。

      因此,似乎因为您的服务器角色没有CONTROL SERVER,所以他们不能拒绝自己连接。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-08
        • 1970-01-01
        • 2021-12-21
        • 1970-01-01
        • 1970-01-01
        • 2016-04-06
        • 2021-02-20
        相关资源
        最近更新 更多