Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: .NET Framework
.NET .NET
Standard
In früheren Versionen von ADO.NET erfolgte keine Prüfung von Verbindungszeichenfolgen mit verketteten Zeichenfolgenwerten zur Kompilierzeit, sodass ein falsches Schlüsselwort zur Laufzeit ein ArgumentException auslöste. Der Microsoft SqlClient-Datenanbieter für SQL Server umfasst die Klasse zum Erstellen von Verbindungszeichenfolgen Microsoft.Data.SqlClient.SqlConnectionStringBuilder, die von DbConnectionStringBuilder erbt.
Injection-Angriffe auf Verbindungszeichenfolgen
Ein Connection-String-Injection-Angriff kann auftreten, wenn dynamische Zeichenfolgenverkettung verwendet wird, um Verbindungszeichenfolgen auf Grundlage von Benutzereingaben zu erstellen. Wenn die Zeichenfolge nicht überprüft wird und schädlicher Text oder schädliche Zeichen nicht mit Escapezeichen versehen sind, kann ein Angreifer möglicherweise auf vertrauliche Daten oder andere Ressourcen auf dem Server zugreifen. Beispielsweise könnte ein Angreifer einen Angriff einleiten, indem er ein Semikolon eingeben und einen anderen Wert anfügen würde. Die Verbindungszeichenfolge wird mit einem Last One Wins-Algorithmus (der Letzte gewinnt) analysiert, wobei der legitime Wert durch die feindliche Eingabe ersetzt wird.
Die ConnectionStringBuilder-Klassen sorgen dafür, dass das Rätselraten abgeschafft wird und die Verbindungszeichenfolgen vor Syntaxfehlern und Sicherheitslücken geschützt werden. Sie stellen Methoden und Eigenschaften bereit, die den vom jeweiligen Datenanbieter zugelassenen bekannten Schlüssel-Wert-Paaren entsprechen. Jede Klasse unterhält eine feste Sammlung von Synonymen und ist in der Lage, ein Synonym in den entsprechenden bekannten Schlüsselnamen zu übersetzen. Es werden Überprüfungen auf gültige Schlüssel-Wert-Paare durchgeführt, und ein ungültiges Paar löst eine Ausnahme aus. Außerdem werden injizierte Werte sicher verarbeitet.
Das folgende Beispiel zeigt, wie der SqlConnectionStringBuilder einen eingefügten Zusatzwert für die Initial Catalog-Einstellung behandelt.
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "(local)";
builder.IntegratedSecurity = true;
builder.InitialCatalog = "AdventureWorks;NewValue=Bad";
Console.WriteLine(builder.ConnectionString);
Die Ausgabe zeigt, dass SqlConnectionStringBuilder dies korrekt verarbeitet hat, indem es den zusätzlichen Wert in doppelte Anführungszeichen gesetzt hat, anstatt ihn als neues Schlüssel-Wert-Paar an die Verbindungszeichenfolge anzufügen.
data source=(local);Integrated Security=True;
initial catalog="AdventureWorks;NewValue=Bad"
Erstellen von Verbindungszeichenfolgen aus Konfigurationsdateien
Wenn bestimmte Elemente einer Verbindungszeichenfolge vorab bekannt sind, können sie in einer Konfigurationsdatei gespeichert und zur Laufzeit zum Konstruieren einer vollständigen Verbindungszeichenfolge abgerufen werden. So ist es z. B. denkbar, dass zwar der Name der Datenbank, nicht aber der Name des Servers vorab bekannt ist. Oder Sie möchten, dass ein Benutzer zur Laufzeit einen Namen und ein Kennwort angibt, ohne andere Werte in die Verbindungszeichenfolge einzugeben.
Einer der überladenen Konstruktoren für einen Verbindungszeichenfolgen-Generator verwendet eine String als Argument, sodass Sie eine Teilverbindungszeichenfolge bereitstellen können, die dann zur Vervollständigung der Benutzereingabe verwendet wird. Die Teilverbindungszeichenfolge kann in einer Konfigurationsdatei gespeichert und zur Laufzeit abgerufen werden.
Hinweis
Der System.Configuration-Namespace ermöglicht den programmgesteuerten Zugriff auf Konfigurationsdateien unter Verwendung des WebConfigurationManager bei Webanwendungen und des ConfigurationManager bei Windows-Anwendungen. Weitere Informationen zum Arbeiten mit Verbindungszeichenfolgen und Konfigurationsdateien finden Sie unter Verbindungszeichenfolgen und Konfigurationsdateien.
Beispiel
Dieses Beispiel zeigt, wie Sie durch Festlegen der Eigenschaften DataSource, UserID und Password des SqlConnectionStringBuilder eine Teilverbindungszeichenfolge aus einer Konfigurationsdatei abrufen und vervollständigen können. Die Konfigurationsdatei ist wie folgt definiert:
<connectionStrings>
<clear/>
<add name="partialConnectString"
connectionString="Initial Catalog=Northwind;"
providerName="Microsoft.Data.SqlClient" />
</connectionStrings>
Hinweis
Sie müssen in Ihrem Projekt einen Verweis auf System.Configuration.dll angeben, damit der Code ausgeführt wird.
private static void BuildConnectionString(string dataSource,
string userName, string userPassword)
{
// Retrieve the partial connection string named databaseConnection
// from the application's app.config or web.config file.
ConnectionStringSettings settings =
ConfigurationManager.ConnectionStrings["partialConnectString"];
if (null != settings)
{
// Retrieve the partial connection string.
string connectString = settings.ConnectionString;
Console.WriteLine("Original: {0}", connectString);
// Create a new SqlConnectionStringBuilder based on the
// partial connection string retrieved from the config file.
SqlConnectionStringBuilder builder =
new SqlConnectionStringBuilder(connectString);
// Supply the additional values.
builder.DataSource = dataSource;
builder.UserID = userName;
builder.Password = userPassword;
Console.WriteLine("Modified: {0}", builder.ConnectionString);
}
}