我遇到了为我创建的服务器级角色授予适当权限的问题。每当角色中的用户尝试向其他用户授予权限时,我就会收到标题中的错误。当我授予角色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
但是用户获得的权限太高,并且可以共同控制其他数据库
有人可以帮忙吗?也许我搞砸了这个想法。我的观点是仅将用户(角色)授权给一个数据库加上我不想在服务器和数据库角色中使用构建
答案 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)
需要CONTROL SERVER权限或安全保护的所有权。如果使用AS子句,则指定的主体必须拥有拒绝权限的安全性。
因此,似乎因为您的服务器角色没有CONTROL SERVER
,他们无法拒绝自己连接。