问题描述
我有一个名为ApplicationUsers
的数据库角色。我想授予该角色成员同一角色的ALTER
权限,以便现有成员可以添加或删除其他成员。这是我尝试过的sql语句:
GRANT ALTER ON [dbo].[ApplicationUsers] TO [ApplicationUsers]
我收到以下错误:
找不到对象'ApplicationUsers',因为它不存在或您没有权限。
我可以确认我正在从执行GRANT
命令的用户帐户是否具有所需的权限。如果我运行fn_my_permissions(NULL,'DATABASE')
,则返回的值之一是ALTER ANY ROLE
。
我已经仔细检查了该角色是否存在以及它的拼写是否正确。这是SSMS的片段:
我想念什么?
编辑:
多亏了David的回答,我才成功执行了命令,但实际上似乎没有用。 ApplicationUsers
组的成员似乎仍被拒绝添加其他成员的权限。在SSMS中查看角色的属性时,缺少权限:
这是在运行以下命令之后:
GRANT ALTER ON ROLE::ApplicationUsers TO ApplicationUsers WITH GRANT OPTION
解决方法
允许角色成员添加和删除成员或重命名角色是不寻常的。但您可以这样做:
GRANT ALTER ON role::[ApplicationUsers] TO [ApplicationUsers]
但是看起来这是不允许的,并且授予无声地执行任何操作。而是引入一个ApplicationAdmins角色,并向ApplictionUsers授予ALTER。例如
create role ApplicationUsers
create role ApplicationAdmins
GRANT ALTER ON role::ApplicationUsers TO ApplicationAdmins
grant select to ApplicationUsers
select p.name grantee,perm.*
from sys.database_permissions perm
join sys.database_principals p
on perm.grantee_principal_id = p.principal_id
where class_desc = 'DATABASE_PRINCIPAL'
go
alter role ApplicationUsers add member ApplicationAdmins
alter role ApplicationAdmins add member user1
go
create table ApplicationTable(id int)
go
execute as user='user1'
alter role applicationusers add member user2
select * from ApplicationTable
revert