Estou logado como sa (verifiquei duas vezes na minha sessão com select suser_name()).
Eu criei um login cards_login_generator
e o usuário com o mesmo nome no banco de dados [cards]. Eu quero permitir que este usuário crie logins, usuários e os torne membros de db_datareader
e db_datawriter
.
Eu concedi ALTER ANY LOGIN/USER
e funciona. Agora chega a hora de:
grant alter on role::[db_datareader] to cards_login_generator
que falha com:
Não é possível encontrar a função 'dbo.db_datareader' porque ela não existe ou você não tem permissão.
Pesquisei exaustivamente, mas não consigo imaginar nenhuma razão para esta mensagem. A função é uma função de banco de dados (provavelmente não pode ser excluída?) e eu sou sa, portanto, nenhum problema de permissão pode ser o caso. Por que isso falha?
Microsoft SQL Server 2017 (RTM-GDR) (KB5014354) - 14.0.2042.3 (X64)
Conforme mencionado nesta resposta , modificar a associação em uma função de banco de dados fixa requer que a entidade modificadora seja um membro da
db_owner
função de banco de dados fixa.Aqui está um banco de testes para mostrar como isso funciona. Primeiro, criaremos um login que tenha permissão para criar outros logins, depois adicionaremos esse login ao nosso
[Test]
banco de dados, onde criaremos um usuário para o login e concederemos a esse usuário permissão para alterar usuários e funções.Em seguida, representaremos o novo logon e tentaremos criar um novo logon e usuário e adicionaremos esse usuário às funções de banco de dados fixas
db_datareader
edb_datawriter
:As
ALTER ROLE
instruções acima falham, relatando este erro:No entanto, se tornarmos o
[user_creator_test]
membro dadb_owner
função em nosso[Test]
banco de dados e executarmos novamente o teste, ele será bem-sucedido:Esta consulta exibe a associação da função de banco de dados:
Resultados:
Limpar:
De acordo com o documento ALTER ROLE , para poder alterar a associação de uma função de banco de dados fixa, um usuário também deve ser membro do
db_owner
banco de dados: