Accesso remoto a sql server 2005 da applicativi

giovedì 04 novembre 2010 - 15.11

gigino Profilo | Newbie

salve,
ho installato su un pc sql server 2005 express edition e sviluppoto applicativi vb6 che utilizzano sql come motore di database.
Tutto funziona perfettamente in locale. Su pc remoto riesco ad accedere al server sql in rete tramite sql server managment studio express (SSMSE) ma non riesco a far girare gli applivativi vb in quanto ottengo un messaggio in fase di connessione al database (server non trovato o istanza server xxxx non presente).
In pratica il database e' accessibile solo via SSMSE da remoto ma non da Windows.
come consigliato da microsoft ho attivato sia connessioni locali che remote tcp/ip e named pipe, ho attivato i protocolli shared memory, tcp/ip e named pipes, nei criteri di protezione locali ho attivato l'accesso agli utenti anonimi e disattivato il servizio di limitazione di accesso ad account con password vuote. Accedo da vb al database con le stesse credenziali e metodo di autenticazione che uso su SSMSE.


p.s. Ho avuto questo tipo di problema in 2 o 3 reti di pc,in altre reti, ho ripetuto le stesse operazoni (stessissimo procedimento) e l'accesso e' stato subito garantito sia da SSMSE che dagli applicativi. Quindi l'impedimento e' legato a qualche configurazione software particolare dei server sql? Inoltre se installo il server sql su XP home edition il problema di accesso via applicativi e' permanente in quanto non esistono in XP home i criteri di protezione locali in strumenti di amministrazione per cui non e' possibili attivare l'accesso agli utenti anonimi e disattivare il servizio di limitazione di accesso ad account con password vuote.


Non so piu' cosa fare per consentire l'accesso al server sql da parte dei client via applicazioni.
Qualche dritta? GRAZIE.

lbenaglia Profilo | Guru

>Accedo da vb al database con le stesse credenziali e metodo di autenticazione
>che uso su SSMSE.
Questo è molto strano, dato che SSMSE non è altro che uno dei tanti client che si connettono all'istanza (esattamente come le tue applicazioni VB6), quindi se SSMSE si connette, alla stessa stregua devono connettersi le tue applicazioni

Ora, che modello di autenticazione utilizzi? Windows Authentication o SQL Server Authentication?
I PC risiedono in una LAN con un domain controller oppure sono in workgroup?

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

gigino Profilo | Newbie

i pc sono in un workgroup (lo stesso evidentemente), in fase di installazione di sql server ho scelto l'autenticazione di sql, accedo come utente "sa" con relativa password.

l'applicativo va in errore non appena effettua la connessione al server sql, in pratica non lo trova.

lbenaglia Profilo | Guru

>i pc sono in un workgroup (lo stesso evidentemente), in fase
>di installazione di sql server ho scelto l'autenticazione di
>sql, accedo come utente "sa" con relativa password.
OK, quindi utilizzi la SQL Server Authentication (l'unica possibile in workgroup) che avrai preventivamente configurato sull'istanza (di default è attiva solo la Windows Authentication).
Per quanto riguarda la scelta di utilizzare un account sysadmin come usuale login, beh, non sono d'accordo (ma proprio per niente ) dato che tale login ha poteri amministrativi a livello di istanza, sicuramente sovradimensionati rispetto alle reali necessità dei tuoi applicativi, con il rischio di causare danni irreparabili non solo ai db ai quali accedi ma addirittura all'istanza stessa (vedi attacchi di SQL Injection).

>l'applicativo va in errore non appena effettua la connessione
>al server sql, in pratica non lo trova.
L'istanza è named oppure di default?
Come la referenzi nella connection string (per nome o IP)?
Mi posti la stringa di connessione?

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

gigino Profilo | Newbie

la stringa di connessione e' la seguente:

NomeServer="serversql"
NomeDb="App2010"
'connessione database SQL
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=SQLNCLI.1;Integrated Security=SSPI;" & _
"Persist Security Info=False;" & _
"Server=" & NomeServer & "\sqlexpress;database=" & NomeDb & ";user id=sa;password=7de25pq4"
cn.Open

etc........

lbenaglia Profilo | Guru

>la stringa di connessione e' la seguente:
>
>NomeServer="serversql"
>NomeDb="App2010"
>'connessione database SQL
> Set cn = New ADODB.Connection
>cn.ConnectionString = "Provider=SQLNCLI.1;Integrated Security=SSPI;"
>& _
> "Persist Security Info=False;" & _
>"Server=" & NomeServer & "\sqlexpress;database=" & NomeDb & ";user
>id=sa;password=7de25pq4"
> cn.Open
>
>etc........
>

"Integrated Security=SSPI;" indica di utilizzare la Windows Authentication, pertanto devi rimuoverla dalla connection string.
Se apri una shell dos e scrivi:

C:\>ping serversql

Il comando risponde? Riesci a contattare il server?
In caso affermativo, sali sul server che ospita l'istanza e tramite SQL Server Configuration Manager prendi nota della porta TCP.
Spostati su uno dei client e "telnetta" la porta:

C:\>telnet <ip o nome server SQL> <porta TCP dell'istanza>

Se lo schermo "diventa nero" significa che l'istanza è raggiungibile da quel client, quindi si tratta di un mero problema di autenticazione e non di rete.

Dato che fai uso di una named instance, il servizio SQL Server Browser è attivo sul server che ospita l'istanza?

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

gigino Profilo | Newbie

il ping funziona cosi come il telnet sulla porta tcp (lo schermo diventa tutto nero)
il service SQL browser e' ' attivo (lo faccio startare da windows all'avvio in autometico).

Il problema di accesso via applicativo pero rimane (purtroppo) e si verifica ugualmente su tutti i client del workgroup (quindi il problema sta sul server sql).

Ciao.

lbenaglia Profilo | Guru

>il ping funziona cosi come il telnet sulla porta tcp (lo schermo
>diventa tutto nero)
>il service SQL browser e' ' attivo (lo faccio startare da windows
>all'avvio in autometico).
Bene.

>Il problema di accesso via applicativo pero rimane (purtroppo)
>e si verifica ugualmente su tutti i client del workgroup (quindi
>il problema sta sul server sql).
Quindi deduco che hai fatto il tentativo dopo aver rimosso "Integrated Security=SSPI;" come indicato, giusto?
OK, spostati su uno dei client e lancia la SQL Server Client Utility (cliconfg.exe) e verifica di aver abilitato il protocollo TCP/IP.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/

gigino Profilo | Newbie

Ok ti ringrazio,
faro' queste ulteriori prove in tarda serata, adesso ho una riunione di lavoro urgente.
Ti lascio poi notizie sull'esito.

Grazie e a presto.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5