it-swarm.com.de

Datenbank + Windows-Authentifizierung + Benutzername/Passwort?

Ich habe immer gedacht, dass Sie zum Herstellen einer Verbindung mit SQL Server mithilfe der Windows-Authentifizierung mit explizit angegebenen Anmeldeinformationen LogonUser, Impersonate und anschließend eine Verbindung herstellen müssen.

Es scheint mir, dass dieser Link nahelegt, dass es möglich ist, ohne all diesen Aufwand eine Verbindung zum SQL-Server herzustellen, indem einfach "uid = ...; pwd = ..." in der Verbindungszeichenfolge angegeben wird. Ich habe diese Methode getestet, um sicherzugehen, dass sie nicht funktioniert. Wenn dieser Blog-Post nicht auf msdn.com wäre, hätte ich ihn einfach als Noob-Talk abgetan, aber das ist er.

Hat jemand eine Idee was ich vermisse?

EDIT1: Viele Befragte haben falsch verstanden, worauf ich mich bezog. Hier ist eine Kopie von dem, worüber ich gesprochen habe. Es handelt sich weder um nicht integriertes SQL noch um einen von IIS vorgenommenen ASP.NET-Identitätswechsel:

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

Es gibt zwei verschiedene Arten von Sicherheit mit SQL Server. "Windows-Authentifizierung" und "SQL Server-Authentifizierung". Wenn Sie uid und pwd sehen, sehen Sie letzteres. Die Benutzer-ID ist in diesem Fall kein Windows-Principal - das Betriebssystem weiß nichts davon.

Die Antwort auf Ihre Frage lautet also nein . Sie können den Windows-Benutzernamen und das Kennwort nicht in die Verbindungszeichenfolge eingeben, um sich bei SQL Server anzumelden.

28
John Saunders

Es hängt davon ab, ob Sie von einer Befehlszeile oder einer Winforms-App DIREKT auf Ihren SQL Server zugreifen, Sie geben entweder "Integrated Security = SSPI;" und dann verwenden Sie Ihre Windows-Anmeldeinformationen als Anmeldeinformationen, OR Sie geben "Benutzer-ID = ....; pwd = ....." an - aber das ist dann eine SQL-Anmeldung.

Sie erwähnen "Imitieren und dann Verbinden" - das scheint ASP.NET zu zeigen - das ist wieder eine völlig andere Geschichte. Wenn Sie sich als Person ausgeben, verwenden Sie im Wesentlichen Ihre Windows-Anmeldeinformationen, z. Der Webserver wird sich "als Person" ausgeben und sich anmelden (unter Verwendung Ihrer Windows-Anmeldeinformationen). In diesem Fall muss erneut kein "uid = ....; pwd = ....." angegeben werden (wenn dies der Fall ist, wird es ignoriert).

Wie der von Ihnen erwähnte Link eindeutig zeigt: Wenn Sie direkt eine Verbindung herstellen können und "Integrated Security = SSPI;" angeben, hat dies Vorrang vor allen UID = ...; Sie verwenden Ihre Windows-Anmeldeinformationen. Diese zusätzlichen uid = ...; pwd = .... Teile werden ignoriert.

Marc

3
marc_s

Der Artikel und der betreffende Punkt beziehen sich auf SQL-Sicherheit und nicht auf integrierte Sicherheit. Sie können die Anmeldeinformationen für einen SQL-Benutzer übergeben und sich auf diese Weise anmelden, wenn die SQL-Authentifizierung (gemischter Modus) aktiviert ist. Wenn der SQL-Server nur für die Verwendung der integrierten Sicherheit eingerichtet ist, funktioniert dies nicht. Es wird auch nicht funktionieren, um die Anmeldung mit Windows-Anmeldeinformationen zuzulassen.

2
BlackWasp

Ja, wie Sie sagen, der Artikel erwähnt dies:

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

Wenn Sie jedoch später einige Zeilen sorgfältig lesen, heißt es:

zeichenfolge sql4 -> Meldet sich mit Windows-Login an, dh. hat Vorrang vor dem Benutzernamen/Passwort.

:)

1
Jagan

In unserem Shop verwenden wir routinemäßig Verbindungszeichenfolgen, wie Sie sie beschreiben. Kein Problem. Ihre SQL Server-Datenbank muss jedoch für die Verwendung der SQL-Sicherheit eingerichtet sein, nicht für die Windows-Authentifizierung.

Ein Beispiel für eine Verbindungszeichenfolge (aus der web.config) in unserer App sieht folgendermaßen aus:

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

Auf der anderen Seite richtete der DBA-Guru für unseren Shop eine persönliche Datenbank auf dem Hauptserver ein, die Sicherheit in meine Windows-Anmeldung integriert hatte. Ich brauchte keine uid und pwd, da meine Authentifizierungsinformationen aus dem Kontext entnommen wurden.

1
Cyberherbalist

Dies ist sehr alt, aber vielleicht hat jemand das gleiche Problem.

Sie können verbinden mit Windows-Authentifizierung und angabe der Benutzer-ID und des Kennworts in Ihrer Verbindungszeichenfolge, aber nicht auf jedem Gerät. Das können Sie zum Beispiel erreichen auf WinCE Geräte ( https://technet.Microsoft.com/de-de/library/aa275613(v=sql.80).aspx ). 

Ich weiß nicht, ob Sie auf anderen Betriebssystemen nur mit der Verbindungszeichenfolge dasselbe tun können (ohne den Identitätswechsel).

Ich hoffe es hilft.

0
Alejandro

nur ein Beitrag auch für einige, die noch immer ein Problem wie dieses hatten. Wenn Sie nach meiner Erfahrung keinen Benutzer/kein Kennwort in Ihrer Konnektivität angeben, wird automatisch eine Verbindung mit db mithilfe der Windows-Authentifizierung hergestellt. Das heißt, es erhält die Benutzer-ID und die Berechtigungsnachweise des Benutzers, der sich am Computer angemeldet hat. Das System ermöglicht es Ihnen, eine Verbindung zur Datenbank herzustellen, wenn festgestellt wird, dass Ihre Benutzer-ID in der Datenbank vorhanden ist bzw. erstellt wurde. Sobald Sie jedoch Ihre Benutzer-ID und Ihr Kennwort in Ihrer Konnektivität angegeben haben, umgehen Sie die Windows-Authentifizierung und verwenden stattdessen die SQL Server-Authentifizierung. 

0
elena