Опубликован: 29.07.2008 | Доступ: свободный | Студентов: 1879 / 489 | Оценка: 4.31 / 4.13 | Длительность: 09:00:00
Лекция 2:

Основные принципы обеспечения безопасности базы данных

< Лекция 1 || Лекция 2: 123 || Лекция 3 >

Соединение с экземпляром 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 Может выполнять на сервере любые действия
< Лекция 1 || Лекция 2: 123 || Лекция 3 >
Марат Уздемиров
Марат Уздемиров
Ярослав Малащенко
Ярослав Малащенко