Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекция №17

.docx
Скачиваний:
43
Добавлен:
03.02.2015
Размер:
269.26 Кб
Скачать

Разработка и защита баз данных в Microsoft SQL Server 2005

2. Лекция: Основные принципы обеспечения безопасности базы данных: версия для печати и PDA  В данной лекции рассматриваются принципы разработки политики безопасного доступа к Microsoft SQL Server, описываются принципы управления доступом к экземплярам SQL Server, к базам данных SQL Server, к схемам

В 1 лекции мы разобрали вопрос о том, какие данные стоит, а какие не стоит хранить в базе данных. В данной лекции будут рассмотрены основные концепции обеспечения безопасности баз данных, которые должен знать каждый разработчик, чтобы создавать защищенные базы данных.

Обеспечение безопасности - важный компонент большинства приложений баз данных; поэтому не надо думать, что в процессе разработки этим можно заняться в самую последнюю очередь. Каждый элемент приложения базы данных следует разрабатывать с учетом требований обеспечения безопасности. Вы научитесь предоставлять доступ к экземплярам и базам данных SQL Server и управлять ролями на уровне базы данных и на уровне сервера. Кроме того, вы узнаете, как использовать для обеспечения надежности и безопасности пространства имен объекта схемы. В завершение рассказывается о том, как обеспечить безопасный доступ к таблицам, столбцам и таким программируемым объектам, как хранимые процедуры и функции.

Проектирование механизма сетевой безопасности для обеспечения безопасности системы базы данных

SQL Server 2005 – первая версия SQL Server, которая была разработана в рамках инициативы Microsoft Trustworthy Computing (Защищенные информационные системы). Один из принципов этой инициативы – Security by Default (Безопасность по умолчанию). Реализуя этот принцип, SQL Server 2005 по умолчанию отключает некоторые сетевые настройки, чтобы сохранить максимально возможный уровень безопасности среды SQL Server.

Разрешение удаленного доступа

SQL Server – это система управления базами данных, которая должна работать на сервере сети, принимая подключения от удаленных пользователей и приложений. Можно подключиться к SQL Server локально, с того же компьютера, на котором выполняется SQL Server, но в производственных системах баз данных, как правило, эта возможность не используется. Следовательно, очень важно правильно сконфигурировать SQL Server для приема защищенных подключений от удаленных компьютеров.

Чтобы выполнить удаленный доступ к экземпляру SQL Server, необходим сетевой протокол для установления соединения. Во избежание расточительного использования системных ресурсов, активизируйте только те протоколы, которые необходимо использовать.

При установке SQL Server с параметрами по умолчанию многие функции отключены, чтобы уменьшить уязвимость системы базы данных против атак. Например, в SQL Server 2005 по умолчанию не разрешаются удаленные подключения (за исключением версии Enterprise), поэтому для того, чтобы задействовать удаленные подключения, мы воспользуемся инструментом SQL Server Surface Area Configuration (Настройка контактной зоны SQL Server), как показано на рис. 2.1.

Для этого выполните перечисленные ниже действия:

Разрешаем удаленные соединения

  1. В меню Start (Пуск) выберите All Programs,. Microsoft SQL Server 2005, Configuration Tools, SQL Server Surface Area Configuration. (Все программы, Microsoft SQL Server 2005, Средства настройки, Настройка контактной зоны SQL Server).

увеличить изображение Рис. 2.1.  Инструмент Настройка контактной зоны SQL Server для служб и подключений

  1. Под заголовком Configure Surface Area For Localhost (Настроить контактную зону для localhost) в нижней части окна щелкните ссылку Surface Area Configuration For Services And Connections (Настройка контактной зоны для служб и соединений).

  2. С левой стороны открывшегося окна отображается список компонентов, которые можно настроить. В этом списке разверните дерево элемента Database Engine и щелкните мышью элемент Remote Connections (Удаленные соединения).

  3. Выберите вариант Local And Remote Connections (Локальные и удаленные соединения), а затем выберите нужные протоколы.

Допускается использование удаленных соединений с использованием сетевых протоколов TCP/IP или Named Pipes (именованные каналы). В интересах безопасности и производительности рекомендуется использовать протокол TCP/IP.

Обеспечение безопасности внешнего доступа

Серверы баз данных должны быть хорошо защищены от несанкционированного внешнего доступа ввиду критической важности информации, которая на них хранится. Ни в коем случае нельзя допускать, чтобы к SQL Server можно было обратиться непосредственно через интернет. Если необходимо предоставить доступ к SQL Server через интернет пользователям или приложениям, следует гарантировать, что сетевое окружение имеет адекватные механизмы защиты, такие, как межсетевой экран или система обнаружения вторжений.

