Habilitar conexões remotas para o SQL Server Express 2012

403

Acabei de instalar o SQL Server Express 2012 no meu servidor doméstico. Estou tentando conectar a ele no Visual Studio 2012 no meu PC de mesa e obtendo repetidamente o erro conhecido:

Ocorreu um erro relacionado à rede ou à instância ao estabelecer uma conexão com o SQL Server. O servidor não foi encontrado ou não estava acessível. Verifique se o nome da instância está correto e se o SQL Server está configurado para permitir conexões remotas. (provedor: provedor de pipes nomeados, erro: 40 - não foi possível abrir uma conexão com o SQL Server)

O que eu fiz para tentar corrigir isso:

  • Execute o SQL Server Configuration Manager no servidor e ative o SQL Server Browser
  • Adicione uma exceção do Firewall do Windows no servidor para TCP, portas 1433 e 1434 na sub-rede local.
  • Verifique se eu tenho um logon na instância do SQL Server para o usuário no qual estou conectado como na área de trabalho.
  • Verifique se estou usando a autenticação do Windows na instância do SQL Server.
  • Reinicie repetidamente o SQL Server e todo o servidor dang.
  • Puxe todo o meu cabelo.

Como posso obter o SQL Server 2012 Express para permitir conexões remotas !?

Ryan Lundy
fonte
7
Eu resolvi ativando o serviço Navegador do SQL Server: D. Obrigado por publicá-lo.
alansiqueira27
11
Desbloquear a porta UDP 1433 me ajudou!
Michael
11
E se você estiver usando uma VM do Azure, não esqueça de abrir a porta também pelo portal de gerenciamento do Azure (que atua como um firewall externo para o firewall da própria VM ...). Assim: stackoverflow.com/questions/34251382/…
jleach
Para aqueles que querem saber onde o SQL Server Configuration Manager desapareceu no versões mais recentes, na cabeça durante aqui
StuartLC

Respostas:

731

Bem, feliz que eu perguntei . A solução que finalmente descobri estava aqui:

Como faço para configurar o SQL Server Express para permitir conexões remotas TCP / IP na porta 1433?

  1. Execute o SQL Server Configuration Manager.
  2. Vá para Configuração de rede do SQL Server> Protocolos para SQLEXPRESS.
  3. Verifique se o TCP / IP está ativado.

Até agora, tão bom e totalmente esperado. Mas então:

  1. Clique com o botão direito do mouse em TCP / IP e selecione Propriedades .
  2. Verifique se, em IP2, o Endereço IP está definido como o endereço IP do computador na sub-rede local.
  3. Role para baixo até IPAll.
  4. Verifique se as portas dinâmicas do TCP estão em branco . (O meu foi definido para um número de porta de 5 dígitos.)
  5. Verifique se a porta TCP está definida como 1433 . (O meu estava em branco.)

(Além disso, se você seguir estas etapas, é não necessário habilitar o SQL Server Browser e você só precisará permitir a porta 1433, não 1434.)

Essas cinco etapas extras são algo que não me lembro de ter feito em uma versão anterior do SQL Server, Express ou de outra forma. Eles parecem ter sido necessários porque estou usando uma instância nomeada (myservername \ SQLEXPRESS) no servidor em vez de uma instância padrão. Veja aqui:

Configurar um servidor para escutar em uma porta TCP específica (SQL Server Configuration Manager)

