无法授予ALTER对数据库角色的权限?

问题描述

我有一个名为ApplicationUsers数据库角色。我想授予该角色成员同一角色的ALTER权限,以便现有成员可以添加删除其他成员。这是我尝试过的sql语句:

GRANT ALTER ON [dbo].[ApplicationUsers] TO [ApplicationUsers]

我收到以下错误

找不到对象'ApplicationUsers',因为它不存在或您没有权限

我可以确认我正在从执行GRANT命令的用户帐户是否具有所需的权限。如果我运行fn_my_permissions(NULL,'DATABASE'),则返回的值之一是ALTER ANY ROLE

我已经仔细检查了该角色是否存在以及它的拼写是否正确。这是SSMS的片段:

Image from SSMS

我想念什么?

编辑:

多亏了David的回答,我才成功执行了命令,但实际上似乎没有用。 ApplicationUsers组的成员似乎仍被拒绝添加其他成员的权限。在SSMS中查看角色的属性时,缺少权限:

Permissions shown in 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