2016-04-17 21 views
0

ich meine Verbindungszeichenfolge wie folgt zu erstellen:Passwort Probleme mit SqlConnection

var connectionString = "Data Source=MyPC\\SQLExpress;Initial Catalog=TestDb;Integrated Security=false;User Id=TestUser;password=TestPwd" 

ich eine SQL-Verbindung wie folgt aus:

var sqlConnection = new SqlConnection(connectionString); 

ich dann meine SqlBulkCopy erstellen Objekt wie folgt:

var bulkData = new SqlBulkCopy(sqlConnection.ConnectionString, SqlBulkCopyOptions.KeepIdentity); 

Das Problem ist, dass ich Fehler 18456, Status 8 Fehlermeldung bekomme, wenn die Massenkopie versucht, auszuführen. Dieser Fehler weist auf eine nicht übereinstimmende Passwörter hin. Ich kann mich jedoch mit den oben angegebenen Anmeldeinformationen in die Datenbank einloggen.

Also, ich trat durch mein Programm und bemerkte dies: Die Verbindungszeichenfolge, in debug, sieht so aus, wie es sollte, mit der Benutzer-ID und dem Passwort. Wenn ich jedoch den Mauszeiger über die sqlConnection.ConnectionString der Massenkopie halte, wird die gesamte Verbindungszeichenfolge OHNE Passwort angezeigt. Es hat nur den Benutzer! Aus irgendeinem Grund scheint mein Kennwort nicht verwendet zu werden, wenn ich die SQL-Verbindung über die Verbindungszeichenfolge mit dem Kennwort erstelle. Also, auf eine Ahnung, änderte ich den Code wie folgt aussehen:

var bulkData = new SqlBulkCopy(connectionString, SqlBulkCopyOptions.KeepIdentity); 

Und es funktionierte gut! Also, meine Frage ist, warum ist das, wenn ich die SQL-Verbindung mit einer Verbindungszeichenfolge erstellen, die ein Kennwort enthält, das Kennwort nicht in der resultierenden SQL Connection ConnectionString Eigenschaft enthalten?

+1

Ich bin mir sicher, es ist ein Sicherheitsproblem - mit dem Passwort im Speicher könnte ein Sicherheitsloch sein .. – Hogan

Antwort

3

Wenn Sie Persist Security Info = True nicht in die Verbindungszeichenfolge einschließen, entfernt SqlConnection das Kennwort aus Sicherheitsgründen.

+0

Ah, danke! Ich werde dies als die Antwort markieren, sobald der Timer abgelaufen ist. – Kevin