|
| ||||||||||||
| ||||||||||||
|
2007 г.
Безопасность в Microsoft SQL Server 2005
Анна Иванова |
| Начало | Оглавление | Часть 2 |
В предыдущей части статьи мы обсудили новшества SQL Server 2005, связанные с минимизацией привилегий для исполняемого кода, шифрованием трафика и данных в SQL Server 2005, а также осуществлением аудита и защиты метаданных. Заключительная часть данной статьи посвящается некоторым рекомендациям для администраторов сетей и разработчиков приложений, а также сравнению средств обеспечения безопасности разных редакций SQL Server и некоторых других СУБД.
Нередко выбор разумного компромисса между безопасностью и доступностью функций, приложений и данных оказывается гораздо более сложным, нежели технологическая реализация того или иного способа защиты данных, и умение администратора баз данных применить возможности сервера в этом случае играет немаловажную роль. Ниже приводятся некоторые рекомендации по обеспечению безопасности для администраторов сетей и баз данных, не упомянутые в предыдущих разделах данной статьи.
Многие из служб SQL Server отключены по умолчанию, и при отсутствии реальной необходимости их применения рекомендуется оставить их в неактивном состоянии. Так, поддержка применения Microsoft.NET Framework в ядре СУБД должна быть включена только в тех случаях, когда использование управляемого кода в приложении действительно необходимо. Не рекомендуется без необходимости включать такие службы и опции, как Database Mail и SQL Mail, AdHoc Remote Queries, Web Assistant, Remote DAC (Dedicated Administrator Connection), делать доступной хранимую процедуру xp_cmdshell для выполнения команд операционной системы из ядра СУБД и средства применения COM-расширений функциональности сервера (OLE Automation extended stored procedures), создавать точки доступа по протоколу HTTP (HTTP Endpoints, рис. 9).

Рис. 9. Управление доступностью служб SQL Server 2005

