Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Vkládání připojovací řetězec do kódu aplikace může vést k ohrožením zabezpečení a problémům s údržbou. Nešifrované připojovací řetězce zkompilované do zdrojového kódu aplikace lze zobrazit pomocí nástroje Ildasm.exe (IL Disassembler). Pokud se navíc připojovací řetězec někdy změní, musí se vaše aplikace znovu zkompilovat. Z těchto důvodů doporučujeme ukládat připojovací řetězec do konfiguračního souboru aplikace.
Důležité
Microsoft doporučuje používat nejbezpečnější dostupný tok ověřování. Pokud se připojujete k Azure SQL, doporučenou metodou ověřování jsou spravované identity pro prostředky Azure.
Konfigurační soubory aplikace
Konfigurační soubory aplikace obsahují nastavení specifická pro konkrétní aplikaci. Například aplikace ASP.NET může mít jeden nebo více souborů web.config a aplikace pro Windows může mít volitelný soubor app.config . Konfigurační soubory sdílejí společné prvky, i když se název a umístění konfiguračního souboru liší v závislosti na hostiteli aplikace.
Oddíl connectionStrings
Připojovací řetězce lze uložit jako páry klíč/hodnota v connectionStrings části configuration prvku konfiguračního souboru aplikace. Mezi podřízené prvky patří přidání, vymazání a odebrání.
Následující část konfiguračního souboru ukazuje schéma a syntaxi pro uložení připojovacího řetězce. Atribut name je název, který zadáte k jedinečné identifikaci připojovacího řetězce, aby se mohl načíst za běhu. Jedná se providerName o invariantní název zprostředkovatele dat rozhraní .NET Framework, který je registrován v machine.config souboru.
<?xml version='1.0' encoding='utf-8'?>
<configuration>
<connectionStrings>
<clear />
<add name="Name"
providerName="System.Data.ProviderName"
connectionString="Valid Connection String;" />
</connectionStrings>
</configuration>
Poznámka:
Část připojovacího řetězce můžete uložit do konfiguračního souboru a pomocí DbConnectionStringBuilder třídy ji dokončit za běhu. To je užitečné ve scénářích, kdy neznáte prvky připojovací řetězec předem nebo když nechcete ukládat citlivé informace do konfiguračního souboru. Další informace naleznete v tématu Tvůrci řetězců připojení.
Použití externích konfiguračních souborů
Externí konfigurační soubory jsou samostatné soubory, které obsahují fragment konfiguračního souboru, který se skládá z jedné části. Na externí konfigurační soubor se pak odkazuje hlavní konfigurační soubor. Uložení oddílu connectionStrings do fyzicky samostatného souboru je užitečné v situacích, kdy se po nasazení aplikace můžou upravit připojovací řetězce. Standardním chováním ASP.NET je například restartování domény aplikace při změně konfiguračních souborů, což vede ke ztrátě informací o stavu. Úprava externího konfiguračního souboru ale nezpůsobí restartování aplikace. Externí konfigurační soubory nejsou omezeny na ASP.NET; můžou je také používat aplikace systému Windows. Kromě toho lze zabezpečení a oprávnění přístupu k souborům použít k omezení přístupu k externím konfiguračním souborům. Práce s externími konfiguračními soubory za běhu je transparentní a nevyžaduje žádné speciální kódování.
Pokud chcete připojovací řetězce uložit do externího konfiguračního souboru, vytvořte samostatný soubor, který obsahuje pouze connectionStrings oddíl. Nezahrnujte žádné další prvky, oddíly ani atributy. Tento příklad ukazuje syntaxi externího konfiguračního souboru.
<connectionStrings>
<add name="Name"
providerName="System.Data.ProviderName"
connectionString="Valid Connection String;" />
</connectionStrings>
V hlavním konfiguračním souboru aplikace použijete configSource atribut k určení plně kvalifikovaného názvu a umístění externího souboru. Tento příklad odkazuje na externí konfigurační soubor s názvem connections.config.
<?xml version='1.0' encoding='utf-8'?>
<configuration>
<connectionStrings configSource="connections.config"/>
</configuration>
Načtení připojovacích řetězců během spuštění
Rozhraní .NET Framework 2.0 zavedlo nové třídy v System.Configuration oboru názvů, které zjednodušují načítání připojovacích řetězců z konfiguračních souborů za běhu. Připojovací řetězec můžete načíst programově podle názvu nebo názvu poskytovatele.
Poznámka:
Soubor machine.config obsahuje connectionStrings také oddíl, který obsahuje připojovací řetězce používané sadou Visual Studio. Při načítání připojovacích řetězců podle názvu poskytovatele ze souboru app.config v aplikaci systému Windows se nejprve načtou připojovací řetězce v machine.config a potom položky z app.config. Přidání clear bezprostředně po elementu connectionStrings odstraní všechny zděděné odkazy z datové struktury v paměti, takže se zohledňují pouze připojovací řetězce definované v místním app.config.
Práce s konfiguračními třídami
Počínaje rozhraním .NET Framework 2.0 ConfigurationManager se používá při práci s konfiguračními soubory na místním počítači a nahrazuje zastaralou ConfigurationSettings třídu. WebConfigurationManager slouží k práci s konfiguračními soubory ASP.NET. Je navržený tak, aby fungoval s konfiguračními soubory na webovém serveru a umožňuje programový přístup k oddílům konfiguračních souborů, jako je system.web.
Poznámka:
Přístup ke konfiguračním souborům za běhu vyžaduje udělení oprávnění volajícímu; požadovaná oprávnění závisí na typu aplikace, konfiguračního souboru a umístění. Další informace najdete v tématu WebConfigurationManager o ASP.NET aplikacích a ConfigurationManager aplikacích pro Windows.
Můžete použít ConnectionStringSettingsCollection k načtení připojovacích řetězců z konfiguračních souborů aplikací. Obsahuje kolekci ConnectionStringSettings objektů, z nichž každá představuje jednu položku v oddílu connectionStrings . Jeho vlastnosti se mapují na atributy připojovacího řetězce, což vám umožní získat připojovací řetězec zadáním názvu nebo jména poskytovatele.
| Vlastnost | Popis |
|---|---|
| Name | Název připojovacího řetězce. Mapuje na atribut name. |
| ProviderName | Plně kvalifikovaný název zprostředkovatele. Mapuje na atribut providerName. |
| ConnectionString | Připojovací řetězec Mapuje na atribut connectionString. |
Příklad: Výpis všech připojovacích řetězců
Tento příklad prochází ConnectionStringSettingsCollection a zobrazuje vlastnosti ConnectionStringSettings.Name, ConnectionStringSettings.ProviderName a ConnectionStringSettings.ConnectionString v okně konzoly.
Poznámka:
System.Configuration.dll není součástí všech typů projektů a možná budete muset nastavit odkaz na něj, aby bylo možné používat třídy konfigurace. Název a umístění konkrétního konfiguračního souboru aplikace se liší podle typu aplikace a procesu hostování.
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
Příklad: Načtení připojovacího řetězce podle názvu
Tento příklad ukazuje, jak načíst připojovací řetězec z konfiguračního souboru zadáním jeho názvu. Kód vytvoří objekt ConnectionStringSettings, který přiřazuje zadanému vstupnímu parametru jméno ConnectionStrings. Pokud se nenajde žádný odpovídající název, vrátí null funkce (Nothing v jazyce Visual Basic).
// 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
Příklad: Načtení připojovacího řetězce podle názvu zprostředkovatele
Tento příklad ukazuje, jak načíst připojovací řetězec zadáním invariantní název zprostředkovatele ve formátu System.Data.ProviderName. Kód prochází ConnectionStringSettingsCollection a vrací připojovací řetězec pro první nalezený ProviderName. Pokud se název zprostředkovatele nenajde, vrátí null funkce (Nothing v jazyce Visual Basic).
// 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
Šifrování oddílů konfiguračních souborů pomocí chráněné konfigurace
ASP.NET 2.0 zavedla novou funkci označovanou jako chráněná konfigurace, která umožňuje šifrovat citlivé informace v konfiguračním souboru. I když je primárně určená pro ASP.NET, chráněná konfigurace se dá použít také k šifrování oddílů konfiguračních souborů v aplikacích pro Windows.
Následující fragment konfiguračního connectionStrings souboru ukazuje oddíl po zašifrování. Určuje configProtectionProvider zprostředkovatele chráněné konfigurace, který se používá k šifrování a dešifrování připojovacích řetězců. Oddíl EncryptedData obsahuje šifrový text.
<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData>
<CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAH2... </CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
Při načtení šifrovaného připojovacího řetězce během provozu používá rozhraní .NET Framework zadaného zprostředkovatele k dešifrování CipherValue a zpřístupnění tohoto řetězce pro vaši aplikaci. Ke správě procesu dešifrování nemusíte psát žádný další kód.
Zprostředkovatelé chráněných konfigurací
Zprostředkovatelé chráněné konfigurace jsou zaregistrovaní v configProtectedData části souboru machine.config v místním počítači, jak je znázorněno v následujícím fragmentu, který ukazuje dva chráněné zprostředkovatele konfigurace dodané s rozhraním .NET Framework. Zde uvedené hodnoty byly zkráceny kvůli čitelnosti.
<configProtectedData defaultProvider="RsaProtectedConfigurationProvider">
<providers>
<add name="RsaProtectedConfigurationProvider"
type="System.Configuration.RsaProtectedConfigurationProvider" />
<add name="DataProtectionConfigurationProvider"
type="System.Configuration.DpapiProtectedConfigurationProvider" />
</providers>
</configProtectedData>
Další chráněné zprostředkovatele konfigurace můžete nakonfigurovat tak, že je přidáte do souboru machine.config . Můžete také vytvořit vlastního chráněného ProtectedConfigurationProvider zprostředkovatele konfigurace tak, že dědíte z abstraktní základní třídy. Následující tabulka popisuje dva konfigurační soubory, které jsou součástí rozhraní .NET Framework.
| Poskytovatel | Popis |
|---|---|
| RsaProtectedConfigurationProvider | Používá šifrovací algoritmus RSA k šifrování a dešifrování dat. Algoritmus RSA se dá použít pro šifrování veřejného klíče i digitální podpisy. Označuje se také jako "veřejný klíč" nebo asymetrické šifrování, protože využívá dva různé klíče. Pomocí nástroje ASP.NET IIS Registration Tool (Aspnet_regiis.exe) můžete zašifrovat oddíly v souboru Web.config a spravovat šifrovací klíče. ASP.NET při zpracování souboru dešifruje konfigurační soubor. Identita aplikace ASP.NET musí mít přístup pro čtení k šifrovacímu klíči, který se používá k šifrování a dešifrování šifrovaných oddílů. |
| DpapiProtectedConfigurationProvider | K šifrování částí konfigurace používá rozhraní API pro ochranu dat windows (DPAPI). Používá integrované kryptografické služby systému Windows a dá se nakonfigurovat pro ochranu specifickou pro počítač nebo pro konkrétní uživatelský účet. Ochrana specifická pro počítač je užitečná pro více aplikací na stejném serveru, které potřebují sdílet informace. Ochranu specifickou pro uživatelský účet je možné použít se službami, které běží s konkrétní identitou uživatele, například se sdíleným hostitelským prostředím. Každá aplikace běží pod samostatnou identitou, která omezuje přístup k prostředkům, jako jsou soubory a databáze. |
Oba poskytovatelé nabízejí silné šifrování dat. Pokud ale plánujete použít stejný šifrovaný konfigurační soubor na více serverech, jako je například webová farma, pouze RsaProtectedConfigurationProvider vám umožňuje exportovat šifrovací klíče použité k šifrování dat a importovat je na jiný server. Další informace najdete v tématu Importování a exportování chráněných konfiguračních kontejnerů klíčů RSA.
Použijte konfigurační třídy
Obor System.Configuration názvů poskytuje třídy pro práci s nastavením konfigurace prostřednictvím kódu programu. Třída ConfigurationManager poskytuje přístup k konfiguračním souborům počítače, aplikace a uživatele. Pokud vytváříte ASP.NET aplikaci, můžete použít WebConfigurationManager třídu, která poskytuje stejné funkce a zároveň umožňuje přístup k nastavením, která jsou jedinečná pro ASP.NET aplikace, jako jsou například aplikace nalezené v <system.web>.
Poznámka:
System.Security.Cryptography Obor názvů obsahuje třídy, které poskytují další možnosti pro šifrování a dešifrování dat. Tyto třídy použijte, pokud požadujete kryptografické služby, které nejsou k dispozici pomocí chráněné konfigurace. Některé z těchto tříd jsou obálky pro nespravované rozhraní Microsoft CryptoAPI, zatímco jiné jsou čistě spravované implementace.
Příklad app.config
Tento příklad ukazuje, jak přepnout šifrování oddílu connectionStrings v souboruapp.config pro aplikaci systému Windows. V tomto příkladu přebírá procedura název aplikace jako argument, například "MyApplication.exe". Soubor app.config se pak zašifruje a zkopíruje do složky, která obsahuje spustitelný soubor pod názvem "MyApplication.exe.config".
Kód používá metodu OpenExeConfiguration k otevření app.config souboru pro úpravy a GetSection metoda vrátí connectionStrings oddíl. Kód pak zkontroluje IsProtected vlastnost voláním ProtectSection pro zašifrování oddílu, pokud není zašifrován. Metoda UnprotectSection je vyvolána k dešifrování oddílu. (Připojovací řetězec lze dešifrovat pouze v počítači, na kterém byl zašifrován.) Metoda Save dokončí operaci a uloží změny.
Aby se kód spustil, musíte do System.Configuration.dll projektu přidat odkaz.
Důležité
Microsoft doporučuje používat nejbezpečnější dostupný tok ověřování. Pokud se připojujete k Azure SQL, doporučenou metodou ověřování jsou spravované identity pro prostředky Azure.
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
Příklad web.config
Tento příklad používá OpenWebConfiguration metodu WebConfigurationManager. V tomto případě můžete zadat relativní cestu k souboru Web.config pomocí tildy. Kód vyžaduje odkaz na System.Web.Configuration třídu.
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
Další informace o zabezpečení aplikací ASP.NET naleznete v tématu Zabezpečení ASP.NET webů.