Einzelnen Beitrag anzeigen

Benutzerbild von ogiesen
ogiesen

Registriert seit: 25. Okt 2004
Ort: Delmenhorst
43 Beiträge
 
Delphi XE3 Enterprise
 
#1

ADO > MSSQL: Zweistufige Authentifizierung, aber wie?

  Alt 29. Okt 2004, 11:25
Hallo alle zusammen!

Ich bin momentan dabei eine Anwendung von BDE/SQL Links auf ADO umzustellen. Die alte Anwendung erlaubte eine Anmeldung am SQL Server sowohl über SSPI als auch über SQL Login. Zum einen konnte man ein SQL Login durch einen Kommandozeilenparameter erzwingen und zum anderen wurde das SQL Login automatisch angeboten, wenn die SSPI Authentifizierung im ersten Anlauf fehlgeschlagen war.

Beide Modi einzeln habe ich auch schon relativ problemlos mit ADO umsetzen können.
Für die automatische/SSPI-Anmeldung würde der ConnectionString also so aussehen:

Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=MeineDatenbank;Data Source=MeinServer

...und für den manuellen/SQL-Login so:

Provider=SQLOLEDB.1;User ID=MeinUserName;Password=MeinPasswort;Persist Security Info=False;Initial Catalog=MeineDatenbank;Data Source=MeinServer

...wobei ich User ID und Password nicht wirklich über den ConnectionString setze, sondern über die Properties Collection der ADOConnection.

Soweit so gut. Das Problem beginnt, wenn ich zuerst die SSPI-Authentifizierung versuche, diese dann fehlschlägt und ich dann das SQL-Login folgen lassen will. Da der ConnectionString prinzipiell dynamisch sein soll (d.h. nicht hartkodiert ist), kann ich ihn nicht einfach komplett neu schreiben, weil dabei sonst möglicherweise wichtige zusätzliche Properties verloren gehen würden. Ich muß also den alten ConnectionString bzw. die alten Connection.Properties ändern. Wenn ich aber einfach Properties['Integrated Security'] := '' setzte, versucht Delphi trotzdem den SSPI-Login anstatt dem SQL-Login. Auch ein Setzen des Properties auf Unassigned, NIL oder Null hat keine Wirkung (beim Sezten auf 'No' oder ähnliches gibt es zumindest einen Fehler). Offensichtlich reicht die schiere Existenz des 'Integrated Security'-Properties schon aus, um die SSPI-Authentifizierung zu erzwingen. Der SQL-Login funktioniert nur, wenn dieses Property komplett fehlt.

Die Frage ist nur, wie bekomme ich das Property wieder weg, wenn es erst einmal dringewesen ist? Die Properties-Collection bietet, so weit ich es erkennen kann, keine Möglichkeit, einzelne Items wieder zu entfernen. Muß ich wirklich erst alle alten Properties irgendwo zwischenspeichern, den ConnectionString leermachen und dann alle Properties bis auf "Integrated Security" wieder zurückschreiben?

Hat vielleicht noch jemand eine andere Idee?

Grüße,

Oliver
Oliver Giesen
  Mit Zitat antworten Zitat