Aracılığıyla paylaş


Bağlantı dizeleri ve yapılandırma dosyaları

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

ADO.NET indirin

Uygulamanızın koduna bağlantı dizesi eklemek güvenlik açıklarına ve bakım sorunlarına yol açabilir. Bir uygulamanın kaynak kodunda derlenen şifrelenmemiş bağlantı dizesi, Ildasm.exe (IL Disassembler) aracı kullanılarak görüntülenebilir. Ayrıca, bağlantı dizesi değişirse uygulamanızın yeniden derlenmiş olması gerekir. Bu nedenlerden dolayı, bağlantı dizesi'leri bir uygulama yapılandırma dosyasında depolamanızı öneririz.

Uygulama yapılandırma dosyalarıyla çalışma

Uygulama yapılandırma dosyaları belirli bir uygulamaya özgü ayarlar içerir. Örneğin, bir ASP.NET uygulamasının bir veya daha fazla web.config dosyası olabilir ve Windows uygulamasının isteğe bağlı bir app.config dosyası olabilir. Yapılandırma dosyalarının adı ve konumu uygulamanın konağına bağlı olarak değişse de, yapılandırma dosyaları ortak öğeleri paylaşır.

connectionStrings bölümü

Bağlantı dizeleri, bir uygulama yapılandırma dosyasının yapılandırma öğesinin connectionStrings bölümünde anahtar/değer çiftleri olarak depolanabilir. Alt öğeler ekleme, temizleme ve kaldırma içerir.

Aşağıdaki yapılandırma dosyası parçası, bir bağlantı dizesi depolamak için şemayı ve söz dizimini gösterir. name özniteliği, bir bağlantı dizesini benzersiz olarak tanımlamak için sağladığınız bir addır ve çalışma sırasında alınabilmesi için kullanılır. providerName, SQL Server için Microsoft SqlClient Veri Sağlayıcısı olan Microsoft.Data.SqlClient'tır.

<?xml version='1.0' encoding='utf-8'?>  
  <configuration>  
    <connectionStrings>  
      <clear />  
      <add name="Name"
       providerName="Microsoft.Data.SqlClient"
       connectionString="Valid Connection String;" />  
    </connectionStrings>  
  </configuration>  

Uyarı

Bağlantı dizesinin bir kısmını bir yapılandırma dosyasına kaydedebilir ve çalışma zamanında tamamlamak için DbConnectionStringBuilder sınıfını kullanabilirsiniz. Bu, bağlantı dizesinin öğelerini önceden bilmediğiniz veya hassas bilgileri bir yapılandırma dosyasına kaydetmek istemediğiniz senaryolarda kullanışlıdır. Daha fazla bilgi için bkz . Bağlantı Dizesi Oluşturucuları.

Dış yapılandırma dosyalarını kullanma

Dış yapılandırma dosyaları, tek bir bölümden oluşan bir yapılandırma dosyasının parçasını içeren ayrı dosyalardır. Ardından dış yapılandırma dosyasına ana yapılandırma dosyası tarafından başvurulur. connectionStrings bölümünü fiziksel olarak ayrı bir dosyada depolamak, uygulama dağıtıldıktan sonra bağlantı dizelerinin düzenlenebileceği durumlarda yararlıdır. Örneğin, standart ASP.NET davranışı, yapılandırma dosyaları değiştirildiğinde bir uygulama etki alanını yeniden başlatmaktır ve bu da durum bilgilerinin kaybolmasına neden olur. Ancak, bir dış yapılandırma dosyasının değiştirilmesi uygulamanın yeniden başlatılmasına neden olmaz. Dış yapılandırma dosyaları ASP.NET ile sınırlı değildir; Bunlar Windows uygulamaları tarafından da kullanılabilir. Ayrıca, dış yapılandırma dosyalarına erişimi kısıtlamak için dosya erişim güvenliği ve izinleri kullanılabilir. Çalışma zamanında dış yapılandırma dosyalarıyla çalışmak saydamdır ve özel kodlama gerektirmez.

