sql - 授予者没有 GRANT 权限 - 问题

标签 sql sql-server sql-server-2012

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

这是我创建角色的方法

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

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

最佳答案

对此您有两种解决方案:

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

CREATE SERVER ROLE role_name [ AUTHORIZATION server_principal ]

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

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

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

2) 使用控制角色

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

关于sql - 授予者没有 GRANT 权限 - 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22554578/

相关文章:

php - 需要在 php 脚本中编写一个 mySQL 查询,它将随着每次提交 session 中用户输入的变化而自动变化

c# - 根据 db 值在中继器中动态更改标签前景色

sql-server - 如何在 SQL Server 中定义 "complicated"计算列?

sql-server - SQL Server:使用表2中的信息在表1中查找和更新列

sql-server - "Could not complete cursor operation because the set options have changed since the cursor was declared"错误

sql - Count(*) 在每次执行时返回不同的结果

c# - ASP.NET : How to deny a page to be accesed by users and set permissions?

mysql - 查询两个表中的所有记录

sql-server - SQL 服务器 : clustered index slow

sql - 如何在SQL中自动生成像UID12345678这样的唯一ID?