Anwendungssicherheitsszenarios in SQL ServerApplication Security Scenarios in SQL Server

Für das Erstellen einer sicheren SQL Server-Clientanwendung gibt es kein Patentrezept.There is no single correct way to create a secure SQL Server client application. Jede Anwendung hat spezifische Anforderungen, eine spezielle Bereitstellungsumgebung und einen eigenen Benutzerkreis.Every application is unique in its requirements, deployment environment, and user population. Eine Anwendung, die zum Zeitpunkt ihrer Bereitstellung angemessen sicher ist, kann im Laufe der Zeit weniger sicher werden.An application that is reasonably secure when it is initially deployed can become less secure over time. Es ist unmöglich, genau vorherzusagen, welche Bedrohungen zukünftig entstehen können.It is impossible to predict with any accuracy what threats may emerge in the future.

SQL Server, als Produkt, wurde im Laufe der Zeit ständig um die jeweils neuesten Sicherheitsfunktionen erweitert, um Entwicklern das Erstellen sicherer Datenbankanwendungen zu ermöglichen.SQL Server, as a product, has evolved over many versions to incorporate the latest security features that enable developers to create secure database applications. Dennoch ist Sicherheit nicht einfach "ab Werk" zu haben; sie erfordert eine ständige Überwachung und Aktualisierung.However, security doesn't come in the box; it requires continual monitoring and updating.

Allgemeine BedrohungenCommon Threats

Entwickler müssen die Sicherheitsbedrohungen und die Tools zu deren Abwehr kennen, und sie müssen wissen, wie selbst zu verantwortende Sicherheitslücken vermieden werden können.Developers need to understand security threats, the tools provided to counter them, and how to avoid self-inflicted security holes. Sicherheit ist wie eine Kette – Mängel in einem Glied bringen die Festigkeit der gesamten Kette in Gefahr.Security can best be thought of as a chain, where a break in any one link compromises the strength of the whole. In der folgenden Liste finden Sie eine Übersicht über die häufigsten Sicherheitsbedrohungen. Eine ausführliche Erläuterung dieser Bedrohungen folgt dann in den einzelnen Themen in diesem Abschnitt.The following list includes some common security threats that are discussed in more detail in the topics in this section.

SQL-InjectionSQL Injection

Die Einschleusung von SQL-Befehlen (SQL Injection-Angriff) ist eine Möglichkeit, Anwendungen anzugreifen. Dabei werden anstelle einer gültigen Eingabe Transact-SQL-Anweisungen in den Code eingeschleust.SQL Injection is the process by which a malicious user enters Transact-SQL statements instead of valid input. Wenn die Eingabe direkt und ohne Validierung an den Server weitergeleitet wird und die Anwendung den eingeschleusten Code ausführt, können auf diese Weise Daten beschädigt oder sogar zerstört werden.If the input is passed directly to the server without being validated and if the application inadvertently executes the injected code, then the attack has the potential to damage or destroy data. Sie können die Einschleusung von SQL Server-Befehlen vereiteln, indem Sie gespeicherte Prozeduren und parametrisierte Befehle verwenden, dynamisches SQL vermeiden und den Benutzern nur eingeschränkte Berechtigungen gewähren.You can thwart SQL Server injection attacks by using stored procedures and parameterized commands, avoiding dynamic SQL, and restricting permissions on all users.

Angriffe durch RechteerweiterungElevation of Privilege

Von einem Angriff durch Rechteerweiterung wird gesprochen, wenn sich ein Benutzer Zugang zu den Privilegien eines vertrauenswürdigen Kontos, z. B. als Besitzer oder Administrator, verschafft hat und diese für schädliche Aktionen nutzt.Elevation of privilege attacks occur when a user is able to assume the privileges of a trusted account, such as an owner or administrator. Arbeiten Sie immer nur mit Konten der untersten Berechtigungsebene, und weisen Sie nur die Berechtigungen zu, die wirklich benötigt werden.Always run under least-privileged user accounts and assign only needed permissions. Vermeiden Sie es, zum Ausführen von Code administrative oder Besitzerkonten zu verwenden.Avoid using administrative or owner accounts for executing code. Auf diese Weise dämmen Sie den potenziellen Schaden ein, den ein erfolgreicher Angriff verursachen kann.This limits the amount of damage that can occur if an attack succeeds. Verwenden Sie beim Ausführen von Aufgaben, die zusätzliche Berechtigungen erfordern, Prozedursignatur oder Identitätswechsel nur so lange, wie Sie sie für die Aufgabe benötigen.When performing tasks that require additional permissions, use procedure signing or impersonation only for the duration of the task. Sie können gespeicherte Prozeduren mit Zertifikaten signieren oder zur vorübergehenden Zuweisung von Berechtigungen Identitätswechsel verwenden.You can sign stored procedures with certificates or use impersonation to temporarily assign permissions.

Angriffe durch Auswertung von Fehlermeldungen und intelligente BeobachtungProbing and Intelligent Observation

Angreifer können durch die Auswertung der von einer Anwendung generierten Fehlermeldungen Rückschlüsse auf eventuelle Sicherheitslücken ziehen.A probing attack can use error messages generated by an application to search for security vulnerabilities. Implementieren Sie daher in prozeduralem Code immer auch eine Fehlerbehandlungsroutine, damit der Endbenutzer keine SQL Server-Fehlerinformationen angezeigt bekommt.Implement error handling in all procedural code to prevent SQL Server error information from being returned to the end user.

