Comecei a bloquear as permissões em nosso ambiente de teste removendo a permissão sysadmin de contas genéricas. A primeira conta, usada por vários desenvolvedores, é um login SQL local. Dei à conta a função db_owner no banco de dados. O desenvolvedor informa que não pode mais criar stored procedures.
Eu validei que isso é verdade nesta instância específica do SQL 2014, não posso reproduzi-lo em nenhum outro lugar. Eu fiz tudo o que posso pensar para consertar isso. A melhor pista que tenho é que criei um novo login SQL e dei a ele db_owner no mesmo banco de dados. Ele também não pode criar um procedimento. O login original não pode criar procedimentos em outros bancos de dados do usuário, mesmo que tenha db_owner .
A tentativa de criar um procedimento fornece:
Msg 262, Nível 14, Estado 18, Procedimento TheProcedure, Linha 30
Permissão CREATE PROCEDURE negada no banco de dados 'DBTest'.
A mensagem de erro está correta, CREATE PROCEDURE
não aparece para o usuário, mesmo depois de atribuí-la explicitamente. O usuário pode alterar qualquer procedimento. A criação de UDF recebe um erro semelhante:
Permissão CREATE FUNCTION negada no banco de dados...
Alguém tem alguma ideia do que pode estar acontecendo?
Quando eu faço um:
select * from fn_my_permissions(null, 'DATABASE')
CREATE PROCEDURE
não está listado. Verifiquei se há algum DENY
em sys.permissions , não há nenhum.
A seguinte consulta:
SELECT * FROM fn_my_permissions('xyz', 'USER');
retorna:
IMPERSONATE, VIEW DEFINITION, ALTER, CONTROL