Conexão ASP clássica ao SQL Server 2014 sem TLS 1.0 usando ADODB.Connection

8

Com o TLS 1.0 sendo desativado em nome da conformidade com o PCI, não consigo obter um aplicativo ASP clássico de 32 bits funcionando.

Por recomendações do MS / Stack Exchange, eu instalei:

  1. CU1 do SQL Server 2014 SP1
  2. .NET Framework 4.6

Isso colocou nossos aplicativos ASP.NET / SSMS em execução. Mas nosso aplicativo ASP clássico, que usa um ADODB.Connectionobjeto, não está funcionando.

Eu tentei uma cadeia de conexão que usa Provider=SQLNCLI11;, mas isso também não parece ajudar. O provedor de memória compartilhada ainda está reclamando de nada estar do outro lado do canal. Mensagem de erro:

Erro do Microsoft SQL Server Native Client 11.0 '80004005'

Provedor de memória compartilhada: nenhum processo está na outra extremidade do canal.

Eu também tentei usar pipes nomeados com a cadeia de conexão Provider=SQLNCLI11;Server=np:\\.\pipe\MSSQL$SQLEXPRESS\sql\query;Database=northwind;Trusted_Connection=Yes;e recebi esta mensagem de erro:

Erro do Microsoft SQL Server Native Client 11.0 '80004005'

Fornecedor de pipes nomeados: nenhum processo está na outra extremidade do pipe.

Existe um patch para o ADODB que eu deva estar ciente? Devo considerar o uso de pipes nomeados de alguma outra maneira ou algo semelhante? (embora eu esteja um pouco confuso sobre o motivo pelo qual a memória compartilhada não funciona, independentemente das configurações do TLS)


Atualizações dos comentários:

O servidor web e o SQL Server estão na mesma caixa.

É uma instância nomeada SQLExpress. A cadeia de conexão que trabalha com o TLS 1.0 ativado é:

"Driver={SQL Server}; Server=.\SQLExpress; Database=northwind; Trusted_Connection=Yes; Integrated_Security=True;"

Eu também tentei:

"Provider=SQLNCLI11; Server=.\SQLExpress; Database=northwind; Trusted_Connection=Yes;"

Nem funciona quando o TLS 1.0 estiver desativado. Eu sei que Trusted_Connection / Integrated_Security é redundante, mas mexer com isso também não parece ajudar.

Alternei a habilitação, desabilitação e a ordem para TCP e pipes nomeados. O nome do canal usado na cadeia de conexão acima é diretamente da Configuração do servidor para essa instância. Também tentei desabilitar a Memória compartilhada para garantir que os pipes nomeados estejam funcionando. Eu não tentei o TCP (como se a memória compartilhada não funcionasse por causa do TLS, por que o TCP?) A memória compartilhada e os pipes nomeados funcionam com o TLS 1.0 ativado. Assim que eu inverter a chave do Registro para desativar o TLS 1.0 (e reiniciar), as mensagens de erro acima ocorrem. Provavelmente vamos colocar essa máquina atrás de um proxy.

O serviço do servidor SQL não será iniciado depois de desativar o TLS 1.0 e o SSL 3.0

O problema descrito nesse link é tratado por CU1 na minha pergunta acima. A instância do SQL Server começa com o TLS 1.0 desabilitado (graças à atualização do MS). Aplicativos baseados em .NET funcionam bem com a instância SQL (após a atualização para 4.6). Esta pergunta é específica para um aplicativo ASP clássico (32 bits). Meu entendimento é que o cliente nativo também é corrigido pelo CU1, daí a minha confusão sobre por que isso não está funcionando.

userx
fonte

Respostas:

2

Você pode estar tentando usar drivers herdados de 32 bits.

Tente executar C: \ Windows \ SysWOW64 \ odbcad32.exe para criar um DSN que se conecte ao banco de dados do SQL Server usando o driver do SQL Server de 32 bits. Primeiro teste a conectividade usando a GUI.

Em seguida, tente especificar seu DSN na cadeia de conexão da seguinte maneira:

DSN=myDsn;Uid=myUsername;Pwd=;

A versão de 64 bits está localizada em: C: \ Windows \ System32 \ odbcad32.exe

PS: Eu não tentei isso, mas o nome do provedor para o SQL Server de 32 bits é na verdade "SQL Server". Seria bom se tudo o que você precisava fazer era substituir o SQLNCLI11 pelo SQL Server. Aqui está o meu arquivo DSN que criei com a versão de 32 bits - observe o driver ...

[ODBC]
DRIVER=SQL Server
UID=sa
WSID=P13-0000
APP=Microsoft® Windows® Operating System
SERVER=mcdba1
Picada
fonte
0

Você precisará da correção ADO.NET e SQLNCLI11 para seus drivers para fazê-los funcionar com o TLS 1.2.

Em 29 de janeiro, o Microsoft SQL Server suporta o TLS 1.2 para SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 e SQL Server 2014 e os principais drivers de clientes, como Server Native Client, Microsoft ODBC Driver para SQL Server, Microsoft JDBC Driver para SQL Server e ADO.NET (SqlClient).

Você pode ler mais sobre o lançamento aqui . A lista de compilações que oferecem suporte ao TLS 1.2, juntamente com os locais de download de componentes de cliente e servidor, está disponível em KB3135244 .

Amit Banerjee
fonte