Eu tenho um trabalho chamado @test_credentials que executa a seguinte consulta
select * from openquery(SERVER2,
'select USER_NAME(),* from openquery(SERVER1,''SELECT USER_NAME() '')')
e envia esses resultados para um arquivo.
Trabalho '@test_credentials': Etapa 1, 'test_credentials': começou a executar 31/08/2015 17:53:45
convidado LinkedServerUser
(1 linha(s) afetada(s))
- As definições de servidor vinculado para ambos
SERVER1
eSERVER2
estão usando o linkedserveruser para efetuar login um no outro (opção de contexto de segurança). - Ambas as definições de servidor vinculado são definidas com as mesmas opções
- A conta de usuário linkedserveruser existe em ambos os servidores e não está desativada de forma alguma.
- A conta de serviço que executa o AGENT é idêntica para
SERVER1
eSERVER2
.
Então minha pergunta é esta:
Por que o SQL Server Agent está fazendo login como convidado no SERVER2 ao executar este trabalho?
Pessoalmente , eu tentaria usar ORIGINAL_LOGIN() em vez de USER_NAME(). USER_NAME() retorna o principal do banco de dados ou usuário associado ao seu login no banco de dados ao qual você está se conectando. Nesse caso, você provavelmente está se conectando
master
em ambos os casos. Se LinkedServerUser não tiver um login específicomaster
,SERVER2
você veráGUEST
.Se por outro lado você usar
ORIGINAL_LOGIN()
, obterá o principal do servidor conectado, que provavelmente será LinkedServerUser em ambos os casos.