Sdílet prostřednictvím


Tvůrci připojovacích řetězců

V dřívějších verzích ADO.NET nedochází ke kontrole času kompilace připojovací řetězec s zřetězenými řetězcovými hodnotami, takže v době běhu se vygenerovalo ArgumentExceptionnesprávné klíčové slovo . Každý z poskytovatelů dat rozhraní .NET Framework podporoval jinou syntaxi pro připojovací řetězec klíčová slova, která při ručním vytváření platných připojovací řetězec ztěžují. Chcete-li tento problém vyřešit, ADO.NET 2.0 zavedli nové tvůrce připojovací řetězec pro každého zprostředkovatele dat rozhraní .NET Framework. Každý zprostředkovatel dat obsahuje silné typy připojovací řetězec builder třídy, která dědí z DbConnectionStringBuilder. Následující tabulka uvádí zprostředkovatele dat rozhraní .NET Framework a jejich přidružené třídy připojovací řetězec tvůrce.

Poskytovatel Připojení ionStringBuilder – třída
System.Data.SqlClient System.Data.SqlClient.SqlConnectionStringBuilder
System.Data.OleDb System.Data.OleDb.OleDbConnectionStringBuilder
System.Data.Odbc System.Data.Odbc.OdbcConnectionStringBuilder
System.Data.OracleClient System.Data.OracleClient.OracleConnectionStringBuilder

útoky prostřednictvím injektáže řetězců Připojení

Útok připojovací řetězec injektáže může nastat, když se k sestavení připojovací řetězec založených na vstupu uživatele používá zřetězení dynamického řetězce. Pokud se řetězec neověří a škodlivý text nebo znaky neuniknou, útočník může potenciálně získat přístup k citlivým datům nebo jiným prostředkům na serveru. Útočník by například mohl útok připojit tak, že zadá středník a připojí další hodnotu. Připojovací řetězec se parsuje pomocí algoritmu "posledního vítěze" a nepřátelský vstup se nahradí legitimní hodnotou.

Třídy tvůrce připojovací řetězec jsou navržené tak, aby eliminovaly odhady a chránily před chybami syntaxe a ohroženími zabezpečení. Poskytují metody a vlastnosti odpovídající známým párům klíč/hodnota povolených jednotlivými zprostředkovateli dat. Každá třída udržuje pevnou kolekci synonym a může přeložit ze synonyma na odpovídající dobře známý název klíče. Kontroly se provádějí u platných párů klíč/hodnota a neplatná dvojice vyvolá výjimku. Vložené hodnoty se navíc zpracovávají bezpečným způsobem.

Následující příklad ukazuje, jak SqlConnectionStringBuilder zpracovává vloženou extra hodnotu pro Initial Catalog nastavení.

Dim builder As New System.Data.SqlClient.SqlConnectionStringBuilder  
builder("Data Source") = "(local)"  
builder("Integrated Security") = True  
builder("Initial Catalog") = "AdventureWorks;NewValue=Bad"  
Console.WriteLine(builder.ConnectionString)  
System.Data.SqlClient.SqlConnectionStringBuilder builder =  
  new System.Data.SqlClient.SqlConnectionStringBuilder();  
builder["Data Source"] = "(local)";  
builder["integrated Security"] = true;  
builder["Initial Catalog"] = "AdventureWorks;NewValue=Bad";  
Console.WriteLine(builder.ConnectionString);  

Výstup ukazuje, že tato operace byla zpracována správně tak, že místo toho, abyste SqlConnectionStringBuilder ji připojili k připojovací řetězec jako nový pár klíč/hodnota, vyčisťujte extra hodnotu do dvojitých uvozovek.

data source=(local);Integrated Security=True;  
initial catalog="AdventureWorks;NewValue=Bad"  

Vytváření řetězců Připojení ion z konfiguračních souborů

Pokud jsou určité prvky připojovací řetězec známy předem, mohou být uloženy v konfiguračním souboru a načteny za běhu, aby se vytvořil úplný připojovací řetězec. Název databáze může být například známý předem, ale ne název serveru. Nebo můžete chtít, aby uživatel zadal jméno a heslo za běhu, aniž by do připojovací řetězec mohl vkládat jiné hodnoty.

Jeden z přetížených konstruktorů pro tvůrce připojovací řetězec má String jako argument, který umožňuje zadat částečné připojovací řetězec, které je pak možné dokončit ze vstupu uživatele. Částečné připojovací řetězec lze uložit do konfiguračního souboru a načíst je za běhu.

Poznámka:

Obor System.Configuration názvů umožňuje programový přístup ke konfiguračním souborům, které používají WebConfigurationManager webové aplikace a ConfigurationManager aplikace pro Windows. Další informace o práci s připojovací řetězec a konfiguračními soubory najdete v tématu Připojení ion řetězce a konfigurační soubory.

Příklad

Tento příklad ukazuje načtení částečné připojovací řetězec z konfiguračního souboru a jeho dokončení nastavením DataSource, UserIDa Password vlastnosti SqlConnectionStringBuilder. Konfigurační soubor je definován následujícím způsobem.

<connectionStrings>  
  <clear/>  
  <add name="partialConnectString"
    connectionString="Initial Catalog=Northwind;"  
    providerName="System.Data.SqlClient" />  
</connectionStrings>  

Poznámka:

Aby se kód spustil, musíte nastavit odkaz na System.Configuration.dll projekt.

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 (settings != null)
    {
        // Retrieve the partial connection string.
        var 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(connectString)
            {
                // Supply the additional values.
                DataSource = dataSource,
                UserID = userName,
                Password = userPassword
            };
        Console.WriteLine("Modified: {0}", builder.ConnectionString);
    }
}
Private Sub BuildConnectionString(ByVal dataSource As String, _
    ByVal userName As String, ByVal userPassword As String)

    ' Retrieve the partial connection string named databaseConnection
    ' from the application's app.config or web.config file.
    Dim settings As ConnectionStringSettings = _
       ConfigurationManager.ConnectionStrings("partialConnectString")

    If Not settings Is Nothing Then
        ' Retrieve the partial connection string.
        Dim connectString As String = settings.ConnectionString
        Console.WriteLine("Original: {0}", connectString)

        ' Create a new SqlConnectionStringBuilder based on the
        ' partial connection string retrieved from the config file.
        Dim builder As New SqlConnectionStringBuilder(connectString)

        ' Supply the additional values.
        builder.DataSource = dataSource
        builder.UserID = userName
        builder.Password = userPassword

        Console.WriteLine("Modified: {0}", builder.ConnectionString)
    End If
End Sub

Viz také