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.

fxuser
fonte
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
Aaron Bertrand
fonte
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.

Senhor Magoo
fonte
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