Opbouwfuncties voor verbindingsreeksen
In eerdere versies van ADO.NET is het controleren van de compilatietijd van verbindingsreeks s met samengevoegde tekenreekswaarden niet opgetreden, zodat er tijdens runtime een onjuist trefwoord is gegenereerdArgumentException. Elk van de .NET Framework-gegevensproviders ondersteunde verschillende syntaxis voor verbindingsreeks trefwoorden, waardoor het maken van geldige verbindingsreeks s moeilijk is als u dit handmatig doet. Om dit probleem op te lossen, heeft ADO.NET 2.0 nieuwe verbindingsreeks builders geïntroduceerd voor elke .NET Framework-gegevensprovider. Elke gegevensprovider bevat een sterk getypte verbindingsreeks builder-klasse die overneemt van DbConnectionStringBuilder. De volgende tabel bevat de .NET Framework-gegevensproviders en de bijbehorende verbindingsreeks builder-klassen.
Verbindingsreeksinjectieaanvallen
Een verbindingsreeks injectieaanval kan optreden wanneer dynamische tekenreekssamenvoeging wordt gebruikt om verbindingsreeks s te bouwen die zijn gebaseerd op gebruikersinvoer. Als de tekenreeks niet is gevalideerd en er geen schadelijke tekst of tekens zijn ontsnapt, kan een aanvaller mogelijk toegang krijgen tot gevoelige gegevens of andere resources op de server. Een aanvaller kan bijvoorbeeld een aanval koppelen door een puntkomma op te leveren en een extra waarde toe te voegen. De verbindingsreeks wordt geparseerd met behulp van een algoritme 'last one wins' en de vijandige invoer wordt vervangen door een legitieme waarde.
De verbindingsreeks builderklassen zijn ontworpen om schattingen te elimineren en te beschermen tegen syntaxisfouten en beveiligingsproblemen. Ze bieden methoden en eigenschappen die overeenkomen met de bekende sleutel-/waardeparen die door elke gegevensprovider zijn toegestaan. Elke klasse onderhoudt een vaste verzameling synoniemen en kan vertalen van een synoniem naar de bijbehorende bekende sleutelnaam. Er worden controles uitgevoerd voor geldige sleutel-/waardeparen en een ongeldig paar genereert een uitzondering. Bovendien worden geïnjecteerde waarden op een veilige manier verwerkt.
In het volgende voorbeeld ziet u hoe SqlConnectionStringBuilder een ingevoegde extra waarde voor de Initial Catalog
instelling wordt verwerkt.
Dim builder As New System.Data.SqlClient.SqlConnectionStringBuilder
builder("Data Source") = "(local)"
builder("Integrated Security") = True
builder("Initial Catalog") = "AdventureWorks;NewValue=Bad"
Console.WriteLine(builder.ConnectionString)
System.Data.SqlClient.SqlConnectionStringBuilder builder =
new System.Data.SqlClient.SqlConnectionStringBuilder();
builder["Data Source"] = "(local)";
builder["integrated Security"] = true;
builder["Initial Catalog"] = "AdventureWorks;NewValue=Bad";
Console.WriteLine(builder.ConnectionString);
Belangrijk
Microsoft raadt u aan de veiligste verificatiestroom te gebruiken die beschikbaar is. Als u verbinding maakt met Azure SQL, is Managed Identities voor Azure-resources de aanbevolen verificatiemethode.
In de uitvoer ziet u dat dit SqlConnectionStringBuilder correct is verwerkt door de extra waarde tussen dubbele aanhalingstekens te ontsnappen in plaats van deze toe te voegen aan de verbindingsreeks als een nieuw sleutel-/waardepaar.
data source=(local);Integrated Security=True;
initial catalog="AdventureWorks;NewValue=Bad"
Build verbindingsreeks s from configuration files
Als bepaalde elementen van een verbindingsreeks vooraf bekend zijn, kunnen ze worden opgeslagen in een configuratiebestand en tijdens runtime worden opgehaald om een volledige verbindingsreeks te maken. De naam van de database kan bijvoorbeeld van tevoren bekend zijn, maar niet de naam van de server.
Een van de overbelaste constructors voor een verbindingsreeks-opbouwfunctie neemt een String argument op, waarmee u een gedeeltelijke verbindingsreeks kunt opgeven die vervolgens kan worden voltooid vanuit gebruikersinvoer. De gedeeltelijke verbindingsreeks kunnen worden opgeslagen in een configuratiebestand en tijdens runtime worden opgehaald.
Notitie
De System.Configuration naamruimte biedt programmatische toegang tot configuratiebestanden die gebruikmaken van de WebConfigurationManager voor web-apps en de ConfigurationManager voor Windows-toepassingen. Zie Verbindingsreeksen en configuratiebestanden voor meer informatie over het werken met verbindingsreeks s en configuratiebestanden.