Parece que a ALTER
permissão concedida no nível do banco de dados permite que o principal ao qual foi concedida crie entidades de segurança no banco de dados.
Considere o exemplo abaixo:
/* 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')
O usuário MyUser é capaz de criar um usuário, uma função e então adicionar o usuário à função, apenas com permissões ALTER.
A documentação para estados ALTER
ALTERAR
Confere a capacidade de alterar as propriedades, exceto a propriedade, de um determinado protegível. Quando concedido em um escopo, ALTER também concede a capacidade de alterar, criar ou descartar qualquer protegível contido nesse escopo. Por exemplo, a permissão ALTER em um esquema inclui a capacidade de criar, alterar e descartar objetos do esquema.
A documentação para CREATE USER estados
Requer permissão ALTER ANY USER no banco de dados.
A documentação para estados CREATE ROLE
Requer permissão CREATE ROLE no banco de dados ou associação na função de banco de dados fixa db_securityadmin.
portanto, nenhuma documentação parece descrever o comportamento que estou vendo acima. Isso é um bug, ou estou perdendo alguma coisa?
USER é um protegível no escopo do banco de dados (consulte a tabela no doc ), portanto, a
CREATE USER
permissão foi conferida porGRANT ALTER
no banco de dados que o contém.