Сценарии безопасности приложений в SQL ServerApplication Security Scenarios in SQL Server

Не существует одного правильного способа создания безопасного клиентского приложения SQL Server.There is no single correct way to create a secure SQL Server client application. Каждое приложение уникально своими требованиями, средой развертывания и количеством пользователей.Every application is unique in its requirements, deployment environment, and user population. Приложение, довольно хорошо защищенное при начальном развертывании, с течением времени может стать менее защищенным.An application that is reasonably secure when it is initially deployed can become less secure over time. Невозможно точно предсказать, какие угрозы могут возникнуть в будущем.It is impossible to predict with any accuracy what threats may emerge in the future.

SQL Server как продукт имел много версий, включающих новейшие средства безопасности, которые позволяют разработчикам создавать безопасные приложения баз данных.SQL Server, as a product, has evolved over many versions to incorporate the latest security features that enable developers to create secure database applications. Однако безопасность не является встроенным элементом; для нее требуется постоянное наблюдение и постоянные обновления.However, security doesn't come in the box; it requires continual monitoring and updating.

Наиболее распространенные угрозыCommon Threats

Разработчикам надо понимать угрозы безопасности, средства, предоставляемые для отражения этих угроз, и методы предотвращения внутренних брешей в безопасности.Developers need to understand security threats, the tools provided to counter them, and how to avoid self-inflicted security holes. Безопасность можно рассматривать как цепь, в которой разрыв одного звена нарушает прочность всей цепи.Security can best be thought of as a chain, where a break in any one link compromises the strength of the whole. В следующем списке приводятся наиболее распространенные угрозы безопасности, более подробно рассматриваемые в соответствующих разделах этой темы.The following list includes some common security threats that are discussed in more detail in the topics in this section.

Атака путем внедрения кода SQLSQL Injection

Внедрение кода SQL - это процесс, посредством которого пользователь-злоумышленник вводит инструкции языка Transact-SQL вместо допустимых входных данных.SQL Injection is the process by which a malicious user enters Transact-SQL statements instead of valid input. Если входные данные передаются непосредственно на сервер без оценки и если приложение случайно выполнит инфицированный код, атака сможет повредить или уничтожить данные.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. Атака путем внедрения кода SQL Server можно предотвратить, используя хранимые процедуры и параметризованные команды, отказавшись от динамического SQL и ограничив разрешения для всех пользователей.You can thwart SQL Server injection attacks by using stored procedures and parameterized commands, avoiding dynamic SQL, and restricting permissions on all users.

Повышение правElevation of Privilege

Атаки повышения прав доступа возникают, если пользователь может принимать права доступа доверенной учетной записи, например учетной записи владельца или администратора.Elevation of privilege attacks occur when a user is able to assume the privileges of a trusted account, such as an owner or administrator. Всегда следует выполнять код под учетными записями с наименьшими правами доступа и назначать только необходимые разрешения.Always run under least-privileged user accounts and assign only needed permissions. Избегайте использования учетных записей администратора или владельца для выполнения кода.Avoid using administrative or owner accounts for executing code. Это ограничивает ущерб, который может быть нанесен при успешной атаке.This limits the amount of damage that can occur if an attack succeeds. При выполнении задач, для которых нужны дополнительные разрешения, используйте подписание процедуры или олицетворение только на время выполнения задачи.When performing tasks that require additional permissions, use procedure signing or impersonation only for the duration of the task. Можно подписывать хранимые процедуры при помощи сертификатов или использовать олицетворение для временного назначения разрешений.You can sign stored procedures with certificates or use impersonation to temporarily assign permissions.

Зондирование и интеллектуальное наблюдениеProbing and Intelligent Observation

Атака зондирования может использовать сообщения об ошибках, формируемые приложением, для поиска уязвимости системы безопасности.A probing attack can use error messages generated by an application to search for security vulnerabilities. Для предотвращения возврата конечному пользователю сведений об ошибках SQL Server следует реализовать обработку ошибок в любом процедурном коде.Implement error handling in all procedural code to prevent SQL Server error information from being returned to the end user.

