Если пользователей БД немного, то при предоставлении им прав можно использовать простые списки их имен. В противном случае назначение и контроль за правами становятся довольно трудоемкими. Удобным выходом из положения является использование ролей или групп пользователей. В SQL:2003 используется понятие роли (role), однако его нет в основном стандарте, а потому может не быть в некоторых реализациях. Перед использованием ролей необходимо убедиться, что их поддерживает ваша СУБД. Многие СУБД применяют понятие группы пользователей, которое аналогично понятию роли.
При использовании роли (группы) права назначаются для роли (группы), а затем для каждого пользователя указывается, какую роль он играет или в какую группу входит. Как роль, так и группа характеризуются именем.
Для создания роли используется такой синтаксис:
CREATE ROLE имяРоли;
После создания роли она назначается пользователям:
GRANT имя Роли ТО списокПользователей;
Назначение прав для роли производится с помощью следующего выражения:
GRANT списокПрав
ON объект
ТО имяРоли
[WITH GRANT OPTION];
Если реализация SQL поддерживает понятие не роли, а группы, то синтаксис оператора для создания группы может быть следующим:
CREATE GROUP имяГруппы WITH списокПользователей;
Для предоставления права просмотра таблицы или представления, например, Продажи всем пользователям БД можно воспользоваться следующим оператором:
GRANT SELECT
ON Продажи
TO PUBLIC;
Таблица Продажи может иметь столбец, например, Цена, который нежелательно предоставлять всем пользователям. В этом случае рекомендуется на основе таблицы Продажи создать представление, в котором нет столбцов, просмотр которых вы хотели бы запретить:
CREATE VIEW Продажи_вид1 AS
SELECT Товар, Количество, Описание
FROM Продажи;
GRANT SELECT
ON Продажи_вид1
TO PUBLIC;
Предположим, менеджеру по продажам (регистрационное имя SalesManager) разрешено изменять значения столбцаЦена в таблицах Товары и Продажи. Чтобы предоставить ему такое право, достаточно выполнить следующий оператор:
GRANT UPDATE (Цена)
ON Товары, Продажи
TO SalesManager;
Если менеджеру нужно разрешить изменять значения нескольких столбцов, то в операторе grant следует перечислить их имена через запятую, а если нужно разрешить изменять все столбцы, то стоит использовать такой оператор:
GRANT update
ON Товары, Продажи
ТО SalesManager;
Для предоставления права добавлять записи вместо ключевого слова update нужно использовать ключевое слово insert. В следующем примере предоставляются права на изменение и добавление записей во все столбцы: