Codezugriffssicherheit und ADO.NET
Die Windows-Sicherheit ermöglicht es Ihnen, Ressourcen entsprechend der Rolle des Benutzers zu sichern. Ein Administrator verfügt z. B. über uneingeschränkte Berechtigungen, die Zugriffsberechtigungen eines Benutzers mit der Rolle Gast sind dagegen sehr beschränkt. .NET Framework enthält einen als Codezugriffssicherheit bezeichneten Sicherheitsmechanismus, mit dem Sie die Sicherheit einer Anwendung noch weiter erhöhen können. Bei Verwendung der Codezugriffssicherheit werden je nach Ursprung des Codes unterschiedliche Berechtigungen angewendet. Der Codeursprung wird dabei mit Hilfe der Zone der Assembly ermittelt, und die für diese Zone gültigen Berechtigungen werden den Sicherheitsrichtlinien für den Codezugriff entnommen. Auf einem Computer vorhandener Code wird z. B. als Code der Zone MyComputer betrachtet. Code, der von einem anderen Computer des lokalen Intranets gedownloadet wurde, wird als Code der Zone LocalIntranet betrachtet. Sie können jeder Zone unterschiedliche Berechtigungssätze zuweisen und so z. B. strengere Sicherheitsrichtlinien für externen Code in der Zone LocalIntranet bereitzustellen, aber geringere Sicherheitseinschränkungen in der Zone MyComputer anzuwenden.
Die Einschränkungen für eine bestimmte Zone werden mit einem Berechtigungssatz festgelegt. Im Lieferumfang von .NET Framework ist eine Reihe von Standardberechtigungssätzen enthalten. Außerdem können Sie einen eigenen Berechtigungssatz erstellen und als Berechtigungssatz für eine bestimmte Zone festlegen.
Berechtigungssätze werden i. d. R. in drei Kategorien unterteilt: vollständig vertrauenswürdig, teilweise vertrauenswürdig und nicht vertrauenswürdig. Vollständig vertrauenswürdig bedeutet, dass der Code keine Beschränkungen aufweist und standardmäßig für den lokalen Computer sowie für Quellen mit starkem Namen verwendet wird. Zonen ohne Berechtigungssatz werden als nicht vertrauenswürdig betrachtet und können lediglich auf Funktionen zugreifen, für die keine Berechtigungen erforderlich sind. Teilweise vertrauenswürdige Berechtigungssätze beinhalten eine Kombination aus Berechtigungen und Beschränkungen für die jeweilige Zone.
Der .NET Framework-Datenprovider für OLE DB, der .NET Framework-Datenprovider für ODBC und der .NET Framework-Datenprovider für Oracle sollten nur in Zonen mit der Berechtigung FullTrust ausgeführt werden. Jeder Versuch, den OLE DB-Provider bzw. den ODBC-Provider in einer Zone mit einer niedrigeren Berechtigungsstufe als FullTrust auszuführen, führt zu einer SecurityException. Für die Datenprovider für OLE DB, ODBC und Oracle ist die Berechtigung FullTrust sowohl zum Verknüpfungszeitpunkt als auch während der Ausführung von Code erforderlich. In .NET Framework, Version 1.0, benötigten die Datenprovider für OLE DB, ODBC und Oracle die Berechtigung FullTrust lediglich zum Verknüpfungszeitpunkt.
Hinweis Der im Lieferumfang von .NET Framework, Version 1.0, enthaltene .NET Framework-Datenprovider für SQL Server muss mit der Berechtigung FullTrust ausgeführt werden. Jeder Versuch, den SQL Server-Provider in einer Zone mit einer niedrigeren Berechtigungsstufe als FullTrust auszuführen, führt zu einer SecurityException.
Der .NET Framework-Datenprovider für SQL Server kann in einer Zone mit FullTrust oder in einer Zone mit einem teilweise vertrauenswürdigen Berechtigungssatz ausgeführt werden. Für eine teilweise vertrauenswürdige Anwendung sind mindestens die Berechtigungen Execution und SQL Client erforderlich. In teilweise vertrauenswürdigen Zonen können SqlClient-Berechtigungsattribute zur weiteren Einschränkung der für den SQL Server-Provider verfügbaren Funktionen verwendet werden.
Hinweis F ür den .NET Framework-Datenprovider für SQL Server muss für die Sicherheitsberechtigung die Option "Aufrufen nicht verwalteter Assemblies zulassen" aktiviert sein (SecurityPermission mit dem SecurityPermissionFlag UnmanagedCode), um eine SqlConnection mit aktiviertem SQL-Debuggen zu öffnen.
Damit SqlClient-Berechtigungen für eine bestimmte Zone verwendet werden können, muss ein Administrator einen benutzerdefinierten Berechtigungssatz erstellen und als Berechtigungssatz für die jeweilige Zone festlegen. Standardberechtigungssätze wie LocalIntranet können nicht geändert werden. Um z. B. SqlClient-Berechtigungen für Code mit der Zone LocalIntranet einzubeziehen, kann der Administrator den Berechtigungssatz für LocalIntranet kopieren und in MyLocalIntranet umbenennen, die SqlClient-Berechtigungen hinzufügen, den Berechtigungssatz MyLocalIntranet unter Verwendung des Code Access Security Policy-Tools (Caspol.exe) importieren und den Berechtigungssatz LocalIntranet_Zone in MyLocalIntranet ändern.
In der folgenden Tabelle werden die verfügbaren Berechtigungsattributeigenschaften und ihre Anwendung aufgeführt.
SqlClientPermissionAttribute-Eigenschaft | Beschreibung |
---|---|
AllowBlankPassword | Wird verwendet, um die Verwendung eines leeren Kennwortes einer Verbindungszeichenfolge zu aktivieren bzw. zu deaktivieren. Gültige Werte sind true, um die Verwendung von leeren Kennwörtern zu aktivieren, und false, um deren Verwendung zu deaktivieren. |
ConnectionString | Gibt eine zulässige Verbindungszeichenfolge an. Hierbei können mehrere Verbindungszeichenfolgen angegeben werden. Mit KeyRestrictions können zusätzliche Beschränkungen für Verbindungszeichenfolgen festgelegt werden.
Die Angabe einer Benutzer-ID bzw. eines Kennwortes in einer Verbindungszeichenfolge wird nicht empfohlen. In dieser Version können die Beschränkungen für eine Verbindungszeichenfolge mit dem .NET Framework Configuration-Tool nicht geändert werden. |
KeyRestrictions | Gibt gültige und nicht gültige Parameter für eine Verbindungszeichenfolge an. Parameter für eine Verbindungszeichenfolge werden folgendermaßen angegeben: <parameter name>=. Bei Angabe mehrerer Parameter werden diese durch Semikolon (;) getrennt. Die aufgelisteten Parameter für Verbindungszeichenfolgen können entweder als einzig erlaubte Zusatzparameter gekennzeichnet werden oder als Zusatzparameter, deren Verwendung mit der Eigenschaft KeyRestrictionBehavior nicht gestattet ist.
Wenn keine KeyRestrictions angegeben sind und die Eigenschaft KeyRestrictionBehavior auf AllowOnly festgelegt ist, sind keine zusätzlichen Parameter für die Verbindungszeichenfolge erlaubt. Wenn keine KeyRestrictions angegeben sind und die Eigenschaft KeyRestrictionBehavior auf PreventUsage festgelegt ist, sind keine zusätzlichen Parameter für die Verbindungszeichenfolge erlaubt. |
KeyRestrictionBehavior | Legt fest, ob es sich bei den von der Eigenschaft KeyRestrictions angegebenen Parametern für die Verbindungszeichenfolge um die einzigen erlaubten (AllowOnly) Parameter handelt oder die einzigen Zusatzparameter für die Verbindungszeichenfolge, die nicht erlaubt sind (PreventUsage). Der Standardwert ist AllowOnly. |
Bei der folgenden Eigenschafteneinstellung ist z. B. lediglich die Verwendung der Verbindungszeichenfolge Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;
erlaubt.
<add ConnectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
Wenn Sie dieselbe Verbindungszeichenfolge sowie die Verwendung der Optionen Encrypt und Packet Size aktivieren möchten, die Verwendung anderer Verbindungszeichenfolgeoptionen jedoch nicht zulassen wollen, verwenden Sie folgenden Code:
<add ConnectionString=" Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
KeyRestrictions="Encrypt=;Packet Size=;"
KeyRestrictionBehavior="AllowOnly" />
Wenn Sie dieselbe Verbindungszeichenfolge aktivieren und alle weiteren Verbindungsparameter außer User Id, Password und Persist Security Info aktivieren möchten, verwenden Sie folgenden Code:
<add ConnectionString=" Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;"
KeyRestrictions="User Id=;Password=;Persist Security Info=;"
KeyRestrictionBehavior="PreventUsage" />
Mit den folgenden Berechtigungen können Verbindungen unter Verwendung von Integrierter Sicherheit zum localhost und MySQlServer hergestellt werden. Verbindungszeichenfolgen können auch die Parameter Initial Catalog, Connection Timeout, Encrypt und Packet Size enthalten. Alle übrigen Parameter für Verbindungszeichenfolgen sind nicht erlaubt.
<add ConnectionString="Data Source=localhost;Integrated Security=SSPI;"
KeyRestrictions="Initial Catalog;Connection Timeout=;Encrypt=;Packet Size=;"
KeyRestrictionBehavior="AllowOnly" />
<add ConnectionString="Data Source=MySqlServer;Integrated Security=SSPI;"
KeyRestrictions="Initial Catalog;Connection Timeout=;Encrypt=;Packet Size=;"
KeyRestrictionBehavior="AllowOnly" />
Beispielberechtigungssatz
Im Folgenden finden Sie einen Beispielberechtigungssatz für den .NET Framework-Datenprovider für SQL Server in einem teilweise vertrauenswürdigen Szenario. Informationen über das Erstellen benutzerdefinierter Berechtigungssätze finden Sie unter Konfigurieren von Berechtigungssätzen mit Caspol.exe.
<PermissionSet class="System.Security.NamedPermissionSet"
version="1"
Name="MyLocalIntranet"
Description="Custom permission set given to applications on the local intranet">
<IPermission class="System.Data.SqlClient.SqlClientPermission, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
AllowBlankPassword="False">
<add ConnectionString="Data Source=localhost;Integrated Security=SSPI;"
KeyRestrictions="Initial Catalog;Connection Timeout=;Encrypt=;Packet Size=;"
KeyRestrictionBehavior="AllowOnly" />
</IPermission>
</PermissionSet>
Siehe auch
Schreiben von sicherem ADO.NET-Code | Codezugriffssicherheit | .NET Framework Configuration-Tool (Mscorcfg.msc)