Estou usando o SQL Server 2016
Eu tenho um procedimento armazenado básico usando execute como gostaria de executar, mas ocorre este erro quando tento (os nomes foram anonimizados):
Msg 15404, Nível 16, Estado 19, Procedimento usp_execueastest, Linha 0 [Batch Start Line 2]
Não foi possível obter informações sobre o grupo/usuário do Windows NT 'MyCompany\A.Smith', código de erro 0x54b.
Aqui está o meu procedimento armazenado:
CREATE PROCEDURE [dbo].[usp_executeastest]
WITH EXECUTE AS 'dbo'
AS
BEGIN
SELECT * FROM [dbo].[TestTable1]
END
Agora, o usuário do banco de dados 'dbo' está mapeado para o login 'MyCompany\A.Smith', então isso explica porque a mensagem de erro menciona MyCompany\A.Smith.
Eu tentei executar este procedimento fazendo login como vários usuários, incluindo login como 'MyCompany\A.Smith' que é mapeado para o usuário dbo, e a mesma mensagem de erro aparece todas as vezes.
Então, por que nenhum usuário pode executar esse procedimento armazenado?
Se você colocar dbo , ele irá olhar para o dbowner do banco de dados, no seu caso (eu acho) 'MyCompany\A.Smith'
Certifique-se de que o usuário que deseja usar na cláusula execute as faça parte de sys.database_principals ou sys.server_principals .
Caso contrário, você pode corrigir esse problema alterando o proprietário do banco de dados que você usa.
Primeiro, verifique o proprietário atual:
Se for 'MyCompany\A.Smith', seu procedimento não será executado.
Então, altere o proprietário, por exemplo:
E vai funcionar.