Conecte-se ao SQL Server com autenticação do Windows em um domínio diferente


74

Estou tentando conectar-me a um SQL Server remoto em uma VPN em um domínio diferente. Quando insiro o nome do servidor no SQL Server e escolho Parâmetros de conexão adicionais para adicionar algumas coisas extras necessárias à minha escola:

Integrated Security=SSPI; User ID=DOMAIN\username; Password=Password

Estou tendo o erro a seguir:

Falha na autenticação. O logon é de um domínio não confiável e não pode ser usado com autenticação do Windows.


O único problema com a solução do Windows Credential Manager é que, se você tem um monte de banco de dados, é necessário ter uma entrada para cada um e atualizá-los sempre que atualizar suas senhas de domínio. Para algumas pessoas, isso pode ser a cada 30 a 60 dias.
— smehaffie

Este post está um pouco relacionado.
— RBT

@smehaffie, você pode facilmente usar scripts e o comando "cmdkey / add" para manter suas senhas - ele também é atualizado.
— Mister Magoo 28/08

Respostas:


70

Você está tentando passar credenciais do Windows em texto sem formatação a partir da cadeia de conexão de um aplicativo. Simplesmente não é assim que a autenticação do Windows funciona e derrota amplamente o objetivo.

Você também não pode simplesmente criar o mesmo nome de usuário com a mesma senha em seu próprio domínio e esperar que funcione magicamente. O nome do domínio ainda faz parte da validação - sua máquina precisa fazer parte do domínio ou o domínio em que ela está deve ser confiável pelo domínio da escola.

A única solução alternativa que conheço é o SSMS, e esse é o runas /netonlytruque descrito nesta resposta . Isso engana o Windows a iniciar o SSMS como o logon especificado, e não o seu próprio (isso não é algo que você pode definir na caixa de diálogo Propriedades de conexão do SSMS, é como você precisa iniciar o SSMS a partir da linha de comando ou de um atalho):

runas /netonly /user:domain\username "C:\path_to\ssms.exe"

Isso solicitará sua senha no domínio remoto. Ele vai olhar como ele está usando suas credenciais locais do Windows, mas não é .

É possível que funcione também com o Visual Studio, mas eu realmente não sei.

Então, suas opções são:

  • a universidade permite que você associe sua máquina ao domínio
  • a universidade adicione seu domínio como confiável
  • tem uma caixa de salto dentro da VPN que permite fazer RDP e usar ferramentas conectadas diretamente à máquina do SQL Server
  • use autenticação SQL
  • tente o runas /netonlytruque com o Visual Studio
  • basta usar o runas /netonlytruque com SSMS

A runascoisa não trabalhar com o Visual Studio.
— Daniel Hutmacher

Existe uma maneira de imitar esse comportamento sem o prompt de comando?
— Gilles Lesire

11
@Gilles você pode fazer um arquivo de lote e clique duas vezes no arquivo de lote, ou você poderia usar essa seqüência e criar um atalho talvez
— Aaron Bertrand

103

Existe outra maneira, que agora uso preferencialmente ao runas /netonlymétodo.

Você pode adicionar as credenciais ao seu perfil no Windows usando o Credential Manager encontrado no painel de controle do Windows.

  1. Abra o Gerenciador de credenciais
  2. Clique em "Adicionar uma credencial do Windows"
  3. Preencha o campo "endereço da Internet ou de rede" com o nome e o número da porta da instância SQL para a qual você deseja armazenar credenciais.

    Exemplo: UniServer:1433(1433 é a porta padrão, você pode precisar de uma porta diferente, especialmente se estiver se conectando a uma instância nomeada)

  4. Preencha o "Nome de usuário" (não se esqueça de incluir o domínio, por exemplo MYDOMAIN\MYUSER)
  5. Preencha a "Senha"
  6. Clique OK

Se você tiver o nome do servidor, a porta e os detalhes de login corretos, agora poderá usar a Autenticação do Windows na maioria das ferramentas clientes, SSMS, Excel, qualquer que seja. Todos eles usarão as credenciais armazenadas.

Dica: Às vezes, você precisa usar o FQN para o servidor ao adicionar as credenciais. por exemplo UniServer.UniDomain.org:1433, tudo depende dos detalhes da sua rede.

Aqui está uma rápida demonstração do método: http://youtu.be/WiVBPsqB9b4

É uma captura de tela minha tentando (e falhando) conectar-me a um SQL Server executando em uma VM da minha área de trabalho, adicionando as credenciais necessárias e tentando novamente - com êxito.

Dica: use o comando "cmdkey / add" para criar scripts e atualizar credenciais armazenadas.


Interessante! Parece depender do que a máquina cliente pensa que a máquina remota é chamada, e não do que realmente pode ser chamada. Eu coloquei uma entrada inventada ("verysillytest.mwardm") no meu arquivo host para o endereço IP (como costumamos acessar de fora de domínios) e configurei a credencial no nome "verysillytest.mwardm: 1433 ". Posso conectar-me com alegria (a partir de um pequeno aplicativo chamado Query Express) usando o nome do host ou o endereço IP.
— mwardm

@mwardm sim, é por isso que recomendo usar ping ou nslookup, pois ele informará o nome exatamente como você precisa, incluindo detalhes em maiúsculas / minúsculas.
— Mister Magoo 28/10

Ah, bem, "ping -a" não me deu nada e o nslookup não funcionou (imediatamente) porque eu não estava usando os servidores DNS do domínio. Não se preocupe, na verdade prefiro a flexibilidade de apenas saber o endereço IP (e o login) e poder criar meu próprio nome!
— mwardm

2
Incrível, funciona! Eu apenas me pergunto - ele deveria funcionar assim ou é um bug ou um design falhar no lado do SQL Server? A Microsoft ou pessoas da Microsoft anunciam em todos os lugares que você precisa ter uma máquina conectada ao domínio; caso contrário, não há como se conectar ao SQL Server configurado para aceitar apenas as credenciais do domínio.
— Dawid Ferenczy Rogožan

BTW, eu diria que essa resposta deve ser marcada como aceita, pois parece ser uma solução real e a outra resposta é mais uma solução alternativa.
— Dawid Ferenczy Rogožan
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.