Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование приложений баз данных с использованием СУБД MS SQL Server. Учебное пособие
.pdf
6. ОБЕСПЕЧЕНИЕ ДОСТУПА К ДАННЫМ
SQL Server является системой, удовлетворяющей самым жестким требованиям к безопасности информации. Условно система
безопасности может быть разделена на два уровня:
уровень сервера;
уровень базы данных.
На уровне сервера разрешается или отклоняется доступ пользователей к самому серверу. На втором уровне пользователи, имеющие доступ на уровне сервера, получают доступ
к объектам базы
данных.
На уровне сервера система безопасности оперирует следующими понятиями:
аутентификация (authentication);
учетная запись (login);
встроенные роли сервера (fixed server roles).
На уровне базы данных используются следующие понятия:
пользователь базы данных (database user);
фиксированная роль базы данных (fixed database role);
пользовательская роль базы данных (users database role);
роль приложения (application role).
6.1. Проверка подлинности пользователя
При входе в систему пользователь должен идентифицировать
себя, введя имя пользователя. Система, чтобы убедиться в подлинности пользователя, проводит процедуру аутентификации. Стандартное средство аутентификации – ввод пароля.
MS SQL Server может использовать два режима аутентификации пользователей:
режим аутентификации средствами Windows;
смешанный режим аутентификации (Windows Authentica-
tion and SQL Server Authentication).
Смешанный режим позволяет пользователям регистрироваться как средствами
Windows, так и средствами SQL Server (рис. 15).
Кроме того, этот режим предлагает некоторые удобства по сравнению с первым. В частности, при аутентификации только средства-
50

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

пользовать уже готовые учетные записи, а не отвлекаться на создание новых.
В данном случае речь идет только о праве подключения пользователя к серверу баз данных. После регистрации пользователя
в SQL Server способ проверки прав доступа к конкретной базе данных одинаков для обоих режимов аутентификации.
Для аутентификации средствами SQL Server член стандартной
роли сервера sysadmin или securityadmin должен создать и сконфигурировать для пользователя учетную запись, в которую входит
имя учетной записи, уникальный идентификатор SQL Server и пароль. Вся эта информация будет храниться в системной базе master.
Создаваемая учетная запись не имеет отношения к учетным записям Windows. Создать учетную запись можно в
среде Microsoft
SQL Server Studio (рис. 16).
Рис. 16
В режиме проверки подлинности SQL Server при попытке
пользователя войти в систему сервер сам проверяет правильность
имени пользователя и пароль, сравнивая их с данными в системных
таблицах. Если данные, введенные пользователем, совпадают с дан-
52

ными SQL Server, пользователю разрешается доступ к серверу.
В противном случае попытка доступа отклоняется и выдается сообщение об ошибке.
6.2. Специальные учетные записи
После установки SQL Server создаются две стандартные учет-
ные записи: BUILTIN\Administrators и sa.
– BUILTIN\Administrators – это учетная запись Windows NT,
обеспечивающая автоматический доступ всем членам группы
Administrators к SQL Server. Учетная запись BUILTIN\Administrators по умолчанию является членом встроенной роли сервера
sysadmin. Таким образом, системные администраторы получают
полный доступ ко всем базам данных. В ситуации, когда функции
системного администратора и администратора баз данных
выполняют разные люди, скорее всего, следует исключить эту учетную
запись из роли sysadmin, а возможно, и вообще удалить;
– sa – это специальная учетная запись SQL Server для администратора. По умолчанию она присвоена встроенной системной роли
сервера sysadmin и не может быть изменена. Эта учетная запись сохранена в этой версии SQL Server для сохранения совместимости
приложениями, написанными для предыдущих версий.
с
6.3. Фиксированные роли сервера
Во всех версиях MS SQL Server используется безопасность на
основе ролей, что позволяет назначать разрешения роли или группе
пользователей, а не отдельным пользователям. Фиксированные роли сервера имеют предопределенный набор разрешений, назначенных для них.
MS SQL Server предоставляет девять фиксированных ролей
сервера. Разрешения, назначенные ролям сервера, не могут быть
изменены. Начиная с MS SQL Server 2012 можно создавать пользовательские роли сервера и добавлять разрешения на уровне сервера
таким пользовательским ролям.
Приведенная ниже табл. 2 демонстрирует все девять предопределенных серверных ролей.
53

