Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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.
Önemli
Microsoft, kullanılabilir en güvenli kimlik doğrulama akışını kullanmanızı önerir. Azure SQL'e bağlanıyorsanız önerilen kimlik doğrulama yöntemi Azure kaynakları için Yönetilen Kimlikler'dir.
Uygulama Yapılandırma Dosyaları
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.
Bölüm connectionStrings
Bağlantı dizeleri, bir uygulama yapılandırma dosyasının öğesinin connectionStringsconfiguration 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, çalışma zamanında alınabilmesi için bir bağlantı dizesini benzersiz olarak tanımlamak için sağladığınız bir addır.
providerName, machine.config dosyasında kayıtlı olan .NET Framework veri sağlayıcısının sabit adıdır.
<?xml version='1.0' encoding='utf-8'?>
<configuration>
<connectionStrings>
<clear />
<add name="Name"
providerName="System.Data.ProviderName"
connectionString="Valid Connection String;" />
</connectionStrings>
</configuration>
Not
Bağlantı dizesinin bir bölümünü bir yapılandırma dosyasına kaydedebilir ve çalışma zamanında tamamlamak için sınıfını DbConnectionStringBuilder kullanabilirsiniz. Bu, bağlantı dizesi öğ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. Bölümü fiziksel olarak ayrı bir dosyada depolamak connectionStrings , uygulama dağıtıldıktan sonra bağlantı dizelerinin düzenlenebileceği durumlarda kullanışlı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="System.Data.ProviderName"
connectionString="Valid Connection String;" />
</connectionStrings>
Ana uygulama yapılandırma dosyasında, dış dosyanın tam adını ve konumunu belirtmek için özniteliğini kullanırsınız configSource . 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 almayı kolaylaştırmak için System.Configuration ad alanında yeni sınıflar tanıttı. Bir bağlantı dizesini ada veya sağlayıcı adına göre programlı olarak alabilirsiniz.
Not
machine.config dosyası, Visual Studio tarafından kullanılan bağlantı dizelerini içeren bir connectionStrings bölüm de içerir. Bir Windows uygulamasındaki app.config dosyasından sağlayıcı adına göre bağlantı dizesi alınırken, önce machine.config'daki bağlantı dizeleri, ardından app.config'den gelen girdiler yüklenir. clear, connectionStrings öğesinin hemen sonrasında eklendiğinde bellekteki veri yapısında devralınan tüm başvuruları kaldırır, böylece yalnızca yerel app.config dosyasında tanımlanan bağlantı dizeleri dikkate alınır.
Yapılandırma Sınıfları ile çalışma
.NET Framework 2.0'dan başlayarak, ConfigurationManager yerel bilgisayarda yapılandırma dosyalarıyla çalışırken kullanım dışı bırakılmış ConfigurationSettings sınıfın yerine kullanılı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.
Not
Ç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 WebConfigurationManager . ASP.NET uygulamaları ve ConfigurationManager Windows uygulamaları için.
uygulamasını kullanarak ConnectionStringSettingsCollection uygulama yapılandırma dosyalarından bağlantı dizesi alabilirsiniz.
ConnectionStringSettings bölümünde tek bir girişi temsil eden her bir connectionStrings nesne koleksiyonunu 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ülk / Emlak | Açıklama |
|---|---|
| Name | bağlantı dizesi adı.
name özniteliği ile eşleşir. |
| ProviderName | Tüm nitelikli sağlayıcı adı.
providerName özniteliği ile eşleşir. |
| ConnectionString | Bağlantı dizesi.
connectionString özniteliği ile eşleşir. |
Örnek: Tüm Bağlantı Dizelerini Listele
Bu örnek ConnectionStringSettingsCollection öğesinde yineleme yapar ve konsol penceresinde ConnectionStringSettings.Name, ConnectionStringSettings.ProviderName ve ConnectionStringSettings.ConnectionString özelliklerini görüntüler.
Not
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;
static class Program
{
static void Main()
{
GetConnectionStrings();
Console.ReadLine();
}
static void GetConnectionStrings()
{
ConnectionStringSettingsCollection settings =
ConfigurationManager.ConnectionStrings;
foreach (ConnectionStringSettings cs in settings)
{
Console.WriteLine(cs.Name);
Console.WriteLine(cs.ProviderName);
Console.WriteLine(cs.ConnectionString);
}
}
}
Imports System.Configuration
Class Program
Shared Sub Main()
GetConnectionStrings()
Console.ReadLine()
End Sub
Private Shared Sub GetConnectionStrings()
Dim settings As ConnectionStringSettingsCollection = _
ConfigurationManager.ConnectionStrings
If Not settings Is Nothing Then
For Each cs As ConnectionStringSettings In settings
Console.WriteLine(cs.Name)
Console.WriteLine(cs.ProviderName)
Console.WriteLine(cs.ConnectionString)
Next
End If
End Sub
End Class
Örnek: İsme Göre 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)
{
// Look for the name in the connectionStrings section.
ConnectionStringSettings? settings =
ConfigurationManager.ConnectionStrings[name];
// If found, return the connection string (otherwise return null)
return settings?.ConnectionString;
}
' Retrieves a connection string by name.
' Returns Nothing if the name is not found.
Private Shared Function GetConnectionStringByName( _
ByVal name As String) As String
' Assume failure
Dim returnValue As String = Nothing
' Look for the name in the connectionStrings section.
Dim settings As ConnectionStringSettings = _
ConfigurationManager.ConnectionStrings(name)
' If found, return the connection string.
If Not settings Is Nothing Then
returnValue = settings.ConnectionString
End If
Return returnValue
End Function
Örnek: Sağlayıcı Adına Göre Bağlantı Dizesi Alma
Bu örnekte, System.Data.ProviderName biçiminde sağlayıcı sabit adını belirterek bir bağlantı dizesi 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)
{
// 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)
{
return cs.ConnectionString;
}
}
}
return null;
}
' Retrieve a connection string by specifying the providerName.
' Assumes one connection string per provider in the config file.
Private Shared Function GetConnectionStringByProvider( _
ByVal providerName As String) As String
'Return Nothing on failure.
Dim returnValue As String = Nothing
' Get the collection of connection strings.
Dim settings As ConnectionStringSettingsCollection = _
ConfigurationManager.ConnectionStrings
' Walk through the collection and return the first
' connection string matching the providerName.
If Not settings Is Nothing Then
For Each cs As ConnectionStringSettings In settings
If cs.ProviderName = providerName Then
returnValue = cs.ConnectionString
Exit For
End If
Next
End If
Return returnValue
End Function
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.
Aşağıdaki yapılandırma dosyası parçası, şifrelenmiş haliyle 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ünde şifre metni yer alır.
<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 şifresini çözer ve CipherValue uygulamanızın kullanımına sunar. Ş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 configProtectedData dosyasının 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 ile birlikte gelen iki yapılandırma dosyası açıklanmaktadır.
| Sağlayıcı | Açıklama |
|---|---|
| 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<.>
Not
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.
App.config Örneği
Bu örnekte, bir Windows uygulaması için connectionStrings dosyasındaki bölümü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ı daha sonra şifrelenir ve "MyApplication.exe.config" adı altında yürütülebilir dosyayı içeren klasöre kopyalanır.
Kod, OpenExeConfiguration'ni kullanarak app.config dosyasını düzenleme için açar ve GetSectionconnectionStrings 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. (bağlantı dizesi yalnızca şifrelendiği bilgisayarda çözülebilir.) Save yöntemi işlemi tamamlar ve değişiklikleri kaydeder.
Kodun çalışması için System.Configuration.dll projenize bir referans eklemeniz gerekir.
Önemli
Microsoft, kullanılabilir en güvenli kimlik doğrulama akışını kullanmanızı önerir. Azure SQL'e bağlanıyorsanız önerilen kimlik doğrulama yöntemi Azure kaynakları için Yönetilen Kimlikler'dir.
static void ToggleConfigEncryption(string exeFile)
{
// Get the application path needed to obtain
// the application configuration file.
// Takes the executable file name without the
// .config extension.
var exePath = exeFile.Replace(".config", "");
try
{
// Open the configuration file and retrieve
// the connectionStrings section.
Configuration config = ConfigurationManager.
OpenExeConfiguration(exePath);
var section =
config.GetSection("connectionStrings")
as ConnectionStringsSection;
if (section != null)
{
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={section?.SectionInformation.IsProtected}");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Shared Sub ToggleConfigEncryption(ByVal exeConfigName As String)
' Takes the executable file name without the
' .config extension.
Try
' Open the configuration file and retrieve
' the connectionStrings section.
Dim config As Configuration = ConfigurationManager. _
OpenExeConfiguration(exeConfigName)
Dim section As ConnectionStringsSection = DirectCast( _
config.GetSection("connectionStrings"), _
ConnectionStringsSection)
If section.SectionInformation.IsProtected Then
' Remove encryption.
section.SectionInformation.UnprotectSection()
Else
' Encrypt the section.
section.SectionInformation.ProtectSection( _
"DataProtectionConfigurationProvider")
End If
' Save the current configuration.
config.Save()
Console.WriteLine("Protected={0}", _
section.SectionInformation.IsProtected)
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
End Sub
Web.config Örneği
Bu örnekte OpenWebConfiguration yöntemi WebConfigurationManager kullanır. Bu durumda, tilde kullanarak Web.config dosyasının göreli yolunu sağlayabilirsiniz. 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.
var 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();
}
Shared Sub ToggleWebEncrypt()
' Open the Web.config file.
Dim config As Configuration = WebConfigurationManager. _
OpenWebConfiguration("~")
' Get the connectionStrings section.
Dim section As ConnectionStringsSection = DirectCast( _
config.GetSection("connectionStrings"), _
ConnectionStringsSection)
' Toggle encryption.
If section.SectionInformation.IsProtected Then
section.SectionInformation.UnprotectSection()
Else
section.SectionInformation.ProtectSection( _
"DataProtectionConfigurationProvider")
End If
' Save changes to the Web.config file.
config.Save()
End Sub
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.