授予者没有GRANT许可 - 问题

时间:2014-03-21 09:17:10

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

我遇到了为我创建的服务器级角色授予适当权限的问题。每当角色中的用户尝试向其他用户授予权限时,我就会收到标题中的错误。当我授予角色priveleges时,我做了一些研究并添加了grant选项,但这没有帮助。我希望保持我的角色权限尽可能低,以执行给定的脚本。

以下是我创建角色的方式

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但是用户获得的权限太高,并且可以共同控制其他数据库

有人可以帮忙吗?也许我搞砸了这个想法。我的观点是仅将用户(角色)授权给一个数据库加上我不想在服务器和数据库角色中使用构建

2 个答案:

答案 0 :(得分:2)

您有两个解决方案:

1)为角色(See here

定义AUTHORIZATION
  

CREATE SERVER ROLE role_name [AUTHORIZATION server_principal]

<强> ROLE_NAME
是要创建的服务器角色的名称。

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

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

2)使用CONTROL ON ROLE

您可以在GRANT ed权限列表中添加它。查看this document中的数据库角色权限部分:

答案 1 :(得分:1)

来自DENY server permissions

  

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

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