Ryan Lundy
fonte
7
Se o SQL Server Express não for a única instância, talvez seja necessário desassociar a porta 1433 em outras instâncias. Eu tinha uma instância padrão 2008 R2 (MSSQLSERVER) e a única maneira de me conectar a eles de fora é atribuir a porta 1433 à instância de 2012 (conforme acima) e alterar as atribuições de porta da instância padrão mais antiga para TCP Dynamic Portas = "0" e Porta TCP = "" (em branco). Fazer o contrário deu acesso apenas à instância padrão.
Robert Calhoun
17
Essa IPAllconfiguração foi o conselho da SALVADOR! O meu era como o seu ...: D
Leniel Maccaferri
18
Caso ajude mais alguém ... isso ajudou, mas ainda não consegui me conectar até iniciar o serviço Navegador do SQL Server. (Nota: eu tive que entrar no aplicativo "Serviços" do Windows para fazer isso, porque o tipo de inicialização do serviço Navegador do SQL Server foi "Desabilitado" por algum motivo. Alterou o Tipo de Inicialização para "Automático", iniciou o serviço e foi então pode conectar.)
mercurial
9
No Windows 8 e SQL 2012 Express SP1 instalado na instância do SQLEXPRESS, eu tinha que definir portas dinâmicas para algo que não estivesse em branco (se você a excluiu, defina como 0, ela recalculará uma nova porta aleatória para você) E também abrir AMBOS TCP Regras de porta de entrada 1433 e UDP 1434 no painel de controle do Firewall avançado. Quando as portas dinâmicas estavam em branco, o SQL Server ficou travado na inicialização.
Tony Muro
10
Só queria dizer obrigado e voto positivo. Você me salvou muito tempo. Você se importa de atualizar sua postagem com a sintaxe de conexão correta? Eu preciso usar myserver\sqlexpress,[portnumber]sem os suportes. Observe que é ,e não:
Marco
105

A maneira correta de conectar-se ao SQL Server remoto (sem abrir a porta UDP 1434 e ativar o SQL Server Browser) é usar ip e porta em vez da instância nomeada .

Usar ip e port em vez da instância nomeada também é mais seguro, pois reduz a área da superfície de ataque.

Talvez 2 imagens falem 2000 palavras ...

Este método usa a porta especificada (é nisso que a maioria das pessoas quer que eu acredite).

insira a descrição da imagem aqui

Este método requer a abertura da porta UDP 1434 e o SQL Server Browser em execução.

insira a descrição da imagem aqui

Rosdi Kasim
fonte
Você pode elaborar o que quer dizer dizendo que esta é a maneira "correta" de fazer isso?
precisa
3
@ Kyralessa Ha! ... agora que estou sóbrio novamente depois de 4-5 horas puxando os cabelos tentando me conectar à minha instância remota, provavelmente devo explicar que 'correto' aqui deve ser lido do meu contexto. É 'incorreto' conectar-se usando o nome da instância, pois não habilitei o SQL Server Browser.
Rosdi Kasim
Eu adicionei alguns esclarecimentos à minha resposta para evitar mal-entendidos.
Rosdi Kasim
11
Obrigado;) Quando você não tem acesso para executar o serviço do navegador, precisa especificar a porta.
Arman McHitarian #
3
mais 1 para mostrar que a MS usa vírgula em vez de colunas como separador para o número da porta
Jorj
32

Mais uma coisa...

A Kyralessa fornece ótimas informações, mas tenho uma outra coisa a acrescentar onde fiquei perplexo mesmo após este artigo.

Em Configuração de rede do SQL Server> Protocolos para servidor> TCP / IP ativado. Clique com o botão direito do mouse em TCP / IP e escolha propriedades. Sob os endereços IP, você precisa definir Ativado como Sim para cada tipo de conexão que você está usando.

insira a descrição da imagem aqui

Pete
fonte
18

Você pode usar isso para resolver este problema:

Vá para INICIAR> EXECUTAR e execute CLICONFG.EXE.

O protocolo de pipes nomeados será o primeiro da lista. Remova-o e promova o TCP / IP.

Teste o aplicativo completamente.

Espero que isso ajude.

Ageu
fonte
Uau, que jóia ... obrigado. Nunca soube que isso existia.
Louis van Tonder
11
Isso configura o CLIENTE para usar TCP / IP, não o servidor.
mcr
OMG, funciona !! acabou de fazer login para votar nesta resposta. obrigada
Aki
15

Você também pode definir

Ouça tudo a NO

na caixa de diálogo do protocolo e depois no endereço IP IP1 (digamos)

definido como Sim,

