Aracılığıyla paylaş


Bağlantı dizesi oluşturucuları

Şunlar için geçerlidir: .NET Framework .NET .NET Standard

ADO.NET indirin

ADO.NET'in önceki sürümlerinde, birleştirilmiş dize değerlerine sahip bağlantı dizeleri derleme zamanında kontrol edilmediğinden, çalışma zamanında yanlış bir anahtar sözcük bir ArgumentException hatası oluşturabiliyordu. SQL Server için Microsoft SqlClient Veri Sağlayıcısı, DbConnectionStringBuilder öğesinden devralan Microsoft.Data.SqlClient.SqlConnectionStringBuilder bağlantı dizesi oluşturucu sınıfını içerir.

Bağlantı dizesi ekleme saldırıları

Kullanıcı girişini temel alan bağlantı dizesi oluşturmak için dinamik dize birleştirme kullanıldığında bağlantı dizesi ekleme saldırısı oluşabilir. Dize doğrulanmamışsa ve kötü amaçlı metin veya karakterler kaçmıyorsa, saldırgan hassas verilere veya sunucudaki diğer kaynaklara erişebilir. Örneğin, bir saldırgan noktalı virgül ekleyip başka bir değer ekleyerek bir saldırı başlatabilir. Bağlantı dizesi bir "son kazanan" algoritması kullanılarak ayrıştırılır ve düşman girişi meşru bir değer için değiştirilir.

bağlantı dizesi oluşturucu sınıfları, tahmin çalışmalarını ortadan kaldırmak ve söz dizimi hatalarına ve güvenlik açıklarına karşı koruma sağlamak için tasarlanmıştır. Veri sağlayıcısı tarafından izin verilen bilinen anahtar/değer çiftlerine karşılık gelen yöntemler ve özellikler sağlar. Her sınıf sabit bir eş anlamlılar koleksiyonu tutar ve eş anlamlıdan ilgili iyi bilinen anahtar adına çevirebilir. Geçerli anahtar/değer çiftleri için denetimler yapılır ve geçersiz bir çift özel durum oluşturur. Ayrıca eklenen değerler güvenli bir şekilde işlenir.

Aşağıdaki örnek, SqlConnectionStringBuilder ayarına eklenen bir ekstra değerin Initial Catalog tarafından nasıl işlendiğini göstermektedir.

SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
builder.DataSource = "(local)";
builder.IntegratedSecurity = true;
builder.InitialCatalog = "AdventureWorks;NewValue=Bad";
Console.WriteLine(builder.ConnectionString);

Çıktı, SqlConnectionStringBuilder'nin, yeni bir anahtar/değer çifti olarak bağlantı dizesine eklemek yerine çift tırnak işareti içinde ek değeri kaçırarak doğru bir şekilde işlediğini gösterir.

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

Yapılandırma dosyalarından bağlantı dizesi oluşturma

Bir bağlantı dizesinin belirli öğeleri önceden biliniyorsa, bunlar bir yapılandırma dosyasında depolanabilir ve tam bir bağlantı dizesi oluşturmak için çalışma zamanında alınabilir. Örneğin, veritabanının adı önceden biliniyor olabilir, ancak sunucunun adı bilinmeyebilir. Veya kullanıcının bağlantı dizesine başka değerler ekleme olanağı olmadan çalışma zamanında bir ad ve parola sağlamasını isteyebilirsiniz.

bağlantı dizesi oluşturucusu için aşırı yüklenmiş oluşturuculardan biri bağımsız değişken olarak alır String ve bu da kullanıcı girişinden tamamlanabilecek kısmi bir bağlantı dizesi sağlamanıza olanak tanır. Kısmi bağlantı dizesi bir yapılandırma dosyasında depolanabilir ve çalışma zamanında alınabilir.

Uyarı

** Ad alanı, Web uygulamaları için WebConfigurationManager kullanan ve Windows uygulamaları için ConfigurationManager kullanan yapılandırma dosyalarına programlı erişim sağlar. bağlantı dizesi ve yapılandırma dosyalarıyla çalışma hakkında daha fazla bilgi için bkz. Bağlantı Dizeleri ve Yapılandırma Dosyaları.

Example

Bu örnekte, bir yapılandırma dosyasından kısmi bir bağlantı dizesi alınması ve SqlConnectionStringBuilder öğesinin DataSource, UserID ve Password özelliklerini ayarlayarak bu dizenin tamamlanması gösterilmektedir. Yapılandırma dosyası aşağıdaki gibi tanımlanır.

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

Uyarı

Kodun çalışması için System.Configuration.dll projenizdeki öğesine bir başvuru ayarlamanız gerekir.

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);
    }
}

Ayrıca bakınız