Domanda

Ho sempre pensato che per connettersi al server SQL utilizzando l'autenticazione di Windows con le credenziali specificate in modo esplicito, è necessario LogonUser, Impersonate, quindi connettersi.

Mi sembra che questo link suggerisce che è possibile connettersi al server SQL senza tutta questa seccatura, semplicemente specificando " uid = ...; pwd = ... " nella stringa di connessione. Ho provato questo metodo solo per essere sicuro che non funzionasse, e - ecco ed ecco - non ha funzionato. Se quel post sul blog non fosse su msdn.com, l'avrei semplicemente ignorato come noob talk, ma lo è.

Qualcuno ha un'idea di cosa mi sto perdendo?

EDIT1: Molti intervistati hanno frainteso ciò a cui mi riferivo. Ecco una copia / incolla di ciò di cui stavo parlando. È non SQL integrato, né una rappresentazione ASP.NET fatta da IIS:

string sql4 = String.Format(
   @"Data Source={0};Integrated Security=SSPI;uid=<uid>;pwd=<pid>", server);     
// Database + Windows Authentication + Username/Password
È stato utile?

Soluzione

Esistono due tipi distinti di sicurezza con SQL Server. "Autenticazione di Windows", e "Autenticazione di SQL Server". Quando vedi uid e pwd vedi quest'ultimo. L'uid in questo caso non è un principal di Windows - il sistema operativo non ne sa nulla.

Quindi la risposta alla tua domanda è no , non puoi passare il nome utente e la password di Windows nella stringa di connessione per accedere a SQL Server.

Altri suggerimenti

Dipende - se ti connetti da una riga di comando o da un'app Winforms DIRETTAMENTE al tuo SQL Server, DEVI specificare " Integrated Security = SSPI; " e quindi utilizza le credenziali di Windows come credenziali di accesso, oppure specifichi " user id = ....; pwd = ..... " - ma questo è un accesso SQL - NON l'accesso a Windows.

Menzionate " impersonate e quindi connettete " - sembra indicare ASP.NET - è di nuovo una storia completamente diversa. Se impersoni, allora stai sostanzialmente usando le tue credenziali di Windows, ad es. il web server "impersonerà" e accedi come te (usando le tue credenziali di Windows). In tal caso, di nuovo, no " uid = ....; pwd = ..... " deve essere specificato (se lo è, verrà ignorato).

Come mostra chiaramente quel link che hai citato: se riesci a connetterti direttamente e specifichi " Sicurezza integrata = SSPI; " ;, allora questo ha la precedenza su qualsiasi uid = ...; pwd = .... che tu potrebbe anche specificare e accedere utilizzando le credenziali di Windows; quei pezzi extra uid = ...; pwd = .... sono ignorati.

Marc

L'articolo e il punto in questione riguardano la sicurezza SQL, non la sicurezza integrata. È possibile passare le credenziali per un utente SQL e accedere in questo modo se l'autenticazione SQL (modalità mista) è abilitata. Se il server SQL è impostato per utilizzare solo la sicurezza integrata, questo non funzionerà. Inoltre non funzionerà per consentire l'accesso utilizzando le credenziali di accesso a Windows.

Nel nostro negozio usiamo abitualmente stringhe di connessione come da te descritte. Nessun problema. Ma il database del server sql deve essere configurato per utilizzare la sicurezza sql, non l'autenticazione di Windows.

Una stringa di connessione di esempio (da web.config) nella nostra app è simile a:

<connectionStrings>
<add name="ConfigurationData" connectionString="server=DevServer;
database=travel_expense_management_dv;uid=userid;pwd=password!;"
providerName="System.Data.SqlClient" />
</connectionStrings>

D'altra parte, il guru DBA per il nostro negozio mi ha creato un database personale sul server principale che aveva integrato la sicurezza con il mio accesso a Windows. Non ho bisogno di uid e pwd perché ha preso le mie informazioni di autenticazione dal contesto.

Sì, come dici tu, l'articolo menziona questo:

string sql4 = String.Format(@"Data Source={0};Integrated Security=SSPI;uid=<uid>;pwd=<pid>", server);     // Database + Windows Authentication + Username/Password

Ma se leggi attentamente alcune righe dopo, dice questo:

  

stringa sql4 - > Accede con il login di Windows, ad es. ha la precedenza sul nome utente / password.

:)

Questo è molto vecchio ma forse qualcuno ha lo stesso problema.

Puoi connetterti usando Autenticazione Windows e specificando ID utente e password sulla tua stringa di connessione , ma non su tutti i dispositivi. Puoi farlo ad esempio su dispositivi WinCE ( https://technet.microsoft.com/en-us/library/aa275613 (v = sql.80) aspx ).

Non so se puoi fare la stessa cosa su altri sistemi operativi solo con la stringa di connessione (senza fare la cosa della rappresentazione).

Spero che sia d'aiuto.

solo un contributo anche per alcuni che stavano ancora riscontrando problemi come questo. In base alla mia esperienza, se non si specifica alcun utente / password nella propria connettività, si connetterà automaticamente a db utilizzando l'autenticazione di Windows. Ciò significa che otterrà l'ID utente e le credenziali dell'utente che ha effettuato l'accesso alla macchina. Il sistema ti consentirà di collegarti al database se identifica che il tuo ID utente esiste / creato nel database. Ma una volta specificato l'id utente e la password nella connettività, ignora l'autenticazione di Windows e utilizza invece l'autenticazione del server sql.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top