defina o seu endereço IP,

defina o TCP Dynamic como Blank e

Porta TCP para 1433 (ou o que for)

johnroster
fonte
Fazer isso no Windows 8.1 com o SQL 2012 Express SP1 instalado fez com que o SQL
travasse
Defino todas as entradas IP 1, 2, ..., para habilitado + ativo, dinâmico apagado, porta apagada e defino a porta IPAll como 1433, depois tive que adicionar regras para abrir o TCP 1433 e o UPD 1434 no firewall (1434 não é necessário se não estiver usando o nome, mas apenas o número da porta).
Mordachai 04/04
11

Este artigo me ajudou ...

Como habilitar conexões remotas no SQL Server

Tudo no SQL Server foi configurado, meu problema foi que o firewall estava bloqueando a porta 1433

JGilmartin
fonte
Todo mundo sabe, ou facilmente encontra a configuração de portas permitidas do Azure. Não me passou pela cabeça que a porta pode estar bloqueada pelo firewall da VM do WINDOWS. Graças + 1.
2b77bee6-5445-4c77-b1eb-4df3e5
11

Eu tive esse problema recentemente. 2015 ago

Resolvido abrindo o SQL Server Configuration Manager

  • Configuração de rede do SQL Server -> protocolos para SQLEXPRESS
  • Propriedades na guia TCP / IP -> Endereços IP
  • Tudo permanece padrão, apenas configure IPALL: TCP Port para 1433

Pode conectar-se ao SQL Server Manager na máquina: [hostaddress], 1433

Exemplo:

insira a descrição da imagem aqui

DDan
fonte
6

Na minha instalação do SQL Server 2012 Developer Edition, instalada com configurações padrão, eu apenas precisei carregar o Gerenciador de Configuração do SQL Server -> Configuração de Rede do SQL Server -> Protocolos para MSSQLSERVER e alterar o TCP / IP de Desativado para Ativado.

Phil
fonte
11
Nota rápida: para mim, isso não funcionou. O IP errado estava lá por algum motivo. No entanto, as etapas de Kyralessa fizeram o truque, pois invocaram a atualização do IP.
precisa saber é o seguinte
Isso funciona para um dos meus servidores, mas não para o outro.
Cheny
5

Eu tive que adicionar uma regra de porta de entrada do firewall para abrir a porta UDP 1434. Este é o navegador do Sql Server.

tom redfern
fonte
3

Eu prefiro o modo "Rosdi Kasim", pois isso não requer configuração de detalhes no IP.

Definitivamente vou esquecê-lo novamente quando tentar instalar outro servidor novamente.

Mantenha o Simple Stupid (KISS) simplesmente ativando o serviço Sql Server Browser e adicione o \ SQLEXPRESS atrás do IP ao conectar o servidor.

O uso direto de IP sem "\ SQLEXPRESS" foi meu ponto de falha, pois não usa a porta padrão.

Obrigado.

Estrangeiro
fonte
3

Eu tive o mesmo problema com o SQL Server 2014 instalado localmente instância nomeada. Conectar usando o FQDN\InstanceNamefalharia, enquanto conectar usando apenas o meu hostname\InstanceNamefuncionou. Por exemplo: conectando usando mycomputername\sql2014funcionou, mas usando mycomputername.mydomain.org\sql2014não. DNS resolvido corretamente, TCP / IP foi ativado no SQL Configuration Manager, adicionadas regras do Firewall do Windows (e depois desativado o firewall para teste para garantir que não estava bloqueando nada), mas nenhum deles corrigiu o problema.

Por fim, tive que iniciar o serviço " SQL Server Browser " no SQL Server e isso corrigiu o problema de conectividade.

Eu nunca havia percebido que o serviço Navegador do SQL Server realmente ajudava o SQL Server a fazer conexões; Fiquei com a impressão de que ele simplesmente ajudou a preencher as listas suspensas quando você clicou em "procurar mais" servidores para se conectar, mas na verdade ajuda a alinhar as solicitações do cliente com o número da porta correto a ser usado, se o número da porta não for atribuído explicitamente (semelhante como as ligações do site ajudam a aliviar o mesmo problema em um servidor Web IIS que hospeda vários sites).

