SQL Server – Erro ao utilizar OPENROWSET: Access to the remote server is denied because no login-mapping exists

Olá pessoal,
Boa noite!

Neste post vou falar sobre um erro que ocorre ao tentar utilizar o comando OPENROWSET ou OPENQUERY para acessar dados de um servidor remoto onde o linked server utilizado não tenha um usuário fixo e o usuário da conexão não pertença à role sysadmin, o que representa a maioria dos casos. (mais um erro reportado pelo Henrique Mauri.. kkk)

Msg 7416, Level 16, State 2, Line 22
Access to the remote server is denied because no login-mapping exists.

Esse erro é muito parecido com o cenário de “double hop” que ocorre no Kerberos, onde uma aplicação cliente está no computador 1, o BizTalk RFID está no computador 2, e o recurso que requer as credenciais (como por exemplo, um servidor SQL Server RFIDsink) está no computador 3, mas nesse post vou mostrar uma solução apenas utilizando o SQL Server. Caso você queira se aprofundar na solução do problema utilizando o Kerberos, dê uma lida nesse post.

Simulando o erro no seu ambiente

Uma forma prática de simular esse problema é criando um novo linked server com o parâmetro @useself=N’True’, informando que o mesmo usuário será utilizado nas duas pontas da conexão, que será o usuário atualmente conectado, e depois tentar utilizar esse linked server.

Como já mencionado acima, essa mensagem de erro só aparece quando o usuário que está executando a query NÃO faça parte da role sysadmin e o usuário da conexão esteja utilizando autenticação SQL Server (ao invés da Autenticação Windows).

SQL Server - Access to the remote server is denied because no login-mapping exists.

Como resolver o problema

Pelo que eu citei mais acima, está claro que se o usuário que está realizando a conexão for adicionado à role sysadmin, esse problema irá parar de ocorrer, mas eu nem considero isso uma solução. Conceder privilégios (ainda mais de sysadmin) só para parar mensagens de erro nunca é solução.

Também não sou muito a favor de fixar o usuário e senha no Linked Server, de forma que todos os usuários com acesso ao servidor possam utilizar esse Linked Server de forma irrastreável. Sempre marque a opção “Be made using the login’s current security context” no LinkedServer.

SQL Server - Linked Server Properties Security

Uma boa solução seria utilizar Autenticação Windows, mas como a equipe de desenvolvimento da empresa onde ocorreu esse problema não iria nem cogitar a hipótese de alterar a autenticação de todas as aplicações para Autenticação Windows, a melhor solução que eu encontrei para esse problema foi criar um novo usuário apenas para utilizações do OPENROWSET e OPENQUERY, com acessos restritos apenas para as consultas realizadas com esses dois comandos (que são bem poucas) e fixar esse usuário e senha no OPENROWSET, ficando dessa forma:

SQL Server - Access to the remote server is denied because no login-mapping exists solved

E é isso aí, pessoal!
Se você souber alguma solução diferente para esse problema, deixe sua sugestão nos comentários.

Abraço e até mais!

SQL, sql server, sql server 2008, sql server 2008 R2, Oracle, Oracle Database, Oracle 11g, Oracle 10g, Oracle 12c, MySQL, Firebird, Consultoria, Consultor, Programador, Programação. Desenvolvedor, Analista de Sistemas, DBA, Criação de website, Criação de Sistema Web, Vitória, Vila Velha, Guarapari, Espírito Santo, ES, Consultoria SQL em VItória, Treinamento, Curso, Prestação de serviço, prestar serviço, freelancer, freela, banco de dados, consultoria em banco de dados, consultor de banco de dados

Deixe uma resposta