Таблица 2
Имя роли уровня
сервера
Описание
sysadmin Члены предопределенной роли сервера sysadmin
могут выполнять любые действия на сервере
serveradmin Члены предопределенной роли сервера
serveradmin могут изменять параметры конфигу-
рации на уровне сервера, а также выключать сервер
securityadmin Члены предопределенной роли сервера
securityadmin управляют именами входа и их
свойствами. Они могут предоставлять, запрещать
и отменять разрешения на уровне сервера (инструкции GRANT, DENY и REVOKE). Они также
могут предоставлять, запрещать и отменять разрешения на уровне базы данных при наличии
доступа к базе данных. Кроме того, они могут
сбрасывать пароли для учетных
записей SQL
Server
processadmin Члены предопределенной роли сервера
processadmin могут завершать процессы, выполняемые на экземпляре SQL Server
setupadmin Члены предопределенной роли сервера
setupadmin могут добавлять или удалять связан-
ные серверы
bulkadmin Члены предопределенной роли сервера
bulkadmin могут выполнять инструкцию BULK
INSERT – импорт файла данных в таблицу или
представление базы данных
diskadmin Предопределенная роль сервера diskadmin ис-
пользуется для управления файлами на диске
dbcreator Члены предопределенной роли сервера dbcreator
могут создавать, изменять, удалять и восстанавливать любые базы данных
public Каждая учетная запись принадлежит к роли сер-
вера public. Если для участника на уровне сервера не были предоставлены или запрещены конкретные разрешения на защищаемый объект, то
он наследует разрешения роли public на этот
объект. Разрешения роли public следует назначать только тому объекту, который будет доступен всем пользователям. Нельзя изменить
член-
ство в роли public
54

6.4. Доступ к объектам базы данных
После прохождения аутентификации необходимо получить
доступ к базе данных. Для получения доступа к любой базе данных
учетная запись пользователя (login) отображается в пользователя
данной базы данных (user). Объект «пользователь базы данных»
применяется для предоставления доступа ко всем объектам базы
данных: таблицам, представлениям, хранимым процедурам и т. д.
В качестве пользователя базы данных может
отображаться:
учетная запись Windows;
группа учетных записей Windows;
учетная запись SQL Server.
Подобное отображение учетной записи необходимо для каждой базы данных, доступ к которой хочет получить пользователь.
Отображения сохраняются в системной таблице sysusers, которая
имеется в любой базе данных. Такой подход обеспечивает высокую
степень безопасности, предохраняя от предоставления пользователям, получившим
доступ к SQL Server, автоматического доступа ко
всем базам данных и их объектам.
Создать пользователя базы данных можно в среде SQL Server
Management Studio (рис. 17).
Рис. 17
55

Здесь в базе данных BookLibrary создается новый пользователь с именем userBookLibrary, в которого отображается учетная
запись (login) с именем user1.
В ситуации, когда учетная запись не отображается в пользователя базы данных, клиент все же может получить доступ к базе данных под гостевым именем guest, если оно, разумеется, имеется в базе данных. Обычно
специальному пользователю guest предоставляется минимальный доступ только в режиме чтения. Но в некоторых
ситуациях и этот доступ необходимо предотвратить. Помимо guest,
каждая база данных имеет еще одного специального пользователя
с именем dbo. В dbo (database owner) отображена учетная запись
(login) пользователя, который создавал базу данных. Этот пользователь имеет неявно заданные разрешения на выполнение любых
действий
с базой данных. Члены предопределенной роли сервера
sysadmin также автоматически сопоставляются с dbo.
6.5. Пользовательские и фиксированные роли базы данных
Пользователи баз данных могут объединяться в роли для уп-
рощения управлением системой безопасности.
Для удобства MS SQL Server предоставляет несколько фиксированных ролей, которые являются субъектами безопасности, группирующими других участников. Они подобны группам в операционной системе Microsoft Windows. Разрешения ролей уровня базы
данных распространяются на всю базу данных.
В табл. 3 представлены фиксированные роли уровня
базы дан-
ных и их возможности. Эти роли существуют во всех базах данных.
Таблица 3
Имя роли уровня
базы данных
db_owner Члены предопределенной роли базы данных
db_owner могут выполнять все действия по
настройке и обслуживанию базы данных, а
также удалять базу данных
db_securityadmin Элементы предопределенной роли базы данных
db_securityadmin могут изменять членство в
роли и управлять разрешениями. Добавление
участников к этой роли может привести к
непреднамеренному повышению прав доступа
Описание
56