Рис. 10. Управление доступностью служб SQL Server 2005
Во-первых, можно создать канал виртуальной частной сети (VPN-канал) между реплицируемыми серверами. Этот способ удобен в случае транзакционной или snapshot-репликации.
Во-вторых, можно использовать web-синхронизацию. Данный способ удобен при использовании репликации с объединением (Merge Replication), так как в этом случае поддерживается SSL-шифрование с применением протокола HTTPS.
Ниже мы обсудим эти принципы более подробно.
Использование представлений позволяет изолировать приложения от внесения изменений в схемы данных, что упрощает сопровождение клиентских приложений, позволяя избежать развертывания их новых версий. Кроме того, представления можно использовать для объединения данных из нескольких таблиц с целью вычисления агрегатных данных без предоставления сведений об их составляющих. Тем не менее не рекомендуется создавать представления на основе других представлений — подобный подход к проектированию баз данных может привести к снижению производительности и созданию дополнительного числа временных таблиц.
Для иллюстрации понятия SQL Injection приведем простой пример, взятый нами из книги Майкла Ховарда и Дэвида Леблана «Защищенный код» (издательство «Русская редакция», 2003). Представим себе следующий код клиентского приложения:String sql = «select * from customer where name= ‘ «+ name +» ’»значение переменной name в котором вводится пользователем. Если пользователь ввел в эту переменную значение «Иванов», он получит записи таблицы Customer, содержащие в поле Name значение «Иванов».Но если он ввел в это поле следующее значение:
Иванов’ or 1=1 —то такая команда вернет все строки таблицы — записи таблицы Customer, содержащие в поле Name значение «Иванов», плюс записи, удовлетворяющие условию 1=1 (то есть все записи таблицы!). А если злоумышленник ввел в это поле значениеИванов’ drop table customer— или, не дай бог, фрагмент кода с вызовом хранимой процедуры xp_cmdshell, которая по недосмотру администратора базы данных оказалась доступной, последствия могут быть самыми плачевными.
С точки зрения безопасности приложения не должны использовать конструкции SELECT, INSERT, UPDATE и DELETE для запросов к базе данных. Вместо этого правильнее обращаться к хранимым процедурам, выполняющим подобные операции. Кроме того, их применение позволяет отказаться от предоставления пользователям прав доступа к таблицам и представлениям. Отметим, что применение хранимых процедур позволяет сделать клиентские приложения независимыми от схемы базы данных, что позволяет изменять ее без необходимости внесения изменений в само приложение. Это упрощает сопровождение таких приложений, позволяя избежать развертывания его новых версий.
Использование хранимых процедур в ряде случаев позволяет выполнять операции над конфиденциальными данными внутри сервера, не предоставляя их клиентскому приложению, а также сократить сетевой трафик — при их грамотном проектировании значительная часть обработки данных может быть осуществлена на сервере, а не в приложении.
Впрочем, и хранимые процедуры сами по себе не являются панацеей от всех бед. Рассмотрим еще два примера, приведенных в книге Майкла Ховарда и Дэвида Леблана. Представим себе следующий код клиентского приложения, использующий хранимую процедуру sp_GetName для получения записей о конкретном клиенте:Sqlstring = @» exec sp_GetName ‘» + name + +» ’»; SqlCommand cmd = new SqlCommand (sqlstring, sql);Если пользователь ввел в поле NameИванов’ or 1=1 —он не получит все строки таблицы. Но, введяИванов’ drop table customer —он удалит таблицу, как и в предыдущем случае. И наконец, хранимые процедуры бывают и такими:CREATE PROCEDURE sp_MyProc @input varchar(128) AS exec (@input)Эта процедура просто выполняет введенный пользователем код и создает серьезную угрозу безопасности. Тем не менее случаи создания столь опасных процедур иногда происходят. Чтобы избежать подобных неприятностей, следует использовать параметризованные запросы и параметризованные вызовы хранимых процедур.
Немаловажным шагом при создании клиентских приложений является и проверка вводимых данных. Такие банальные фрагменты клиентского кода, как проверка соответствия типов вводимых данных типам в СУБД, применение регулярных выражений в клиентских приложениях для проверки пользовательского ввода до того, как он будет отправлен в СУБД, экранирование специальных символов (довольно часто используемых злоумышленниками при атаках на серверы баз данных), могут спасти базу данных от многих неприятностей.
Особо отметим обязательную при применении служб уведомлений необходимость проверки вводимой пользователями информации в поля протокола Subscriber, Subscriber Device и Subscription Information — сами службы уведомлений не содержат механизмов проверки содержимого полей заголовков протокола.
Справедливости ради отметим, что SQL Server не единственная хорошая серверная СУБД на рынке программного обеспечения. Надежные и простые в применении СУБД масштаба предприятия выпускают такие компании, как IBM, Oracle, Sybase. Средства обеспечения безопасности в SQL Server 2005 также не уникальны — все перечисленные выше производители СУБД заботятся о безопасности своих продуктов не меньше, чем корпорация Microsoft. Данное утверждение иллюстрируется приведенной выше таблицей, в которой представлено наличие средств обеспечения безопасности в SQL Server 2005 и в различных редакциях Oracle 10g.

Средства обеспечения безопасности Oracle и SQL Server
Отметим, однако, что перечисленные механизмы безопасности и удобные средства их администрирования доступны во всех редакциях SQL Server 2005, включая бесплатную редакцию Express Edition и относительно недорогие версии Workgroup Edition и Standard Edition, вполне доступные небольшим предприятиям. В то же время аналогичные механизмы и утилиты Oracle 10g присутствуют только в наиболее дорогостоящей редакции этой СУБД.
На этом мы заканчиваем обсуждение средств безопасности Microsoft SQL Server 2005. Хотя, как мы уже заметили, само по себе внедрение этого продукта не защитит компанию от угроз. SQL Server 2005 предоставляет немало возможностей обеспечить подобную защиту и упростить работу администраторов и разработчиков приложений, поскольку удовлетворяет всем современным требованиям в указанной области.
| Начало | Оглавление | Часть 2 |
|
CITForum © 1997–2025