Введение в дисциплину «Безопасность систем баз данных». Теоретические основы построения реляционных баз данных. Верификация баз данных и проведение аудита в СБД. Распределенные базы данных, страница 53

select * from aTable

Но это не удастся сделать пользователю, чья схема по умолчанию именуется borisborisov; такой пользователь обязан указать, по меньшей мере, имя схемы, где располагается таблица aTable.

Заметим, что схема по умолчанию не всегда носит имя пользователя. Также не требуется, чтобы каждому вновь создаваемому пользователю отводилась новая схема по умолчанию: можно выбрать в качестве таковой одну из существующих в БД схем.

Модификация свойств пользователя БД

Команда ALTER USER позволяет изменить имя пользователя и/или схему по умолчанию. Синтаксис команды таков:

ALTER USER имя_пользователя

            WITH { NAME = новое_имя

                                   | DEFAULT_SCHEMA = схема_по_умолчанию} [, …n]

Удаление пользователя БД

Для удаления пользователя БД используется команда DROP USER с единственным параметром – именем удаляемого пользователя.

Управление пользовательскими ролями БД

Единственным неотъемлемым свойством роли БД является ее имя, которое и указывается при ее создании, модификации и удалении. Поэтому соответствующие SQL-команды имеют предельно простой синтаксис.

Команда создания пользовательской роли БД:

CREATE ROLE имя_роли

Команда модификации (фактически изменения имени) пользовательской роли БД:

ALTER ROLE имя_роли WITH NAME = новое_имя

Команда удаления пользовательской роли:

DROP ROLE имя_роли

Включение пользователя в фиксированную или пользовательскую роль БД

Включение пользователя в любую роль БД (кроме роли приложения) можно выполнить при помощи хранимой процедуры sp_addrolemember. Данная процедура принимает два параметра: имя роли и имя пользователя. Оба имени необходимо заключать в апострофы. Например:

EXEC sp_addrolemember ‘db_ddladmin’, ‘borisborisov’

В результате выполнения данной команды пользователь borisborisov будет включен в роль db_ddladmin.

Исключение пользователя из роли БД

Исключение пользователя из роли БД выполняется с помощью системной хранимой процедуры sp_droprolemember. Параметры – те же, что и у процедуры sp_addrolemember.

Задание разрешений доступа для пользователей и ролей БД

Для задания разрешений доступа пользователям и ролям БД используется команда GRANT. На уровне БД также используются команды DENY и REVOKE. Список параметров определяется классом доступа. На уровне БД можно выделить два класса:

·  права доступа к объектам БД;

·  права на выполнение команд Transact-SQL.

К правам первого класса относятся:

·  INSERT – право на вставку строк в таблицу (представление);

·  UPDATE – право на обновление значений в таблице (представлении) или отдельных столбцах таблицы (представления);

·  DELETE – право на удаление строк из таблицы (представления);

·  SELECT – право на выборку из таблицы (представления) или из отдельных столбцов таблицы (представления);

·  REFERENCES – право на создание ссылки на указанный объект; применительно к таблицам это означает возможность создавать внешние ключи, ссылающиеся на первичный (потенциальный) ключ данной таблицы;

·  EXECUTE – право на запуск хранимой процедуры.

Упрощенный синтаксис команды GRANT для предоставления прав доступа к объектам БД следующий:

GRANT разрешение

            ON имя_объекта [(список_столбцов)]

            TO субъект [, …n]

            [WITH GRANT OPTION]

Первый параметр - разрешение доступа – представляет собой ключевое слово INSERT, UPDATE, DELETE, SELECT, REFERENCES или EXECUTE. Список столбцов (если задается) – это просто перечень столбцов таблицы или представления через запятую. В качестве субъекта доступа может выступать пользователь или роль БД (включая роль приложения). Опция WITH GRANT OPTION наделяет субъекта правом распространять данное разрешение доступа другим субъектам.

Команда DENY имеет похожий синтаксис. Вместо WITH GRANT OPTION может использоваться ключевое слово CASCADE – для каскадирования запрещения.

Если требуется разрешить/запретить субъекту выполнение SQL-команд, то объект доступа в командах GRANT, DENY и REVOKE не указывается в явном виде. Например: