Основные принципы обеспечения безопасности базы данных
Соединение с экземпляром SQL Server
В случаях, когда пользователю необходим доступ к экземпляру SQL Server, администратор должен предоставить этому пользователю корректную информацию для проверки подлинности. Эта информация зависит от выбранного режима проверки подлинности. В данном разделе объясняется, как создавать имена входа для пользователей операционной системы, которые будут поддерживать режим проверки подлинности Windows, и имена входа SQL для поддержки режима проверки подлинности SQL.
Предоставляем доступ пользователям и группам Windows
Можно разрешить пользователям операционной системы устанавливать соединение с сервером SQL Server посредством создания имени входа для пользователя или группы Windows. По умолчанию, доступ к SQL Server предоставлен только членам локальной группы администраторов Windows и учетной записи службы, которая запускает службы SQL.
Доступ к экземпляру SQL Server можно предоставить, создав имя входа либо путем непосредственного ввода команд SQL, либо через интерфейс SQL Server Management Studio. Следующий код предоставляет доступ к экземпляру SQL Server пользователю домена Windows ADWORKS\jlucas:
CREATE LOGIN [ADVWORKS\jlucas] FROM WINDOWS;
Имена входа Windows по умолчанию
В процессе установки SQL Server 2005 создаются имена входа Windows, перечисленные в табл. 2.1.
При подключении к SQL Server 2005 с использованием имени входа Windows, SQL Server полагается на проверку подлинности операционной системы и проверяет только, имеет ли пользователь Windows соответствующее имя входа, определенное в этом экземпляре сервера SQL Server, или принадлежит ли это имя входа группе Windows с соответствующим именем входа в этот экземпляр SQL Server. Соединение, использующее имя входа Windows, называется доверительным соединением.
Следующая программа на 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 можно предоставить, создав имя входа 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.
При помощи следующего кода можно получить информацию об именах входа 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.