Окончание табл. 3
Имя роли уровня
базы данных
db_accessadmin Члены предопределенной роли базы данных
db_accessadmin могут добавлять или удалять
права удаленного доступа к базе данных для
имен входа и групп Windows, а также имен
входа SQL Server
db_backupoperator Члены предопределенной роли базы данных
db_backupoperator могут создавать резервные
копии базы данных
db_ddladmin Члены предопределенной роли базы данных
db_ddladmin могут выполнять любые команды
языка определения данных (DDL) в базе данных
db_datawriter Члены предопределенной роли базы данных
db_datawriter могут добавлять, удалять или
изменять данные во всех пользовательских
таблицах
db_datareader Элементы предопределенной роли базы данных
db_datareader могут считывать все данные из
всех пользовательских таблиц
db_denydatawriter Члены предопределенной роли базы данных
db_denydatawriter не могут добавлять, изменять
или удалять данные в пользовательских
таблицах базы данных
db_denydatareader Члены предопределенной роли базы данных
db_denydatareader не могут считывать данные из
пользовательских таблиц базы данных
Описание
Кроме того, существует еще также роль public, которая содержится в каждой базе данных, включая системные базы данных.
Ее нельзя удалить, а также нельзя добавлять и удалять пользователей из нее. Разрешения, предоставленные роли public, наследуются
всеми остальными пользователями и ролями, поскольку они принадлежат к роли public по умолчанию. Следует предоставлять роли
public
только разрешения, необходимые для всех пользователей.
6.6. Установка разрешений доступа для объектов, ролей
и пользователей
Как уже указывалось выше, учетным записям пользователей,
которые успешно подключились к SQLServer и которым сопоставлены учетные записи пользователей базы данных или фиксированной роли базы данных, для успешной работы необходимо получить
57

разрешение на доступ и работу с ее объектами баз данных. Для каждой базы разрешения свои и могут быть трех типов: предопределенные (для фиксированных ролей и владельцев, не подлежат изменению), объектные (доступ к объектам базы данных и функциям
их создания, изменения, просмотра и удаления), операторные (доступ к операторам
, создающим: базы, таблицы, представления, процедуры, правила, определения, и резервирующим объекты базы
данных). Само разрешение подразумевает три состояния: предоставлено (GRANT), запрещено (DENY) и отозвано (REVOKE).
По умолчанию, до явного определения разрешения пользователю,
оно находится в отозванном состоянии и запись о нем хранится
в таблице sysprotects. Отозванное разрешение может быть переопределено включением пользователя
в определенную роль, в которой разрешение на данный ресурс явно прописано, а запрещение
переопределить невозможно.
Для некоторых фиксированных ролей заранее предопределены разрешения, и устанавливать их нет необходимости. Например,
для роли sysadmin автоматически наследуются абсолютно все разрешения, и поделать с этим ничего нельзя. Кроме того, некоторые
предопределенные разрешения, присущие этой
роли, невозможно
применить к обычным учетным записям.
Схожий механизм действия определенных разрешений используют и владельцы объектов, только безграничные разрешения
предоставляются им на область их владений.
Разрешения для обычных пользователей могут регулироваться
на уровне объектов и операторов. Четко представляя себе границы
прав каждого пользователя, вы можете установить им разреше-
запрещения на работу с таблицами, столбцами или хранимыми
ния/
процедурами, а также на возможность использования операторов
для создания баз или их элементов.
В любом случае важно помнить, что для доступа к данным
пользователю или какой-либо из ролей, в которых он участвует,
должен быть предоставлен явный доступ, и ни ему самому, ни
какой-то одной из его ролей доступ не должен быть запрещен. Когда
в базе создается новый пользователь, для него явно не установлены
никакие права доступа, хотя, поскольку он является членом группы
PUBLIC, то ему автоматически предоставляется набор прав, выданных этой роли. Для получения доступа системный администратор может использовать
SQL Server Management Studio. На рис. 18
показано предоставление прав пользователю userBookLibrary базы
58

данных BookLibrary на обновление некоторых столбцов таблицы
BOOK средствами SQL Server Management Studio. Получено раз-
решение на обновление столбцов GOD, IZD, KOL, KOLSTR, изменение столбца ISBN запрещено.
Рис. 18
Хранимые процедуры можно рассматривать как важный компонент системы безопасности базы данных. Если все клиенты осуществляют доступ к данным с помощью хранимых процедур, то
прямой доступ к таблицам может быть запрещен, и все действия
пользователей будут находиться под контролем. Что еще важнее,
хранимые процедуры скрывают от пользователя структуру базы
данных и разрешают ему выполнение только тех операций, которые запрограммированы в хранимой процедуре.
Разрешение на выполнение хранимых процедур сводится,
в конечном итоге, к разрешению на выполнение оператора
EXECUTE. Правда, часто этого бывает недостаточно, если пользователь не обладает необходимыми разрешениями. Разрешения по-
59
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
