Безопасность SQL Databases
Microsoft Azure SQL Databases, то есть SQL Server как сервис (PaaS), имеет набор отличий от локального SQL Server, и самые существенные из них касаются вопросов безопасности.
Учитывая особенности реализации любого программного продукта, который предоставляется как сервис (то есть, по факту, предоставляет серьезный уровень абстракции от большого количества инфраструктурных задач), необходимо четко понимать, как работает SQL Azure, чтобы иметь представление о том, почему та или иная функциональность может быть пока не поддерживаемой.
На скриншоте видно, что клиент, обращаясь по IP к серверу SQL Databases (который, если быть точным, не является сервером, но является еще одной абстракцией над инфраструктурой – каналом с TDS), попадает на сервисный слой, в котором происходит балансировка нагрузки на один из экземпляров выполняющегося SQL Azure – напомню, что, создавая один сервер SQL Azure, вы создаете целых три. Сервисный слой служит для различных высокоуровневых задач – маршрутизации запросов, развертывания и пр.
После сервисного слоя идет платформенный слой – это последний уровень абстракции над “железом”, и важно понимать, что здесь также происходит большое количество сервисной работы – именно здесь располагаются низкоуровневые сервисы, обслуживающие запросы клиентов и являющиеся, по своей сути, прослойкой до “железа”.
Легко заметить разительное отличие от стандартной архитектуры локального SQL Server, где нет сервисного слоя либо он объединен с платформенным. Отсюда вытекает большинство отличий, в том числе касающихся безопасности.
Как уже было написано, SQL Azure Databases использует стандартный протокол SQL Server Tabular Data Stream (TDS), но разрешены исключительно шифрованные коммуникации. В SQL Server 2008 было введено новое средство: прозрачное шифрование данных (transparent data encryption, TDE), позволяющее полностью шифровать данные с минимальными усилиями. Однако на данный момент SQL Azure Databases не поддерживает шифрование на уровне базы данных. Следует заметить, что в настоящее время SQL Azure Databases доступен только через TCP-соединения и только через порт 1433. Поэтому необходимо учитывать возможности шифрования ADO.NET и сертификаты. А, например, свойства соединения Encrypt = True и TrustServerCertificate = False обеспечат защиту передаваемых данных и помогут предотвратить атаки «человек посередине» (man-in-the-middle). Второе средство защиты SQL Database Azure, и, в общем-то, основное - брандмауэр SQL Azure Databases, которым изначально блокируется весь доступ к серверу SQL Azure Databases. Попытки подключения до соответствующей настройки будут безуспешны. Для начала работы с сервером SQL Azure Databases нужно зайти на портал SQL Azure и определить настройки брандмауэра для доступа к вашему серверу. Брандмауэром SQL Azure можно управлять через портал SQL Azure или напрямую в главной базе данных с помощью хранимых процедур, таких как sp_set_firewall_rule и sp_delete_firewall_rule.
Как и в любой реализации SQL Server, управление пользовательскими учетными записями — еще один аспект, который нужно жестко контролировать. Благодаря этим средствам SQL Azure является высокозащищенной управляемой платформой для приложений в облаке.
Между SQL Server и SQL Azure Databases в контексте безопасности существует список различий:
* Microsoft SQL Server поддерживает аутентификацию Windows Integrated с использованием параметров доступа из Active Directory; SQL Azure Databases поддерживает только SQL Server Authentication.
* Microsoft SQL Server и SQL Azure Databases используют одну модель авторизации на основе пользователей и ролей, создаваемых в каждой базе данных и связываемых с логинами пользователей.
* Microsoft SQL Server имеет стандартные роли уровня сервера такие как serveradmin, securityadmin и dbcreator. SQL Azure Databases этих ролей нет. Вместо этого в SQL Azure Databases есть роль loginmanager (создание логинов) и dbmanager (создание и управление базами данных). Эти роли могут быть привязаны к пользователям в базе данных master.
* Доступ к SQL Server и SQL Azure Databases происходит по протоколу уровня приложения Tabular Data Stream (TDS), защищённому протоколом SSL, через порт TCP/1433. Использование SSL опционально для Microsoft SQL Server и обязательно для SQL Azure Databases.
* В SQL Server контроль доступа на основе IP должен быть осуществлен на уровне хоста или сети, с использованием брандмауэров. В SQL Azure Databases есть встроенный брандмауэр, ограничивающий весь доступ к серверу SQL Azure Databases до определения клиентов компьютеров, имеющих право доступа. Брандмауэр выдает доступ, основываясь на IP-адресе каждого запроса.
* SQL Server предоставляет шифрование в режиме реального времени всех хранящихся данных на страничном уровне с использованием функциональности Transparent Data Encryption (TDE). TDE не поддерживается в SQL Azure Databases.
Резюме
SQL Azure Databases – SQL Server в режиме PaaS. Со своими ограничениями, со своими функциями, которых нет в SQL Server (в основном касающимися отказоустойчивости и автоматизации таких задач, как балансировка нагрузки), SQLAD может быть средством, которое будет использоваться вместо локального развертывания в целях абстрагирования от задач инфраструктурных, однако важно и нужно понимать, что имеющиеся ограничения должны серьезнейшим образом повлиять на процессы обсуждения и планирования разрабатываемого проекта.