Проверка подлинностиAuthentication

Если строка соединения, основанная на именах входа SQL Server, конструируется во время выполнения, может возникнуть атака путем внедрения кода в строку соединения.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. Если строка соединения не проверяется на допустимые пары ключевых слов, атакующая сторона может вставить дополнительные символы и, возможно, получить доступ к конфиденциальным данным или другим ресурсам на сервере.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. По возможности используйте проверку подлинности Windows.Use Windows authentication wherever possible. Если необходимо использовать имена входа SQL Server, используйте SqlConnectionStringBuilder для создания и проверки строк соединения во время выполнения.If you must use SQL Server logins, use the SqlConnectionStringBuilder to create and validate connection strings at run time.

ПаролиPasswords

Многие атаки выполняются успешно из-за того, что лицо, не имеющее санкционированного доступа, смогло получить или угадать пароль для пользователя с правами доступа.Many attacks succeed because an intruder was able to obtain or guess a password for a privileged user. При попытке взлома пароли выступают в качестве первой линии обороны, поэтому убедитесь, что введены надежные пароли, так как это необходимо для защиты системы.Passwords are your first line of defense against intruders, so setting strong passwords is essential to the security of your system. Создание и требование использования политики паролей для смешанной проверки подлинности.Create and enforce password policies for mixed mode authentication.

Всегда задавайте надежный пароль учетной записи sa, даже если используется проверка подлинности Windows.Always assign a strong password to the sa account, even when using Windows Authentication.

В этом разделеIn This Section

Управление разрешениями с использованием хранимых процедур в SQL ServerManaging Permissions with Stored Procedures in SQL Server
Описывает, как использовать хранимые процедуры для управления разрешениями и контроля доступа к данным.Describes how to use stored procedures to manage permissions and control data access. Использование хранимых процедур является эффективным способом ответа на многие угрозы системе безопасности.Using stored procedures is an effective way to respond to many security threats.

Написание безопасного динамического кода SQL в SQL ServerWriting Secure Dynamic SQL in SQL Server
Описывает технику написания защищенного динамического SQL-кода с использованием хранимых процедур.Describes techniques for writing secure dynamic SQL using stored procedures.

Подписывание хранимых процедур в SQL ServerSigning Stored Procedures in SQL Server
Описывает, как подписать хранимую процедуру при помощи сертификата, чтобы дать возможность пользователям работать с данными, к которым у них нет непосредственного доступа.Describes how to sign a stored procedure with a certificate to enable users to work with data they do not have direct access to. Это позволяет хранимым процедурам выполнять операции, для непосредственного выполнения которых у вызывающей стороны нет разрешений.This enables stored procedures to perform operations that the caller does not have permissions to perform directly.

Настройка разрешений с олицетворением в SQL ServerCustomizing Permissions with Impersonation in SQL Server
Описывает, как использовать предложение EXECUTE AS для олицетворения другого пользователя.Describes how to use the EXECUTE AS clause to impersonate another user. Олицетворение переключает контекст выполнения с вызывающей стороны на указанного пользователя.Impersonation switches the execution context from the caller to the specified user.

Предоставление разрешений уровня строки в SQL ServerGranting Row-Level Permissions in SQL Server
Описывает, как реализовать разрешения уровня строки для ограничения доступа к данным.Describes how to implement row-level permissions to restrict data access.

Создание ролей приложений в SQL ServerCreating Application Roles in SQL Server
Описывает возможности и функции ролей приложения.Describes features and functionality of application roles.

Организация межбазового доступа в SQL ServerEnabling Cross-Database Access in SQL Server
Описывает, как включить перекрестный доступ между базами данных, не ухудшая безопасность.Describes how to enable cross-database access without jeopardizing security.

См. такжеSee also