Дополнительная информация.SQL Server допускает использование соединений с различными типами конечных точек. О конечных точках рассказывается в лекции 5 курса "Оптимизация работы серверов баз данных Microsoft SQL Server 2005".

Управление доступом к экземплярам SQL Server

Устанавливая соединение с экземпляром SQL Server, вы должны предоставить корректную информацию для проверки подлинности. Ядро базы данных выполняет двухфазный процесс проверки подлинности. Сначала проверяется, предоставили ли вы действующее имя пользователя учетной записи, имеющей разрешение на подключение к экземпляру SQL Server. Далее, ядро базы данных проверяет, имеет ли данная учетная запись разрешение на доступ к той базе данных, к которой выполняется попытка подключения.

В SQL Server 2005 участники – это лица, группы или процессы, которые запрашивают доступ к ресурсам базы данных. Участники иерархически упорядочены по уровням операционной системы, сервера и базы данных и могут быть индивидуальными (неделимыми) или коллективными.

Например, имя входа SQL – это индивидуальный участник на уровне экземпляра SQL Server, а группа Windows – коллективный участник на уровне операционной системы.

Выбор режима проверки подлинности

SQL Server 2005 для предоставления доступа поддерживает два режима аутентификации: режим проверки подлинности Windows и комбинированный режим проверки подлинности. Режим проверки подлинности можно настроить через SQL Server Management Studio, выполнив следующие действия:

Настраиваем режим проверки подлинности

  1. В меню Start (Пуск) выберите All Programs,. Microsoft SQL Server 2005, SQL Server Management Studio (Все программы, Microsoft SQL Server 2005, Среда SQL Server Management Studio).

  2. В диалоговом окне Connect To Server (Соединение с сервером) нажмите кнопку Connect (Соединить).

  3. В панели Object Explorer (Обозреватель объектов) щелкните правой кнопкой мыши на значке экземпляра SQL Server и выберите из контекстного меню пункт Properties (Свойства).

  4. В панели Select A Page (Выбор страницы) выделите значок Security (Безопасность).

  5. В секции Server Authentication (Серверная проверка подлинности) выберите нужный режим проверки подлинности, как показано на рис. 2.2 (см. рис. вверху следующей страницы).

Важно. Для того, чтобы изменение режима проверки подлинности вступило в силу, перезапустите экземпляр SQL Server.

При выборе режима проверки подлинности рекомендуется следовать приведенным ниже рекомендациям:

  • Режим проверки подлинности Windows.В этом режиме SQL Server при проверке подлинности пользователя, запрашивающего доступ к экземпляру SQL Server, полагается на операционную систему. Пользователю не нужно предоставлять какие-либо учетные данные в строке подключения, поскольку он уже аутентифицирован операционной системой.

  • Комбинированный режим проверки подлинности (SQL Server и Windows).В этом режиме пользователь может подключиться к SQL Server с использованием режима проверки подлинности либо Windows, либо SQL Server. В последнем случае SQL Server проверяет учетные данные пользователя на соответствие действующим именам входа SQL Server. При использовании режима проверки подлинности SQL Server пользователь должен указать в строке соединения имя пользователя и пароль для доступа к SQL Server.

увеличить изображение Рис. 2.2.  Установка режима проверки подлинности через интерфейс SQL Server Management Studio

Примечание. В SQL Server 2005 невозможно задать отдельно режим проверки подлинности SQL Server. Однако необходимо, по возможности, настроить параметры безопасности для экземпляра SQL Server, чтобы ограничить доступ большей части пользователей Windows.

Как правило, в качестве режима проверки подлинности рекомендуется выбирать режим проверки подлинности Windows . В режиме проверки подлинности Windows по сети не передается пароль пользователя. Кроме того, можно управлять учетными записями пользователей через централизованное корпоративное хранилище, например, через службу каталогов Active Directory, и воспользоваться преимуществами всех функций безопасности, доступных в операционной системе.

Однако существуют ситуации, когда проверка подлинности Windows будет не лучшим вариантом. Например, если необходимо предоставить доступ пользователям, которые не принадлежат к среде вашей операционной системы, например, внешним поставщикам или тем, кто использует операционную систему с несовместимой системой обеспечения безопасности, лучше выбрать комбинированный режим проверки подлинности и использовать имена входа SQL Server, чтобы установить для таких пользователей соединение с SQL Server.

Соединение с экземпляром SQL Server