Este item de conexão foi o que me deu a pista sobre o serviço Navegador do SQL Server: https://connect.microsoft.com/SQLServer/feedback/details/589901/unable-to-connect-on-localhost-using-fqdn-machine- nome

  • quando você usa wstst05 \ sqlexpress como um nome de servidor, o código do cliente separa o nome da máquina do nome da instância e o wstst05 é comparado com o nome netbios. Não vejo problema em corresponder e a conexão é considerada local. A partir daí, recuperamos as informações necessárias SEM entrar em contato com o Navegador SQL e conectamos à instância SQL via Memória compartilhada sem nenhum problema.
  • quando você usa wstst05.capatest.local \ sqlexpress, o código do cliente falha na comparação do nome (wstst05.capatest.local) com o nome netbios (wstst05) e considera a conexão "remota". Isso ocorre por design e, definitivamente, consideraremos melhorar isso no futuro. De qualquer forma, devido a considerar a conexão remota e o fato de ser uma instância nomeada, o cliente decide que precisa usar o SQLBrowser para resolução de nomes. Ele tenta entrar em contato com o SQL Browser em wstst05.capatest.local (porta UDP 1434) e, aparentemente, essa parte falha. Daí o erro que você recebe.

O motivo do serviço "Navegador do SQL Server" do TechNet (ênfase adicionada por mim): https://technet.microsoft.com/en-us/library/ms181087(v=sql.120).aspx

Na seção "Usando o SQL Server Browser":

Se o serviço Navegador do SQL Server não estiver em execução, você ainda poderá se conectar ao SQL Server se fornecer o número da porta correto ou o pipe nomeado. Por exemplo, você pode conectar-se à instância padrão do SQL Server com TCP / IP se estiver executando na porta 1433. No entanto, se o serviço Navegador do SQL Server não estiver em execução, as seguintes conexões não funcionarão :

  • Qualquer componente que tenta se conectar a uma instância nomeada sem especificar totalmente todos os parâmetros (como a porta TCP / IP ou o pipe nomeado) .
  • Qualquer componente que gera ou passa informações de servidor \ instância que posteriormente poderiam ser usadas por outros componentes para se reconectar.
  • Conectando-se a uma instância nomeada sem fornecer o número da porta ou o pipe.
  • DAC para uma instância nomeada ou a instância padrão, se não estiver usando a porta TCP / IP 1433.
  • O serviço de redirecionador OLAP.
  • Enumerando servidores no SQL Server Management Studio, Enterprise Manager ou Query Analyzer.

Se você estiver usando o SQL Server em um cenário cliente-servidor (por exemplo, quando seu aplicativo estiver acessando o SQL Server por uma rede), se você parar ou desabilitar o serviço Navegador do SQL Server, deverá atribuir um número de porta específico a cada instância e escreva o código do aplicativo cliente para sempre usar esse número de porta. Essa abordagem tem os seguintes problemas :

  • Você deve atualizar e manter o código do aplicativo cliente para garantir que ele esteja se conectando à porta apropriada.
  • A porta que você escolher para cada instância pode ser usada por outro serviço ou aplicativo no servidor, fazendo com que a instância do SQL Server fique indisponível.

E mais informações do mesmo artigo da seção "Como o navegador do SQL Server funciona":

Porque apenas uma instância do SQL Server pode usar uma porta ou canal, diferentes números de porta e nomes de canal são atribuídos para instâncias nomeadas, incluindo o SQL Server Express. Por padrão, quando ativada, as instâncias nomeadas e o SQL Server Express são configurados para usar portas dinâmicas, ou seja, uma porta disponível é atribuída quando o SQL Server é iniciado. Se desejar, uma porta específica pode ser atribuída a uma instância do SQL Server. Ao conectar, os clientes podem especificar uma porta específica; mas se a porta for atribuída dinamicamente, o número da porta poderá ser alterado sempre que o SQL Server for reiniciado; portanto, o número da porta correto é desconhecido para o cliente. ... Quando os clientes do SQL Server solicitam recursos do SQL Server, a biblioteca de rede do cliente envia uma mensagem UDP ao servidor usando a porta 1434. O SQL Server Browser responde com a porta TCP / IP ou o pipe nomeado da instância solicitada.

