Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: .NET Framework
.NET
Osadzanie parametry połączenia w kodzie aplikacji może prowadzić do problemów z lukami w zabezpieczeniach i konserwacją. Niezaszyfrowane parametry połączenia skompilowane w kodzie źródłowym aplikacji można wyświetlić przy użyciu narzędzia Ildasm.exe (IL Dezasembler). Ponadto jeśli parametry połączenia kiedykolwiek się zmieni, aplikacja musi zostać ponownie skompilowana. Z tych powodów zalecamy przechowywanie parametry połączenia w pliku konfiguracji aplikacji.
Praca z plikami konfiguracji aplikacji
Pliki konfiguracji aplikacji zawierają ustawienia specyficzne dla określonej aplikacji. Na przykład aplikacja ASP.NET może mieć co najmniej jeden plik web.config , a aplikacja systemu Windows może mieć opcjonalny plik app.config . Pliki konfiguracji mają wspólne elementy, chociaż nazwa i lokalizacja pliku konfiguracji różnią się w zależności od hosta aplikacji.
Sekcja „connectionStrings”
Parametry połączenia mogą być przechowywane jako pary klucz/wartość w sekcji connectionStrings elementu konfiguracji pliku konfiguracji aplikacji. Elementy podrzędne obejmują dodawanie, czyszczenie i usuwanie.
Poniższy fragment pliku konfiguracji przedstawia schemat i składnię do przechowywania ciągu połączenia. Atrybut name to nazwa, którą podajesz, aby unikalnie identyfikować łańcuch połączenia, co pozwala na jego pobranie w czasie wykonywania. Nazwa dostawcy to Microsoft.Data.SqlClient z dostawcą danych Microsoft SqlClient dla SQL Server.
<?xml version='1.0' encoding='utf-8'?>
<configuration>
<connectionStrings>
<clear />
<add name="Name"
providerName="Microsoft.Data.SqlClient"
connectionString="Valid Connection String;" />
</connectionStrings>
</configuration>
Uwaga / Notatka
Część ciągu połączenia można zapisać w pliku konfiguracji i użyć klasy DbConnectionStringBuilder, aby uzupełnić go w czasie wykonywania. Jest to przydatne w scenariuszach, w których nie znasz elementów parametrów połączenia z wyprzedzeniem lub gdy nie chcesz zapisywać poufnych informacji w pliku konfiguracji. Aby uzyskać więcej informacji, zobacz Konstruktory ciągów połączeń.
Używanie zewnętrznych plików konfiguracji
Pliki konfiguracji zewnętrznej są oddzielnymi plikami, które zawierają fragment pliku konfiguracji składającego się z jednej sekcji. Plik konfiguracji zewnętrznej jest następnie przywołyyny przez główny plik konfiguracji. Przechowywanie sekcji connectionStrings w fizycznie oddzielnym pliku jest przydatne w sytuacjach, w których parametry połączenia mogą być edytowane po wdrożeniu aplikacji. Na przykład standardowe zachowanie ASP.NET polega na ponownym uruchomieniu domeny aplikacji po zmodyfikowaniu plików konfiguracji, co powoduje utratę informacji o stanie. Jednak modyfikowanie pliku konfiguracji zewnętrznej nie powoduje ponownego uruchomienia aplikacji. Pliki konfiguracji zewnętrznej nie są ograniczone do ASP.NET; mogą być one również używane przez aplikacje systemu Windows. Ponadto można użyć zabezpieczeń dostępu do plików i uprawnień w celu ograniczenia dostępu do zewnętrznych plików konfiguracji. Praca z zewnętrznymi plikami konfiguracji w czasie wykonywania jest przejrzysta i nie wymaga specjalnego kodowania.
Aby przechowywać parametry połączenia w zewnętrznym pliku konfiguracji, utwórz oddzielny plik zawierający tylko sekcję connectionStrings . Nie dołączaj żadnych dodatkowych elementów, sekcji ani atrybutów. W tym przykładzie przedstawiono składnię pliku konfiguracji zewnętrznej.
<connectionStrings>
<add name="Name"
providerName="Microsoft.Data.SqlClient"
connectionString="Valid Connection String;" />
</connectionStrings>
W głównym pliku konfiguracji aplikacji należy użyć atrybutu configSource , aby określić w pełni kwalifikowaną nazwę i lokalizację pliku zewnętrznego. W tym przykładzie odwołuje się do zewnętrznego pliku konfiguracji o nazwie connections.config.
<?xml version='1.0' encoding='utf-8'?>
<configuration>
<connectionStrings configSource="connections.config"/>
</configuration>
Pobieranie parametrów połączenia w czasie wykonywania
Program .NET Framework 2.0 wprowadził nowe klasy w System.Configuration przestrzeni nazw, aby uprościć pobieranie parametrów połączenia z plików konfiguracji w czasie wykonywania. Można programowo pobrać parametry połączenia według nazwy lub nazwy dostawcy.
Uwaga / Notatka
Plik machine.config zawiera również sekcję connectionStrings , która zawiera parametry połączenia używane przez program Visual Studio. Podczas pobierania parametrów połączenia według nazwy dostawcy z pliku app.config w aplikacji systemu Windows parametry połączenia w machine.config są ładowane najpierw, a następnie wpisy z app.config. Dodanie wyczyść bezpośrednio po elemencie connectionStrings usuwa wszystkie dziedziczone odwołania ze struktury danych w pamięci, dzięki czemu uwzględniane są tylko parametry połączenia zdefiniowane w lokalnym pliku app.config .
Praca z plikami konfiguracji
Począwszy od programu .NET Framework 2.0, ConfigurationManager jest używany podczas pracy z plikami konfiguracji na komputerze lokalnym, zastępując przestarzały ConfigurationSettings. WebConfigurationManager służy do pracy z plikami konfiguracji ASP.NET. Jest przeznaczony do pracy z plikami konfiguracji na serwerze sieci Web i umożliwia programowy dostęp do sekcji plików konfiguracji, takich jak system.web.
Uwaga / Notatka
Uzyskiwanie dostępu do plików konfiguracji w czasie wykonywania wymaga udzielenia uprawnień do wywołującego; wymagane uprawnienia zależą od typu aplikacji, pliku konfiguracji i lokalizacji. Aby uzyskać więcej informacji, zobacz Używanie klas konfiguracji dla aplikacji ASP.NET WebConfigurationManager oraz dla aplikacji systemu Windows ConfigurationManager.
Możesz użyć polecenia ConnectionStringSettingsCollection , aby pobrać parametry połączenia z plików konfiguracji aplikacji. Zawiera kolekcję ConnectionStringSettings obiektów, z których każda reprezentuje pojedynczy wpis w sekcji connectionStrings . Jego właściwości są mapowane na atrybuty ciągu połączenia, co umożliwia pobranie ciągu połączenia poprzez określenie nazwy lub nazwy dostawcy.
| Majątek | Description |
|---|---|
| Name | Nazwa ciągu połączenia. Odwzorowuje atrybut name. |
| ProviderName | W pełni kwalifikowana nazwa dostawcy. Mapuje atrybut providerName . |
| ConnectionString | Ciąg połączenia. Odpowiada atrybutowi connectionString. |
Przykład: wyświetlanie listy wszystkich parametrów połączenia
W tym przykładzie iterujemy przez ConnectionStringSettingsCollection i wyświetlamy właściwości ConnectionStringSettings.Name, ConnectionStringSettings.ProviderName i ConnectionStringSettings.ConnectionString w oknie konsoli.
Uwaga / Notatka
System.Configuration.dll nie jest uwzględniana we wszystkich typach projektów i może być konieczne ustawienie odwołania do niego w celu używania klas konfiguracji. Nazwa i lokalizacja określonego pliku konfiguracji aplikacji różnią się w zależności od typu aplikacji i procesu hostingu.
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);
}
}
}
}
Przykład: pobieranie parametrów połączenia według nazwy
W tym przykładzie pokazano, jak pobrać parametry połączenia z pliku konfiguracji, określając jego nazwę. Kod tworzy obiekt ConnectionStringSettings, dopasowując podany parametr wejściowy do nazwy ConnectionStrings. Jeśli nie zostanie znaleziona zgodna nazwa, funkcja zwróci null (Nothing w Visual Basic).
// 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;
}
Przykład: pobieranie parametrów połączenia według nazwy dostawcy
W tym przykładzie pokazano, jak pobrać parametry połączenia, określając nazwę dostawcy w formacie Microsoft.Data.SqlClient. Kod iteruje przez ConnectionStringSettingsCollection i zwraca łańcuch połączenia dla pierwszego znalezionego ProviderName. Jeśli nazwa dostawcy nie zostanie znaleziona, funkcja zwróci null (Nothing w 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)
{
// 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;
}
Szyfruj sekcje plików konfiguracji przy użyciu konfiguracji chronionej
ASP.NET 2.0 wprowadzono nową funkcję nazywaną konfiguracją chronioną, która umożliwia szyfrowanie poufnych informacji w pliku konfiguracji. Mimo że jest przeznaczona głównie do ASP.NET, chroniona konfiguracja może być również używana do szyfrowania sekcji plików konfiguracji w aplikacjach systemu Windows. Aby uzyskać szczegółowy opis funkcji konfiguracji chronionej, zobacz Szyfrowanie informacji o konfiguracji przy użyciu chronionej konfiguracji.
Poniższy fragment pliku konfiguracji przedstawia sekcję connectionStrings po zaszyfrowaniu. Element configProtectionProvider określa chronionego dostawcę konfiguracji używanego do szyfrowania i odszyfrowywania parametrów połączenia. Sekcja EncryptedData zawiera tekst szyfrowania.
<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData>
<CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAH2... </CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>
Po pobraniu zaszyfrowanych parametrów połączenia w czasie wykonywania program .NET Framework używa określonego dostawcy do odszyfrowywania wartości CipherValue i udostępniania jej aplikacji. Nie trzeba pisać żadnego dodatkowego kodu w celu zarządzania procesem odszyfrowywania.
Chronieni dostawcy konfiguracji
Chronieni dostawcy konfiguracji są zarejestrowani w sekcji configProtectedData pliku machine.config na komputerze lokalnym, jak pokazano w poniższym fragmencie, który pokazuje dwóch chronionych dostawców konfiguracji dostarczonych z programem .NET Framework. Pokazane tutaj wartości zostały obcięte pod kątem czytelności.
<configProtectedData defaultProvider="RsaProtectedConfigurationProvider">
<providers>
<add name="RsaProtectedConfigurationProvider"
type="System.Configuration.RsaProtectedConfigurationProvider" />
<add name="DataProtectionConfigurationProvider"
type="System.Configuration.DpapiProtectedConfigurationProvider" />
</providers>
</configProtectedData>
Można skonfigurować dodatkowych chronionych dostawców konfiguracji, dodając ich do pliku machine.config . Możesz również utworzyć własnego chronionego dostawcę konfiguracji, dziedzicząc z abstrakcyjnej klasy bazowej ProtectedConfigurationProvider . W poniższej tabeli opisano dwa pliki konfiguracji dołączone do programu .NET Framework.
| Provider | Description |
|---|---|
| RsaProtectedConfigurationProvider | Używa algorytmu szyfrowania RSA do szyfrowania i odszyfrowywania danych. Algorytm RSA może służyć zarówno do szyfrowania klucza publicznego, jak i podpisów cyfrowych. Jest on również nazywany "kluczem publicznym" lub szyfrowaniem asymetrycznym, ponieważ stosuje dwa różne klucze. Aby zaszyfrować sekcje w pliku Web.config i zarządzać kluczami szyfrowania, można użyć narzędzia ASP.NET rejestracji usług IIS (Aspnet_regiis.exe ). ASP.NET odszyfrowuje plik konfiguracji podczas przetwarzania pliku. Tożsamość aplikacji ASP.NET musi mieć dostęp do odczytu klucza szyfrowania, służącego do szyfrowania i odszyfrowywania zaszyfrowanych sekcji. |
| DpapiProtectedConfigurationProvider | Używa interfejsu API ochrony danych systemu Windows (DPAPI) do szyfrowania sekcji konfiguracji. Korzysta z wbudowanych usług kryptograficznych systemu Windows i można je skonfigurować pod kątem ochrony specyficznej dla maszyny lub konta użytkownika. Ochrona specyficzna dla maszyny jest przydatna w przypadku wielu aplikacji na tym samym serwerze, które muszą udostępniać informacje. Ochrona specyficzna dla konta użytkownika może być używana z usługami, które są uruchamiane z określoną tożsamością użytkownika, taką jak udostępnione środowisko hostingu. Każda aplikacja działa w ramach oddzielnej tożsamości, która ogranicza dostęp do zasobów, takich jak pliki i bazy danych. |
Oba dostawcy oferują silne szyfrowanie danych. Jeśli jednak planujesz użyć tego samego zaszyfrowanego pliku konfiguracji na wielu serwerach, takich jak farma sieci Web, tylko RsaProtectedConfigurationProvider program umożliwia eksportowanie kluczy szyfrowania używanych do szyfrowania danych i importowanie ich na innym serwerze. Aby uzyskać więcej informacji, zobacz Importowanie i eksportowanie kontenerów kluczy RSA w chronionej konfiguracji.
Używanie klas konfiguracji
System.Configuration Przestrzeń nazw udostępnia klasy do programowej pracy z ustawieniami konfiguracji. Klasa ConfigurationManager zapewnia dostęp do plików konfiguracji komputera, aplikacji i użytkownika. Jeśli tworzysz aplikację ASP.NET, możesz użyć WebConfigurationManager klasy , która zapewnia te same funkcje, a także umożliwia dostęp do ustawień unikatowych dla ASP.NET aplikacji, takich jak te znajdujące się w <pliku system.web>.
Uwaga / Notatka
System.Security.Cryptography Przestrzeń nazw zawiera klasy, które zapewniają dodatkowe opcje szyfrowania i odszyfrowywania danych. Użyj tych klas, jeśli potrzebujesz usług kryptograficznych, które nie są dostępne przy użyciu konfiguracji chronionej. Niektóre z tych klas są otoczkami dla niezarządzanego Microsoft CryptoAPI, podczas gdy inne są wyłącznie implementacjami zarządzanymi. Aby uzyskać więcej informacji, zobacz Usługi kryptograficzne.
przykład "App.config"
W tym przykładzie pokazano, jak przełączać szyfrowanie sekcji connectionStrings w pliku app.config dla aplikacji systemu Windows. W tym przykładzie procedura przyjmuje nazwę aplikacji jako argument, na przykład "MyApplication.exe". Następnie plik app.config zostanie zaszyfrowany i skopiowany do folderu zawierającego plik wykonywalny pod nazwą "MyApplication.exe.config".
Uwaga / Notatka
Parametry połączenia można odszyfrować tylko na komputerze, na którym został zaszyfrowany.
Kod używa OpenExeConfiguration metody , aby otworzyć plik app.config do edycji, a GetSection metoda zwraca sekcję connectionStrings . Następnie kod sprawdza właściwość IsProtected i wywołuje metodę ProtectSection w celu zaszyfrowania sekcji, jeśli nie jest ona zaszyfrowana. Metoda UnprotectSection jest wywoływana w celu odszyfrowania sekcji. Metoda Save kończy operację i zapisuje zmiany.
Uwaga / Notatka
Aby kod działał, należy ustawić odwołanie do System.Configuration.dll w projekcie.
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);
}
}
przykład Web.config
W tym przykładzie wykorzystano metodę OpenWebConfiguration z WebConfigurationManager. Należy pamiętać, że w tym przypadku można podać ścieżkę względną do pliku Web.config przy użyciu tyldy. Kod wymaga odwołania do System.Web.Configuration klasy.
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();
}
Aby uzyskać więcej informacji na temat zabezpieczania aplikacji ASP.NET, zobacz Zabezpieczanie witryn internetowych ASP.NET.