В случаях, когда пользователю необходим доступ к экземпляру SQL Server, администратор должен предоставить этому пользователю корректную информацию для проверки подлинности. Эта информация зависит от выбранного режима проверки подлинности. В данном разделе объясняется, как создавать имена входа для пользователей операционной системы, которые будут поддерживать режим проверки подлинности Windows, и имена входа SQL для поддержки режима проверки подлинности SQL.

Предоставляем доступ пользователям и группам Windows

Можно разрешить пользователям операционной системы устанавливать соединение с сервером SQL Server посредством создания имени входа для пользователя или группы Windows. По умолчанию, доступ к SQL Server предоставлен только членам локальной группы администраторов Windows и учетной записи службы, которая запускает службы SQL.

Примечание. Существует возможность удалить права на удаленный доступ к SQL Server из списка прав членов группы администраторов.

Доступ к экземпляру SQL Server можно предоставить, создав имя входа либо путем непосредственного ввода команд SQL, либо через интерфейс SQL Server Management Studio. Следующий код предоставляет доступ к экземпляру SQL Server пользователю домена Windows ADWORKS\jlucas:

CREATE LOGIN [ADVWORKS\jlucas] FROM WINDOWS;

Примечание. Если для создания имени входа используется SQL Server Management Studio, инструмент выполняет аналогичную инструкцию T-SQL.

Имена входа Windows по умолчанию

В процессе установки SQL Server 2005 создаются имена входа Windows, перечисленные в табл. 2.1.

Таблица 2.1. Имена входа Windows по умолчанию

Имя входа Windows

Описание

BUILTIN\Administrators

Имя входа для локальной группы администраторов на компьютерах с установленным экземпляром SQL Server. Для запуска SQL Server это имя входа не обязательно.

<Servername>\SQLServer2005 MSFTEUser$<Servername> $MSSQLSERVER

Имя входа для группы пользователей Windows SQLServer2005 MSFTEUser$ <Servername>$MSSQLSERVER. Члены этой группы имеют необходимые привилегии, которые назначаются им как учетной записи входа в систему ассоциированного экземпляра компонента SQL Server FullText Search. Эта учетная запись необходима для запуска компонента SQL Server 2005 Full Text Search.

<Servername>\SQLServer 2005MSSQLUser$<Servername> $MSSQLSERVER

Имя входа для группы пользователей Windows SQLServer2005 MSSQLUser$ <Servername>$MSSQLSERVER. Члены этой группы имеют необходимые привилегии, которые назначаются им как учетной записи входа в систему ассоциированного экземпляра компонента SQL Server. Эта учетная запись необходима для запуска SQL Server 2005, поскольку является служебной учетной записью для SQL Server в тех случаях, когда экземпляр сконфигурирован на использование локальной служебной учетной записи как своей служебной учетной записи.

<Servername>\SQLServer2005 SQLAgentUser$<Servername> $MSSQLSERVER

Имя входа для группы пользователей SQLServer2005SQLAgentUser$< Servername>$MSSQLSERVER. Члены этой группы имеют необходимые привилегии, которые назначаются им как учетной записи входа в систему ассоциированного экземпляра компонента SQL Server Agent. Эта учетная запись необходима для запуска компонента SQL Server 2005 Agent.

При подключении к SQL Server 2005 с использованием имени входа Windows, SQL Server полагается на проверку подлинности операционной системы и проверяет только, имеет ли пользователь Windows соответствующее имя входа, определенное в этом экземпляре сервера SQL Server, или принадлежит ли это имя входа группе Windows с соответствующим именем входа в этот экземпляр SQL Server. Соединение, использующее имя входа Windows, называется доверительным соединением.

Предупреждение. Не исключена ситуация, при которой пользователь или группа, сопоставленные имени входа Windows, будут удалены из операционной системы без уведомления SQL Server. SQL Server 2005 не выполняет проверку для такой ситуации, поэтому следует периодически проверять экземпляр SQL Server, чтобы выявить имена входа, утратившие связь с пользователями. Это легко можно выполнить при помощи системной хранимой процедуры sp_validatelogins.

Следующая программа на Microsoft Visual Basic (она имеется в файлах примеров под именем ConnectUsing WindowsAuth.vb.txt ) показывает, как установить соединение с SQL Server с использованием проверки подлинности Windows:

"Создаем экземпляр объекта SQLConnection

Dim oConn as New SQLClient.SQLConnection

"Определяем строку соединения

oConn.ConnectionString="server=localhost; database=AdventureWorks;" + _

"Integrated Security=SSPI"

"Открываем соединение

oConn.Open()

"Выполняем необходимые действия

...

"Закрываем соединение

oConn.Close()

Предоставляем доступ именам входа SQL Server