Bağlantı dizelerini bir dış yapılandırma dosyasında depolamak için yalnızca connectionStrings bölümünü içeren ayrı bir dosya oluşturun. Ek öğe, bölüm veya öznitelik eklemeyin. Bu örnekte, dış yapılandırma dosyasının söz dizimi gösterilir.

<connectionStrings>  
  <add name="Name"
   providerName="Microsoft.Data.SqlClient"
   connectionString="Valid Connection String;" />  
</connectionStrings>  

Ana uygulama yapılandırma dosyasında, dış dosyanın tam adını ve konumunu belirtmek için configSource özniteliğini kullanırsınız. Bu örnek adlı connections.configbir dış yapılandırma dosyasına başvurur.

<?xml version='1.0' encoding='utf-8'?>  
<configuration>  
    <connectionStrings configSource="connections.config"/>  
</configuration>  

Çalışma Zamanında Bağlantı Dizelerini Alma

.NET Framework 2.0, çalışma zamanında yapılandırma dosyalarından bağlantı dizelerini daha kolay almak için System.Configuration ad alanında yeni sınıflar sunmuştur. Bir bağlantı dizesini ada veya sağlayıcı adına göre programlı olarak alabilirsiniz.

Uyarı

machine.config dosyası, Visual Studio tarafından kullanılan bağlantı dizelerini içeren connectionStrings bölümünü de içerir. Bir Windows uygulamasındakiapp.config dosyasından sağlayıcı adına göre bağlantı dizeleri alınırken, öncemachine.config'deki bağlantı dizeleri, ardından app.config'den girdiler yüklenir. connectionStrings öğesinden hemen sonra clear eklendiğinde, bellekteki veri yapısından devralınan tüm başvurular kaldırılır, böylece yalnızca yerel app.config dosyasında tanımlanan bağlantı dizeleri dikkate alınır.

Yapılandırma dosyalarıyla çalışma

.NET Framework 2.0'dan itibaren, yerel bilgisayarda yapılandırma dosyalarıyla çalışırken, artık ConfigurationSettings kullanım dışı olup yerine ConfigurationManager kullanılmaktadır. WebConfigurationManager ASP.NET yapılandırma dosyalarıyla çalışmak için kullanılır. Bir Web sunucusundaki yapılandırma dosyalarıyla çalışacak şekilde tasarlanmıştır ve system.web gibi yapılandırma dosyası bölümlerine programlı erişim sağlar.

Uyarı

Çalışma zamanında yapılandırma dosyalarına erişmek için çağırana izin verilmesi gerekir; gerekli izinler uygulama türüne, yapılandırma dosyasına ve konuma bağlıdır. Daha fazla bilgi için bkz . Yapılandırma Sınıflarını Kullanma , WebConfigurationManager ASP.NET uygulamaları ve ConfigurationManager Windows uygulamaları için.

uygulamasını kullanarak ConnectionStringSettingsCollection uygulama yapılandırma dosyalarından bağlantı dizesi alabilirsiniz. Her biri ConnectionStringSettingsconnectionStrings bölümündeki tek bir girişi temsil eden bir nesne koleksiyonu içerir. Özellikler, bağlantı dizesi öznitelikleriyle eşleştirilir ve bu sayede adı veya sağlayıcı adını belirterek bir bağlantı dizesi almanıza olanak tanır.

Mülkiyet Description
Name bağlantı dizesi adı. Ad özniteliğine haritalar.
ProviderName Tüm nitelikli sağlayıcı adı. providerName özniteliği ile eşlenir.
ConnectionString Bağlantı dizesi. connectionString özniteliğine eşlenir.

Örnek: Tüm bağlantı dizelerini listeleme

Bu örnek ConnectionStringSettingsCollection öğesinde yineleme yapar ve konsol penceresinde ConnectionStringSettings.Name, ConnectionStringSettings.ProviderName ve ConnectionStringSettings.ConnectionString özelliklerini görüntüler.

Uyarı

