Estou tendo problemas para executar uma função.
Aqui está o que eu fiz:
- Crie uma função usando o SQL Server Management Studio. Foi criado com sucesso.
- Eu tentei executar a função recém-criada e aqui está o que eu recebo:
A permissão EXECUTE foi negada no objeto 'xxxxxxx', banco de dados 'zzzzzzz', esquema 'dbo'.
sql-server
upendra parmar
fonte
fonte
GO
eCreate
emGOCreate
. Outros erros de sintaxe também parecem fornecer esse erro.Respostas:
Parece que você precisa conceder a permissão de execução ao usuário (ou a um grupo do qual ele faz parte) para o procedimento armazenado em questão.
Por exemplo, você pode conceder acesso assim:
fonte
GRANT EXEC TO PUBLIC
para conceder acesso a todos os objetos no banco de dadosA melhor solução que encontrei é criar uma nova função de banco de dados, ou seja
e conceda a permissão executiva dessa função.
Agora, quando você acessa as propriedades do usuário, acessa Mapeamento do Usuário e seleciona o banco de dados em que você adicionou uma nova função, agora a nova função estará visível na associação da função Banco de Dados para: seção
Para mais detalhes, leia o artigo completo
fonte
EXEC sp_addrolemember @rolename = N'db_executor', @membername = N'processAPI'
No Sql Server Management Studio:
apenas vá para
security->schema->dbo
.Clique duas vezes em dbo, clique
permission tab->(blue font)view database permission
e sinta-se à vontade para rolar pelos campos obrigatórios, como"execute".
Ajude a si mesmo a escolher o usogrant
ou osdeny
controles. Espero que isso ajude :)fonte
você precisa executar algo parecido com isto
fonte
[domain\user]
vez de'domain\user'
Isso funcionará se você estiver tentando conceder permissão a usuários ou funções.
Usando o Microsoft SQL Server Management Studio:
fonte
Conceder essa permissão pode ser perigoso, especialmente se o seu aplicativo da Web usar o mesmo nome de usuário.
Agora, o usuário da web (e toda a web) também tem permissão para criar e soltar objetos no seu banco de dados. Pense em injeção SQL!
Eu recomendo conceder privilégios de execução apenas para o usuário específico no objeto especificado da seguinte maneira:
Agora, o usuário myusernameNoquotes pode executar o procedimento storedProcedureNameNoquotes sem outras permissões desnecessárias para seus dados valiosos.
fonte
Você não tem o direito de executá-lo, embora tenha permissões suficientes para criá-lo.
Para obter mais informações, consulte Permissões de objeto GRANT (Transact-SQL)
fonte
Se você tiver problemas como a pergunta acima, relacionada à exceção lançada quando a solução é executada, o problema é a permissão, não concedida adequadamente aos usuários desse grupo para acessar o banco de dados / procedimento armazenado. Tudo o que você precisa é fazer algo como o que eu tenho abaixo, substituindo o meu pelo nome do banco de dados, procedimentos armazenados (função) e o tipo de permissão ou função ou a quem você está concedendo acesso.
/ ****** Objeto: StoredProcedure [dbo]. [GetAllEmployees] Data do script: 27/01/2016 16:27:27 ****** /
fonte
Você pode dar a todos permissão de execução:
"Público" é a função de banco de dados padrão da qual todos os usuários são membros.
fonte
Eu enfrentei o mesmo problema e resolvi dar permissão ao db_owner também para o usuário do banco de dados.
fonte
Se você tornar esse usuário especial para um banco de dados específico, talvez não o configure como db_owner no "mapeamento do usuário" das propriedades
fonte
é melhor modificar as funções de servidor, que foram projetadas para privilégios de segurança. adicione a função de servidor sysadmin ao seu usuário. para maior segurança, você pode ter suas funções de servidor personalizadas. mas essa abordagem fornecerá o que você deseja por enquanto.
Boa sorte
fonte
aqui está como conceder permissão para um usuário não público,
Consulta direta:
Use MyDatabase Grant execute on [dbo].[My-procedures-name] to [IIS APPPOOL\my-iis-pool] Go
fonte