似乎ALTER
在数据库级别授予的权限允许被授予权限的主体在数据库中创建安全主体。
考虑下面的例子:
/* setup database */
CREATE DATABASE MyNewDB
GO
USE MyNewDB
GO
/* create a login and user and then grant ALTER permissions */
CREATE LOGIN MyLogin WITH PASSWORD = 'My57r0ngp455w0rd'
CREATE USER MyUser FOR LOGIN MyLogin
GRANT ALTER TO MyUser
GO
/* running as our new user which only has ALTER permissions, create a user and a role */
EXECUTE AS LOGIN = 'MyLogin'
CREATE USER UserCreatedByMyLogin FOR LOGIN SomeOtherLogin
CREATE ROLE RoleCreatedByMyLogin
ALTER ROLE RoleCreatedByMyLogin ADD MEMBER UserCreatedByMyLogin
REVERT
/* verify success */
SELECT USER_NAME(role_principal_id),
USER_NAME(member_principal_id)
FROM sys.database_role_members
WHERE role_principal_id = USER_ID('RoleCreatedByMyLogin') AND
member_principal_id = USER_ID('UserCreatedByMyLogin')
用户 MyUser 能够创建一个用户、一个角色,然后将用户添加到角色中,只有 ALTER 权限。
ALTER状态的文档
改变
赋予更改特定安全对象的属性(所有权除外)的能力。当授予范围时,ALTER 还授予更改、创建或删除该范围内包含的任何安全对象的能力。例如,对模式的 ALTER 权限包括从模式创建、更改和删除对象的能力。
需要对数据库具有 ALTER ANY USER 权限。
CREATE ROLE状态的文档
需要数据库的 CREATE ROLE 权限或 db_securityadmin 固定数据库角色的成员身份。
所以没有任何文档似乎概述了我在上面看到的行为。这是一个错误,还是我错过了什么?
USER 是数据库范围的安全对象(请参阅文档中的表),因此
CREATE USER
权限是由包含的安全对象授予的GRANT ALTER
。