System.Configuration.dll tüm proje türlerine dahil değildir ve yapılandırma sınıflarını kullanmak için buna bir başvuru ayarlamanız gerekebilir. Belirli bir uygulama yapılandırma dosyasının adı ve konumu, uygulama türüne ve barındırma işlemine göre değişir.

using System.Configuration;

class Program
{
    static void Main()
    {
        GetConnectionStrings();
        Console.ReadLine();
    }

    static void GetConnectionStrings()
    {
        ConnectionStringSettingsCollection settings =
            ConfigurationManager.ConnectionStrings;

        if (settings != null)
        {
            foreach(ConnectionStringSettings cs in settings)
            {
                Console.WriteLine(cs.Name);
                Console.WriteLine(cs.ProviderName);
                Console.WriteLine(cs.ConnectionString);
            }
        }
    }
}

Örnek: İsimle bağlantı dizesi alma

Bu örnekte, bir yapılandırma dosyasından adını belirterek bir bağlantı dizesi nasıl alınacağını gösterir. Kod, sağlanan giriş parametresini ConnectionStringSettings adla eşleştiren bir ConnectionStrings nesne oluşturur. Eşleşen ad bulunmazsa, işlev döndürür null (Nothing Visual Basic'te).

// Retrieves a connection string by name.
// Returns null if the name is not found.
static string GetConnectionStringByName(string name)
{
    // Assume failure.
    string returnValue = null;

    // Look for the name in the connectionStrings section.
    ConnectionStringSettings settings =
        ConfigurationManager.ConnectionStrings[name];

    // If found, return the connection string.
    if (settings != null)
        returnValue = settings.ConnectionString;

    return returnValue;
}

Örnek: Sağlayıcı adına göre bağlantı dizesi alma

Bu örnek, sağlayıcı adını Microsoft.Data.SqlClient biçiminde belirterek bir bağlantı dizesinin nasıl alınacağını gösterir. Kod, ConnectionStringSettingsCollection üzerinden yinelenir ve bulunan ilk ProviderName için bağlantı dizesini döndürür. Sağlayıcı adı bulunamazsa, işlev null döndürür (Visual Basic'te Nothing).

// Retrieve a connection string by specifying the providerName.
// Assumes one connection string per provider in the config file.
static string GetConnectionStringByProvider(string providerName)
{
    // Return null on failure.
    string returnValue = null;

    // Get the collection of connection strings.
    ConnectionStringSettingsCollection settings =
        ConfigurationManager.ConnectionStrings;

    // Walk through the collection and return the first
    // connection string matching the providerName.
    if (settings != null)
    {
        foreach (ConnectionStringSettings cs in settings)
        {
            if (cs.ProviderName == providerName)
                returnValue = cs.ConnectionString;
            break;
        }
    }
    return returnValue;
}

Korumalı yapılandırma kullanarak yapılandırma dosyası bölümlerini şifreleme

ASP.NET 2.0, bir yapılandırma dosyasındaki hassas bilgileri şifrelemenizi sağlayan korumalı yapılandırma adlı yeni bir özellik kullanıma sunulmuştur. Öncelikli olarak ASP.NET için tasarlanmış olsa da korumalı yapılandırma, Windows uygulamalarında yapılandırma dosyası bölümlerini şifrelemek için de kullanılabilir. Korumalı yapılandırma özelliklerinin ayrıntılı açıklaması için bkz. Korumalı Yapılandırma Kullanarak Yapılandırma Bilgilerini Şifreleme.

Aşağıdaki yapılandırma dosyası parçası, şifrelendikten sonra connectionStrings bölümünü gösterir. configProtectionProvider, bağlantı dizelerini şifrelemek ve şifresini çözmek için kullanılan korumalı yapılandırma sağlayıcısını belirtir. EncryptedData bölümü şifreleme metnini içerir.

<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">  
  <EncryptedData>  
    <CipherData>  
      <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAH2... </CipherValue>  
    </CipherData>  
  </EncryptedData>  
</connectionStrings>  

Şifrelenmiş bağlantı dizesi çalışma zamanında alındığında, .NET Framework Belirtilen sağlayıcıyı kullanarak CipherValue şifresini çözer ve uygulamanızın kullanımına sağlar. Şifre çözme işlemini yönetmek için ek kod yazmanız gerekmez.

Korumalı yapılandırma sağlayıcıları

Korumalı yapılandırma sağlayıcıları, .NET Framework ile sağlanan iki korumalı yapılandırma sağlayıcısını gösteren aşağıdaki parçada gösterildiği gibi yerel bilgisayardaki machine.config dosyasının configProtectedData bölümüne kaydedilir. Burada gösterilen değerler okunabilirlik için kesilmiştir.

<configProtectedData defaultProvider="RsaProtectedConfigurationProvider">  
  <providers>  
    <add name="RsaProtectedConfigurationProvider"
      type="System.Configuration.RsaProtectedConfigurationProvider" />  
    <add name="DataProtectionConfigurationProvider"
      type="System.Configuration.DpapiProtectedConfigurationProvider" />  
  </providers>  
</configProtectedData>  

Ek korumalı yapılandırma sağlayıcılarını machine.config dosyasına ekleyerek yapılandırabilirsiniz. Soyut temel sınıftan ProtectedConfigurationProvider devralarak kendi korumalı yapılandırma sağlayıcınızı da oluşturabilirsiniz. Aşağıdaki tabloda .NET Framework'e dahil edilen iki yapılandırma dosyası açıklanmaktadır.

Provider Description
RsaProtectedConfigurationProvider Verileri şifrelemek ve şifresini çözmek için RSA şifreleme algoritmasını kullanır. RSA algoritması hem ortak anahtar şifrelemesi hem de dijital imzalar için kullanılabilir. İki farklı anahtar içerdiği için "ortak anahtar" veya asimetrik şifreleme olarak da bilinir. Web.config dosyasındaki bölümleri şifrelemek ve şifreleme anahtarlarını yönetmek için ASP.NET IIS Kayıt Aracı'nı (Aspnet_regiis.exe) kullanabilirsiniz. ASP.NET, dosyayı işlerken yapılandırma dosyasının şifresini çözer. ASP.NET uygulamasının kimliği, şifrelenmiş bölümleri şifrelemek ve şifresini çözmek için kullanılan şifreleme anahtarına okuma erişimine sahip olmalıdır.
DpapiProtectedConfigurationProvider Yapılandırma bölümlerini şifrelemek için Windows Veri Koruma API'sini (DPAPI) kullanır. Windows yerleşik şifreleme hizmetlerini kullanır ve makineye veya kullanıcıya özgü koruma için yapılandırılabilir. Makineye özgü koruma, aynı sunucuda bilgi paylaşması gereken birden çok uygulama için kullanışlıdır. Kullanıcı hesabına özgü koruma, paylaşılan barındırma ortamı gibi belirli bir kullanıcı kimliğiyle çalışan hizmetlerle kullanılabilir. Her uygulama, dosyalar ve veritabanları gibi kaynaklara erişimi kısıtlayan ayrı bir kimlik altında çalışır.

Her iki sağlayıcı da güçlü veri şifrelemesi sunar. Ancak, web grubu gibi birden çok sunucuda aynı şifrelenmiş yapılandırma dosyasını kullanmayı planlıyorsanız, verileri şifrelemek ve bunları başka bir sunucuya aktarmak için kullanılan şifreleme anahtarlarını dışarı aktarmanıza yalnızca RsaProtectedConfigurationProvider bu olanak sağlar. Daha fazla bilgi için bkz Korumalı Yapılandırma RSA Anahtar Kapsayıcılarını İçeri ve Dışarı Aktarma.

Yapılandırma sınıflarını kullanma

Ad System.Configuration ad alanı, yapılandırma ayarları üzerinde programlar aracılığıyla çalışabilmek için sınıflar sağlar. ConfigurationManager sınıfı makine, uygulama ve kullanıcı yapılandırma dosyalarına erişim sağlar. bir ASP.NET uygulaması oluşturuyorsanız, aynı işlevselliği sağlarken system.web'de bulunanlarWebConfigurationManager gibi ASP.NET uygulamalara özgü ayarlara da erişmenizi sağlayan sınıfını kullanabilirsiniz<.>

Uyarı

Ad System.Security.Cryptography alanı, verileri şifrelemek ve şifresini çözmek için ek seçenekler sağlayan sınıflar içerir. Korumalı yapılandırma kullanılarak kullanılamayan şifreleme hizmetlerine ihtiyacınız varsa bu sınıfları kullanın. Bu sınıflardan bazıları yönetilmeyen Microsoft CryptoAPI için sarmalayıcılardır, diğerleri ise tamamen yönetilen uygulamalardır. Daha fazla bilgi için bkz . Şifreleme Hizmetleri.

App.config örnek

Bu örnekte, bir Windows uygulaması için app.config dosyasında connectionStrings bölümünün şifrelenmesine nasıl geçiş yapılacağını gösterilmektedir. Bu örnekte yordam, uygulamanın adını bağımsız değişken olarak alır, örneğin, "MyApplication.exe". app.config dosyası şifrelenir ve "MyApplication.exe.config" adı altında yürütülebilir dosyayı içeren klasöre kopyalanır.

Uyarı

Bağlantı dizesinin şifresi yalnızca şifrelendiği bilgisayarda çözülebilir.

Kod, OpenExeConfiguration yöntemini kullanarak app.config dosyasını düzenleme için açar ve GetSection yöntemi connectionStrings bölümünü döndürür. Kod daha sonra IsProtected özelliğini denetler ve eğer bölüm şifrelenmemişse, o bölümü şifrelemek için ProtectSection öğesini çağırır. UnprotectSection yöntemi, bölümün şifresini çözmek için çağrılır. Save yöntemi işlemi tamamlar ve değişiklikleri kaydeder.

Uyarı

Kodun çalışması için projenizde System.Configuration.dll başvurusu ayarlamanız gerekir.

static void ToggleConfigEncryption(string exeFile)
{
    // Takes the executable file name without the
    // .config extension.
    try
    {
        // Open the configuration file and retrieve
        // the connectionStrings section.
        Configuration config = ConfigurationManager.
            OpenExeConfiguration(exeConfigName);

        ConnectionStringsSection section =
            config.GetSection("connectionStrings")
            as ConnectionStringsSection;

        if (section.SectionInformation.IsProtected)
        {
            // Remove encryption.
            section.SectionInformation.UnprotectSection();
        }
        else
        {
            // Encrypt the section.
            section.SectionInformation.ProtectSection(
                "DataProtectionConfigurationProvider");
        }
        // Save the current configuration.
        config.Save();

        Console.WriteLine("Protected={0}",
            section.SectionInformation.IsProtected);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

Web.config örnek

Bu örnekte OpenWebConfiguration yöntemi WebConfigurationManager kullanır. Bu durumda tilde kullanarak Web.config dosyasının göreli yolunu sağlayabildiğinizi unutmayın. Kod, System.Web.Configuration sınıfına bir başvuru gerektirir.

static void ToggleWebEncrypt()
{
    // Open the Web.config file.
    Configuration config = WebConfigurationManager.
        OpenWebConfiguration("~");

    // Get the connectionStrings section.
    ConnectionStringsSection section =
        config.GetSection("connectionStrings")
        as ConnectionStringsSection;

    // Toggle encryption.
    if (section.SectionInformation.IsProtected)
    {
        section.SectionInformation.UnprotectSection();
    }
    else
    {
        section.SectionInformation.ProtectSection(
            "DataProtectionConfigurationProvider");
    }

    // Save changes to the Web.config file.
    config.Save();
}

ASP.NET uygulamaların güvenliğini sağlama hakkında daha fazla bilgi için bkz . ASP.NET web sitelerinin güvenliğini sağlama.

Ayrıca bakınız