AuthentifizierungAuthentication

Angreifer können die Verwendung von SQL Server-Anmeldungen ausnutzen, bei denen zur Laufzeit eine auf einer Benutzereingabe basierende Verbindungszeichenfolge konstruiert wird.A connection string injection attack can occur when using SQL Server logins if a connection string based on user input is constructed at run time. Wenn die Verbindungszeichenfolge nicht auf gültige Schlüsselwortpaare überprüft wird, hat der Angreifer u. U. die Möglichkeit, zusätzliche Zeichen einzuschleusen, die es ihm erlauben, auf sicherheitsrelevante Daten oder andere Ressourcen auf dem Server zuzugreifen.If the connection string is not checked for valid keyword pairs, an attacker can insert extra characters, potentially accessing sensitive data or other resources on the server. Verwenden Sie daher nach Möglichkeit die Windows-Authentifizierung.Use Windows authentication wherever possible. Wenn Sie mit SQL Server-Anmeldungen arbeiten müssen, verwenden Sie zum Erstellen und Validieren der Verbindungszeichenfolgen zur Laufzeit den Verbindungszeichenfolgen-Generator (SqlConnectionStringBuilder).If you must use SQL Server logins, use the SqlConnectionStringBuilder to create and validate connection strings at run time.

KennwortangriffePasswords

Viele Angriffe sind erfolgreich, weil es dem Angreifer gelungen ist, das Kennwort eines Benutzers auszuspionieren oder zu erraten.Many attacks succeed because an intruder was able to obtain or guess a password for a privileged user. Kennwörter bilden die erste Verteidigungslinie gegen Angriffe, daher ist die Festlegung starker Kennwörter für die Sicherheit Ihres Systems von entscheidender Bedeutung.Passwords are your first line of defense against intruders, so setting strong passwords is essential to the security of your system. Sie können Kennwortrichtlinien für die Authentifizierung im gemischten Modus erstellen und durchsetzen.Create and enforce password policies for mixed mode authentication.

Weisen Sie dem sa-Konto immer, auch bei Verwendung der Windows-Authentifizierung, ein starkes Kennwort zu.Always assign a strong password to the sa account, even when using Windows Authentication.

In diesem AbschnittIn This Section

Verwalten von Berechtigungen mit gespeicherten Prozeduren in SQL ServerManaging Permissions with Stored Procedures in SQL Server
Beschreibt, wie gespeicherte Prozeduren zur Verwaltung von Berechtigungen und zum Steuern des Datenzugriffs verwendet werden können.Describes how to use stored procedures to manage permissions and control data access. Die Verwendung gespeicherter Prozeduren bietet einen effektiven Schutz vor einer ganzen Reihe von Sicherheitsbedrohungen.Using stored procedures is an effective way to respond to many security threats.

Schreiben von sicherem dynamischen SQL in SQL ServerWriting Secure Dynamic SQL in SQL Server
Beschreibt Verfahren zum Schreiben von sicherem dynamischen SQL-Code unter Verwendung gespeicherter Prozeduren.Describes techniques for writing secure dynamic SQL using stored procedures.

Signieren von gespeicherten Prozeduren in SQL ServerSigning Stored Procedures in SQL Server
Beschreibt die Vorgehensweise zum Signieren gespeicherter Prozeduren mit einem Zertifikat, sodass die Benutzer mit Daten arbeiten können, auf die sie keinen direkten Zugriff haben.Describes how to sign a stored procedure with a certificate to enable users to work with data they do not have direct access to. Auf diese Weise können gespeicherte Prozeduren Vorgänge ausführen, die der Aufrufer seinen Berechtigungen zufolge nicht direkt ausführen darf.This enables stored procedures to perform operations that the caller does not have permissions to perform directly.

Anpassen von Berechtigungen durch Identitätswechsel in SQL ServerCustomizing Permissions with Impersonation in SQL Server
Beschreibt, wie mithilfe der EXECUTE AS-Klausel die Identität eines anderen Benutzers angenommen werden kann.Describes how to use the EXECUTE AS clause to impersonate another user. Beim Identitätswechsel wechselt der Ausführungskontext vom Aufrufer zum angegebenen Benutzer.Impersonation switches the execution context from the caller to the specified user.

Gewähren zeilenspezifischer Berechtigungen in SQL ServerGranting Row-Level Permissions in SQL Server
Beschreibt die Implementierung von zeilenspezifischen Berechtigungen zur Einschränkung des Datenzugriffs.Describes how to implement row-level permissions to restrict data access.

Erstellen von Anwendungsrollen in SQL ServerCreating Application Roles in SQL Server
Beschreibt die Funktionen und die Funktionalität von Anwendungsrollen.Describes features and functionality of application roles.

Aktivieren des datenbankübergreifenden Zugriffs in SQL ServerEnabling Cross-Database Access in SQL Server
Beschreibt, wie der Zugriff auf mehrere Datenbanken bereitgestellt werden kann, ohne dabei die Sicherheit zu gefährden.Describes how to enable cross-database access without jeopardizing security.

Siehe auchSee also