BateTech
fonte
2

Eu tive que adicionar porta via Gerenciador de Configurações e adicionar o número da porta na minha conexão sql [host] \ [nome da instância db], 1433

Observe a (vírgula) entre o nome da instância e a porta

dynamiclynk
fonte
1

Eu tive um problema diferente do que todas as respostas mencionadas até agora!

Eu deveria começar dizendo que o tinha no Visual Studio, e não no SQL Server Express, mas a solução deve ser exatamente a mesma.

Bem, Deus, é realmente muito simples e talvez um pouco tolo. Quando tentei criar um banco de dados e o Visual Studio sugeriu o nome do SQL Server, ele me deu meu nome de usuário do Windows e, como é realmente o nome do servidor, fui para ele.

Na realidade, era realmente o meu nome de usuário do Windows + \SQLEXPRESS. Se você não alterou nenhuma configuração, provavelmente essa também é sua. Se funcionar, pare de ler; esta é a minha resposta. Se não funcionar, talvez o nome seja diferente.

Se, como eu, você tiver esse problema no Visual Studio para verificar qual é o seu, siga estas etapas:

  1. Abra o ícone do SQL Server Management Studio .
  2. Se você não F8vir o servidor (ancorado à esquerda por padrão), pressione ou vá para Exibir -> Pesquisador de Objetos .
  3. Clique com o botão direito do mouse no nome do servidor e escolha Propriedades (O último item)
  4. No canto inferior esquerdo, você pode ver o nome real do seu servidor em " Servidor " (não em Conexão, mas acima dele).

Este é o nome do servidor e é com isso que você deve tentar se conectar! não é o que o Visual Studio sugere!

MasterMastic
fonte
1

No meu caso, o banco de dados estava sendo executado em uma porta não padrão. Verifique se a porta que você está conectando é a mesma que a porta em que o banco de dados está sendo executado. Se houver mais instâncias do servidor SQL, verifique a correta.

Tomas Kubes
fonte
0

Tudo que você precisa fazer é abrir a porta relevante no firewall do servidor.

user1968210
fonte
6
Infelizmente, isso não é "tudo o que você precisa fazer". Existem algumas outras etapas que precisam ser tomadas, conforme descrito na resposta aceita acima.
saluce
2
Na verdade, no meu caso, era tudo o que eu precisava fazer, de modo injustamente marcado e realmente útil.
MagicalArmchair 31/03
11
Adicionar uma regra para abrir a porta 1433 foi o que a corrigiu.
GiddyUpHorsey
Eu acho que é justo dizer que "um monte de coisas tem que estar em alinhamento, o que são necessários passos adicionais para você irá variar"
Mordachai
Eu tive que fazer todo o Kyralessa, e o Pete e este antes de poder obter o Windows 10 servindo SQL.
alfadog67
0

Está tendo problemas para se conectar ao SQL Server?

Tente desconectar o firewall.

Se você pode se conectar com o firewall desconectado, pode haver algumas regras de entrada como "sql service broker", adicione estas regras ao seu firewall:

"SQL ADMIN CONNECTION" TCP PORT 1434

PORTA UDP "SQL ADMIN CONNECTION"

"SQL ANALYSIS SERVICE" TCP PORT 2383

"SQL BROWSE ANALYSIS SERVICE" TCP PORT 2382

"TCP DEBUGGER / RPC" TCP PORT 135

"SQL SERVER" TCP PORT 1433 e outros se você tiver portas dinâmicas

"SQL SERVICE BROKER" PORT TCP 4022

Pau Dominguez
fonte