Connessione a database MSSQL Server express 2016

di il
9 risposte

Connessione a database MSSQL Server express 2016

Salve,

ho da poco installato un server con:

1) Windows Server 2016 Std
2) Microsoft Sql Express 2016
3) Microsoft SQL Server Management Studio 18

Durante l'installazione non ho avuto nessun problema.
Ho dei problemi, invece, per connettermi al database che ho creato.
In pratica:
Se provo a fare una connessione al server sql tramite un file udl la connessione alla tabella da me creata viene effettuata.
Se provo a fare una connessione al server sql utilizzando DBeaver al database master (già presente con l'installazione) non ho nessun problema.
Se provo a fare una connessione al server sql utilizzando DBeaver al mio database mi viene restituito il seguente errore:

The TCP/IP connection to the host 192.xxx.xxx.xxx, port 1433 has failed. Error: "connect timed out. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".
Il firewall è disabilitato sia nel client che nel server.

Se provo a fare una connessione al server sql al database master attraverso un programma vb net funziona.
Se provo a fare una connessione al server sql al mio database attraverso un programma vb net non funziona.

Preciso che utilizzo sempre l'utente "sa" e ovviamente con la solita password.
Credo che a questo punto mi manca qualcosa da configurare nel mio database.
Con la versione di sql express 2014 non ho mai avuto problemi di questo genere.

Cosa NON ho impostato per poter accedere al mio database?

Ringrazio tutti per l'aiuto.

9 Risposte

  • Re: Connessione a database MSSQL Server express 2016

    La Microsoft ha l'abitudine di rendere le cose facili allo sviluppatore "UTONTO", con la conseguenza che rende le cose difficili a quello "ESPERTO".

    In pratica, il problema e' che il servizio sulla porta 1433 non e' attivo: bisogna attivarlo esplicitamente.

    SQLServer usa un meccanismo dinamico di assegnamento della porta, e quindi lo sa LUI (il tool Microsoft) che porta usare, ma non l'utente.
  • Re: Connessione a database MSSQL Server express 2016

    In pratica devo verificare che la Porta dinamica tcp non sia a 0, come descritto qui:

    https://docs.microsoft.com/it-it/sql/database-engine/configure-windows/configure-a-server-to-listen-on-a-specific-tcp-port?view=sql-server-2017
  • Re: Connessione a database MSSQL Server express 2016

    Ho impostato la porta in modo specifico.
    Il messaggio di errore è cambiato:

    Non è possibile aprire il database "Test" richiesto dall'account di accesso. L'accesso non è riuscito. ClientConnectionId:170ae505-959e-49c9-90de-ac93d6e319f6

    Come account di accesso uso "sa"

    Sembra che manchi l'autorizzazione di accesso per tale utente.
  • Re: Connessione a database MSSQL Server express 2016

    Salve,
    di default, SQLExpress viene installato come una Named Instance e, come @migliorabile ha indicato, non e' impostato per stare in ascolto sulla porta TCP 1433... a dire il vero, sempre di default, SQLExpress NON abilita le connessioni TCP ma solo connessioni in shared memory, quindi, con SQL Server Configuration Manager, si rende necessario abilitare il protocollo TCP/IP (come anche le named pipes, se necessario)... visto che per le named instance non e' definita una known port (IANA ne ha rilasciata 1 sola a Microsoft per SQL Server, la known port 1433, utilizzata solitamente solo per le istanze di default, ma comunque e' saggia pratica modificarla a mano ), nel relativo dialogo di gestione del protocollo TCP/IP si possono rilevare/modificare le impostazioni per la porta di ascolto... in caso di assegnazione di porta dinamica, l'istanza SQL Server al momento dello start up recupera dal registry l'ultima porta utilizzata e, se tutt'ora libera, la assegna all'istanza... lo stack di connessione, per risolvere la porta di ascolto, utilizza un altro servizio ancora (che va abilitato se non gia' in esecuzione), il SQL Browser, che intercetta tutte le connessioni in entrata, verifica la porta corretta di ascolto, e reindirizza in maniera trasparente per l'utente remoto le connessioni sulla porta in uso...
    personalmente disabilito sempre il SQL Browser e richiedo nella stringa di connessione l'indicazione della porta da utilizzare, impostata come meglio desiderato dall'utente... per anni ho usato la porta 666 in quanto sulle macchine con SQL Server non ho mai installato DOOM
    tornando alla connessione, sempre di default SQL Server viene installato abilitando solamente la trusted authentication (Windows authentication) al fine sempre di limitare la superficie di attacco, quindi per consentire connessioni con SQL Server authentication e' necessario abilitare tale funzionalita', agendo ad esempio con SSMS, nodo dell'istanza, accesso alle proprieta', panel Security, abilitando la SQL Server authentication... provvedere poi subito ad impostare una strong password per il principal "sa"
    saluti omnia
    --
    Andrea
  • Re: Connessione a database MSSQL Server express 2016

    A...
    aggiungo anche di ricordarsi di non accedere con l'accounto "sa" per attivita' interattive tradizionali, ma solo per attivita' che richiedano autorizzazioni amministrative
    saluti omnia
    --
    Andrea
  • Re: Connessione a database MSSQL Server express 2016

    Ti ringrazio per la spiegazione.
    Tutto abbastanza chiaro.
    Concordo sul fatto che sql browser non debba essere abilitato, che la connessione tcp debba essere attivata a mano come la porta di ascolto/accesso e di non utilizzare l'utente "sa".
    Ma mi rimane sempre da capire come mai, anche se utilizzo un altro account per accedere al mio database, non riesco ad avere acceso.
    Microsoft SQL Express non è proprio la mia materia, anche se lo uso da anni, ma fino alla versione 2014 non ho mai avuto e non ho tale problema. Volevo utilizzare la 2016 express solo per testarla e perché hanno portato la dimensione del database a 10 gb (se non erro).

    Grazie di nuovo e nel frattempo mi "divertirò" a trovare altre strade.
  • Re: Connessione a database MSSQL Server express 2016

    Anche io avevo lo stesso problema, non riuscivo nemmeno ad accedere con il SSMS!

    Come ti ha scritto anche @asql, nelle ultime versioni Microsoft SQLExpress viene installato come una Named Instance, mentre prima veniva usata l'istanza predefinita.
    Ho rimosso tutto, reinstallato usando quella ed il problema si è risolto.
  • Re: Connessione a database MSSQL Server express 2016

    Ok, proverò a seguire il tuo prezioso consiglio.


    Grazie di nuovo
  • Re: Connessione a database MSSQL Server express 2016

    Stamani ho fatto altre prove e sono riuscito, grazie ai vostri suggerimenti, a trovare il bandolo della matassa senza dover reinstallare SQL in quanto normalmente lo installo in mixed mode.
    Brevemente:
    Il primo problema, come segnalato da migliorabile, era la porta dinamica.
    Il secondo, come mi è stato fatto notare da asql e ribadito da gibra, è il "named istance".
    Nella stringa di connessione di dbeaver lo inserivo (<nome server> \ <nome istanza>) ma, ahimè sbagliavo, il "verso" della barra. Lavorando sia con linux che con Microsoft e con diversi database ogni tanto mi scappa l'ORRORE.
    Così riguardando un programma che ho fatto l'anno scorso in vb net che accedeva a Microsoft Sql mi sono accorto dell'inghippo.

    Ringrazio tutti quanti per il vostro prezioso aiuto e al prossimo quesito.

    Per me il post è chiuso e ampiamente risolto.
Devi accedere o registrarti per scrivere nel forum
9 risposte