Выбрать главу

GRANT SELECT ON EMPLOYEE_TBL TO USER1 WITH GRANT OPTION;

Право предоставлено.

ADMIN OPTION

Опция ADMIN OPTION команды GRANT подобна опции GRANT OPTION в том, что получающий привилегии пользователь наследует также и право предоставлять эти привилегии другим пользователям. Но GRANT OPTION используется для привилегий на уровне объектов, a ADMIN OPTION - на уровне системы. Когда пользователь предоставляет другому пользователю привилегии доступа к системе с опцией ADMIN OPTION, этот новый пользователь получает также и возможность предоставления другим пользователям привилегий доступа к системе. Вот пример использования опции:

GRANT SELECT ON EMPLOYEE_TBL TO USER1 WITH ADMIN OPTION;

Право предоставлено.

При удалении из базы данных учетной записи пользователя, наделенного привилегиями с опцией GRANT OPTION или ADMIN OPTION, будут отменены и привилегии тех пользователей, которые получили эти привилегии от пользователя, удаляемого из системы.

Команда REVOKE

Команда REVOKE отменяет привилегии, ранее предоставленные пользователю базы данных. Команда REVOKE имеет две опции - RESTRICT и CASCADE. При использовании опции RESTRICT команда REVOKE будет успешно завершена только в том случае, когда отсутствуют другие пользователи с оставшимися привилегиями, явно указанными оператором REVOKE. С помощью опции CASCADE отменяются и все оставшиеся привилегии других пользователей. Другими словами, если владелец объекта наделил пользователя USERI привилегиями с опцией GRANT OPTION, а пользователь USER1 наделил привилегиями пользователя USER2, то при отмене владельцем привилегий пользователя USER1 с опцией CASCADE будут автоматически отменены и соответствующие привилегии пользователя USER2.

Оставшиеся привилегии (abandoned privileges) - это привилегии, переданные пользователю от другого пользователя с помощью опции GRANT OPTION и оставшиеся "бесхозными" у первого после удаления последнего из базы данных или после отмены привилегий последнего.

Синтаксис оператора для отмены привилегий следующий.

REVOKE Привилегия! [, Привилегия2 ] [ GRANT OPTION FOR ] ON Объект

FROM Имя_Пользователя { RESTRICT | CASCADE }

Вот пример использования подобного оператора.

REVOKE INSERT ON EMPLOYEE_TBL FROM USERI;

Право отменено.

Управление доступом к отдельным столбцам

Кроме предоставления привилегий доступа (INSERT, UPDATE или DELETE) к объектам в целом, имеется возможность ограничить доступ к заданным столбцам таблицы, как это сделано в следующем примере.

GRANT UPDATE (NAME) ON EMPLOYEES TO PUBLIC;

Право предоставлено.

Пользовательское имя PUBLIC

Пользовательское имя PUBLIC в базе данных представляет всех ее пользователей. Любой пользователь считается частью этого имени. Если привилегии предоставляются пользователю PUBLIC, эти привилегии получают все пользователи базы данных. Точно также, отмена привилегий пользователя PUBLIC означает отмену соответствующих привилегий для всех пользователей базы данных, за исключением тех пользователей, которым эти привилегии были явно предоставлены индивидуально. Вот пример использования имени PUBLIC.

GRANT SELECT ON EMPLOYEE_TBL TO PUBLIC;

Право предоставлено.

Поскольку при предоставлении привилегий пользователю PUBLIC их на самом деле получают все пользователи базы данных, такое предоставление привилегий следует использовать крайне осторожно

Группы привилегий

В некоторых реализациях SQL предусмотрено использование групп привилегий базы данных. Ссылки на такие группы привилегий осуществляются по назначенным им именам. Наличие групп упрощает назначение и отмену наиболее часто используемых привилегий. Например, если в группе десяток привилегий, их можно назначить или отменить по имени группы, чтобы не писать каждый раз весь список.

В SQLBase имеются группы привилегий, называемые уровнями доступа (authority levels), а в Oracle такие группы называются ролями (roles). И SQLBase, и Oracle предлагают следующие группы привилегий.

CONNECT

RESOURCE

DBA

Группа CONNECT позволяет пользователю подключиться к базе данных и осуществлять операции с теми объектами, право доступа к которым имеет этот пользователь.

Группа RESOURCE позволяет пользователю создавать объекты, удалять созданные этим пользователем объекты, предоставлять другим право доступа к своим объектам и т. п.

Группа DBA позволяет пользователю осуществлять в рамках базы данных лю|ь/е действия. Такой пользователь имеет право доступа к любым объектам базы данйых и может осуществлять с ними любые действия.

Вот пример предоставления пользователю такой группы привилегий.

GRANT DBA TO USER1;

Право предоставлено.

Использование групп привилегий в разных реализациях языка может иметь свою специфику При наличии групп их использование облегчает процесс организа-. ции управления безопасностью базы данных

Контроль за привилегиями с помощью распределения ролей

Роль - это создаваемый объект базы данных, содержащий нечто подобное группе привилегий Использование ролей направлено на сокращение усилий по обеспечению надежности хранения данных путем отказа от явного предоставления привилегий пользователям Управлять группами привилегий с помощью ролей оказывается проще Привилегии в рамках роли можно изменить, и такие изменения будут прозрачны для пользователя

Если пользователю в рамках определенного приложения требуются, например, привилегии SELECT и UPDATE по отношению к некоторой таблице, ему можно временно, до завершения выполнения транзакции, приписать роль с соответствующими привилегиями.

При создании роли она не имеет никакого иного значения, кроме того, что она является ролью базы данных Она может быть назначена какому-нибудь пользователю или другой роли. Например, пусть схема с именем АРР01 предоставляет привилегию SELECT роли RECORDS_CLERK в отношении таблицы EMPLOYEE_PAY. После этого любой пользователь, получающий роль RECORDS_CLERK, будет обладать привилегией SELECT в отношении таблицы EMPLOYEE_PAY.

Аналогично, если АРР01 отменит привилегию SELECT для роли RECORDS_CLERK в отношении таблицы EMPLOYEE_PAY, то с этого момента и все пользователи и роли, которым была назначена роль RECORDS_CLERK, потеряют привилегию SELECT в отношении ТабЛИЦЫ EMPLOYEE_PAY.

Оператор CREATE ROLE

Создать роль можно с помощью оператора CREATE ROLE.

CREATE ROLE Имя_роли;

Предоставление привилегий ролям аналогично предоставлению привилегий пользователям Рассмотрите следующий пример

CREATE ROLE RECORDS_CLERK;

Роль создана.

GRANT SELECT, INSERT, UPDATE, DELETE ON EMPLOYEE_PAY TO

RECORDS_CLERK;

Право предоставлено.

GRANT RECORDS_CLERK TO USER1;

Право предоставлено.

Оператор DROP ROLE

Роль удаляется с помощью оператора DROP ROLE.

DROP ROLE Имя_роли;

Вот пример:

DROP ROLE RECORDS_CLERK;

Роль удалена.

Оператор SET ROLE

Роль может быть назначена пользователю в рамках его сеанса доступа к базе данных с помощью оператора SET ROLE.

SET ROLE Имя_роли;

Вот пример:

SET ROLE RECORDS_CLERK;

Роль назначена.

С помощью одного оператора можно назначить и несколько ролей.

SET ROLE RECORDS_CLERK, ROLE2, ROLE3;