В режиме проверки подлинности Windows и SQL Server также можно создавать имена входа SQL Server и управлять ими. При создании имени входа SQL Server необходимо задать для этого имени входа пароль. Пользователи должны указывать пароль при соединении с экземпляром SQL Server. При создании имени входа SQL Server можно задать для него имя базы данных и язык по умолчанию. В том случае, если приложение устанавливает соединение с SQL Server, не указывая контекст и язык базы данных, SQL Server использует свойства этого имени входа для этого соединения по умолчанию.

Примечание. SQL Server 2005 использует самозаверяющий сертификат для шифрования пакетов входа, чтобы предотвратить несанкционированный доступ к информации о входе в систему. Однако после того как процесс входа завершен и имя входа проверено, SQL Server пересылает все последующие пакеты информации в незашифрованном виде. Если необходимо обеспечить безопасность и конфиденциальность коммуникаций, можно использовать два метода: протокол Secure Sockets Layer (SSL) и протокол Internet Protocol Security (IPSec).

Доступ к экземпляру SQL Server можно предоставить, создав имя входа SQL Server либо путем непосредственного ввода команд SQL, либо через интерфейс SQL Server Management Studio. В следующем примере мы создаем имя входа SQL Server "Mary" и назначаем для пользователя Mary базу данных Adventure Works в качестве базы данных по умолчанию.

CREATE LOGIN Mary

WITH PASSWORD = '34TY$$543',

DEFAULT_DATABASE =AdventureWorks;

В процессе установки SQL Server 2005 создается одно имя входа SQL Server - sa. Имя входа sa создается в любом случае, даже если вы выбрали в процессе установки режим проверки подлинности Windows.

Передовой опыт.Хотя имя входа sa нельзя удалить, необходимо переименовать и отключить его во избежание несанкционированного доступа к SQL Server с его использованием. О том, как отключить имя входа, вы узнаете в разделе "Запрещаем доступ пользователям".

При помощи следующего кода можно получить информацию об именах входа SQL Server из представления каталога sql_logins:

SELECT * FROM sys.sql_logins;

Принудительно применяем политику паролей

При использовании имен входа SQL Server необходимо реализовать сильные политики паролей для этих имен входа во избежание ослабления системы безопасности SQL Server с течением времени. SQL Server 2005 предоставляет возможность принудительного применения парольной политики операционной системы к именам входа SQL Server. Если SQL Server выполняется в среде Windows 2003 Server, то SQL Server использует API (интерфейс для прикладного программирования) NetValidatePasswordPolicy для управления следующими параметрами:

  • Сложность пароля

  • Истечение срока действия пароля

  • Блокировка учетной записи

Если сервер SQL Server выполняется в среде Windows 2000 Server, то он использует правило SQL Server Native Password Complexity rule, которое было введено программой Microsoft Baseline Security Analyzer для принудительного применения следующих правил:

  • Пароль не может быть пустым или NULL

  • Пароль не может совпадать с именем входа

  • Пароль не может совпадать с именем компьютера

  • В качестве пароля нельзя выбирать слова "Password", "Admin" или "Administrator".

Парольную политику можно включить при помощи следующего кода Transact SQL:

CREATE LOGIN Mary

WITH PASSWORD = '34TY$$543'

MUSTCHANGE,

CHECK EXPIRATION = ON,

CHECK POLICY = ON;

Управляем разрешениями для экземпляра

Теперь вы знаете, как предоставить доступ пользователю к экземпляру SQL Server, но до сих пор ничего не было сказано о том, какие разрешения могут иметь эти имена входа в SQL Server. Как правило, пользователю необходим доступ к каким-либо данным. Однако возможно вам придется создать некоторые имена входа с разрешениями на выполнение задач администрирования.

Для выполнения этой задачи SQL Server предоставляет серверные роли на уровне экземпляра. (Серверные роли являются фиксированными, нельзя создать новые роли на уровне экземпляра). В табл. 2.2 перечислены фиксированные серверные роли, созданные SQL Server 2005.

Таблица 2.2. Фиксированные серверные роли

Фиксированная серверная роль

Описание

bulkadmin

Может выполнять предложение BULK INSERT

dbcreator

Может создавать, изменять, удалять и восстанавливать базы данных

diskadmin

Может управлять файлами на диске

processadmin

Может завершать процессы

securityadmin

Может управлять именами входа и назначать разрешения

serveradmin

Может изменять параметры сервера и завершать работу сервера

setupadmin

Может управлять связанными серверами и выполнять системные хранимые процедуры

sysadmin

Может выполнять на сервере любые действия

Получаем информацию о принадлежности к серверной роли

Выполнив запрос системной функции IS_SRVROLEMEMBER можно узнать, принадлежит текущий пользователь к одной из серверных ролей. Следующий пример кода Transact SQL возвращает значение 1, если текущее имя входа принадлежит к серверной роли sysadmin, и значение 0 в противном случае.

SELECT IS_SRVROLEMEMBER ('sysadmin');

Добавляем имя входа к серверной роли.Добавить имя входа к существующей серверной роли можно при помощи системной хранимой процедуры sp_addsrvrolemember. Следующий пример добавляет Mary к серверной роли sysadmin:

EXECUTE sp_addsrvrolemember "Mary", "sysadmin";

Удаляем имя входа из серверной роли.Чтобы удалить имя входа из серверной роли, можно использовать хранимую процедуру sp_dropsrvrolemember. Следующий пример удаляет пользователя Mary из серверной роли sysadmin:

EXECUTE sp_dropsrvrolemember "Mary", "sysadmin";

Предоставляем индивидуальные разрешения.SQL Server 2005 предоставляет более гранулярную структуру разрешений, что позволяет с большей точностью контролировать операции входа. Разрешениями можно манипулировать при помощи операторов GRANT, DENY и REVOKE. Информация о серверных разрешениях доступна из представления каталогаsys.server_permissions.

В следующем примере пользователю Mary предоставляются права на создание и выполнение трассировок в SQL Server Profiler:

GRANT ALTER TRACE TO Mary;

Пользователи могут получить информацию о своих разрешениях с помощью функции fn_my_permissions. Следующий пример отображает разрешения пользователя:

SELECT * FROM fn_my_permissions (NULL, 'SERVER');

Дополнительная информация.Со списком серверных разрешений можно ознакомиться в разделе "Предоставление разрешений SQL Server. Инструкция GRANT (T-SQL)" в SQL Server Books Online (Электронная документация по SQL Server).

Запрещаем доступ пользователям

В некоторых ситуациях, например, когда пользователь увольняется из организации, необходимо запретить доступ определенному имени входа. Если этот запрет временный, можно не удалять имя входа из экземпляра, а просто отключить его. При отключении доступа свойства имени входа и его сопоставление пользователям базы данных сохраняются. Повторно включив это имя входа, вы можете работать с прежними свойствами. Чтобы отключить и включить имя входа, выполните следующую инструкцию ALTER:

  • Отключаем имя входа

ALTER LOGIN Mary DISABLE;

  • Включаем имя входа

ALTER LOGIN Mary ENABLE;

Можно проверить, отключены ли имена входа, выполнив запрос к представлению каталога sql_logins, как показано в следующем примере:

  • Отключаем имя входа

ALTER LOGIN Mary DISABLE; GO

  • Выполняем запрос к системному представлению каталога

  • SELECT * FROM sys.sql_logins

WHERE is_disabled=1; GO

  • Включаем имя входа

ALTER LOGIN Mary ENABLE;

Совет. В SQL Server Management Studio отключенные имена входа помечаются красной стрелкой. Эта стрелка отображается в правом нижнем углу значка имени входа, который находится в папке Security/Logins (Безопасность/Имена входа) в панели Object Explorer (Обозревателя объектов). С другой стороны, если необходимо удалить имя входа из данного экземпляра, следует использовать инструкцию DROP LOGIN. Следующий пример удаляет имя входа.

DROP LOGIN Mary;

Предупреждение. При удалении имени входа SQL Server 2005 не удаляет пользователей базы данных, сопоставленных этому имени входа.

Предупреждение. Удаление имени входа, которому сопоставлены пользователи или группы Windows не гарантирует, что эти пользователи или члены групп не смогут получить доступ к SQL Server. Учтите, что такие пользователи могут принадлежать и к какой-либо другой группе Windows с действующим именем входа.

Устанавливаем соединение с SQL Server с использованием проверки подлинности SQL Server

Следующая программа на Microsoft Visual Basic (она имеется в файлах примеров под именем ConnectUsingSQL Auth.vb.txt ) показывает, как установить соединение с SQL Server с использованием проверки подлинности SQL Server:

"Создаем экземпляр объекта SQLConnection

Dim oConn as New SQLClient.SQLConnection

"Определяем строку соединения

"с заданными именем входа и паролем

oConn.ConnectionString="server=localhost; database=AdventureWorks; " + _

"user id= Mary; password=34TY$$543"

"Открываем соединение

oConn.Open()

"Выполняем необходимые действия

...

"Закрываем соединение

oConn.Close()

Соседние файлы в предмете Безопасность систем баз данных