предоставляются ролям product jnanageг и hrjnanager, а затем обе эти
роли назначаются роли overalljnanager:
□ GRANT SELECT, INSERT, UPDATE, DELETE ON product_types TO product,
manager;
GRANT SELECT, INSERT, UPDATE, DELETE ON products TO product jnanager;
GRANT SELECT, INSERT, UPDATE, DELETE ON salary.grades TO hrjnanager;
GRANT SELECT, INSERT, UPDATE, DELETE ON employees TO hrjnanager;
GRANT CREATE USER TO hrjnanager;
GRANT productjnanager, hrjnanager TO overalljnanager;
Предоставление ролей пользователю
Для предоставления роли пользователю используется оператор GRANT.
В следующем примере роль overall_manager предоставляется пользователю
steve:
□ GRANT overalljnanager ТО steve;
Проверка ролей, предоставленных пользователю
Проверить, какие роли были предоставлены пользователю, можно, сделав
запрос к user_role_privs. В таблице 9.9 перечислены столбцы в user.role.
privs.
В следующем запросе мы подключаемся как steve и делаем запрос к user,
role.privs:
П CONNECT steve/button
SELECT *
FROM user_role_privs;
USERNAME GRANTED.ROLE ADM DEF OS.
STEVE OVERALL.MANAGER NO YES NO
Таблица 9.9. Некоторые столбцы из user_role_privs ____________________________
Столбец Тип__________ Описание ____________________________________
username VARCHAR2(30) Имя пользователя, которому будет предоставлена роль,
granted.role VARCHAR2(30) Название роли, предоставленной пользователю.
admin.option VARCHAR2(3) Указывает, имеет ли пользователь возможность передавать
роль другому пользователю или роли. Принимает
значения YES или N0.
default.role VARCHAR2(3) Указывает, может ли роль быть активирована по умолчанию
при подключении пользователя к базе данных. Принимает
значения YES или N0.
os.granted VARCHAR2(3) Указывает, была ли роль предоставлена операционной
системой.
Пользователю, который создает роль, также предоставляется эта роль
по умолчанию. В следующем примере мы подключаемся как store и делаем
запрос к u ser.role.privs:
Пользователи, привилегии и роли 303
□ CONNECT store/store_password
SELECT *
FROM user_role_privs;
USERNAME GRANTED_ROLE ADM DEF os.
STORE CONNECT NO YES NO
STORE HR MANAGER YES YES NO
STORE OVERALL MANAGER YES YES NO
STORE PRODUCT MANAGER YES YES NO
STORE RESOURCE NO YES NO
Помимо ролей, созданных ранее, пользователь store обладает ролями
CONNECT и RESOURCE.
Примечание CONNECT и RESOURCE являются встроенными ролями, которые были предоставлены
store при выполнении сценария store_schema. sq l. Роли CONNECT и RESOURCE
содержат множество привилегий (см. ниже).
Проверка системных привилегий, предоставленных роли
Можно проверить, какие системные привилегии были предоставлены роли,
если сделать запрос к role_sys_privs. В таблице 9.10 определены столбцы
role_sys_privs.
Таблица 9.10. Некоторые столбцы в rolejsys_privs
Столбец Тип Описание
ro le VARCHAR2(30) Название роли.
p r i v i le g e VARCHAR2(40) Системная привилегия, предоставленная роли.
admin_option VARCHAR2(3) Указывает, была ли привилегия предоставлена с опцией
admin. Принимает значения YES или N0.
В следующем примере выбираются строки из ro le _ s y s _ p r iv s (в предположении,
что вы по-прежнему подключены как store):
□ SELECT *
FROM role_sys_privs
ORDER BY privilege;
ROLE PRIVILEGE ADM
RESOURCE CREATE CLUSTER NO
RESOURCE CREATE INDEXTYPE NO
FRSOURCE CREATE OPERATOR NO
RESOURCE CREATE PROCEDURE NO
RESOURCE CREATE SEQUENCE NO
CONNECT CREATE SESSION NO
RESOURCE CREATE TABLE NO
RESOURCE CREATE TRIGGER NO
RESOURCE CREATE TYPE NO
HR MANAGER CREATE USER NO
304 Глава 9
Обратите внимание, что роль RESOURCE имеет много привилегий.
Примечание Предыдущий запрос был выполнен в Oracle Database 11 д. Если вы используете
другую версию базы данных, вы можете получить немного отличающийся результат.
Проверка объектных привилегий, предоставленных роли
Можно проверить объектные привилегии, предоставленные роли, сделав
запрос к role_tab_privs. В таблице 9.11 определяются столбцы role_tab_
privs.
Таблица 9.11. Некоторые столбцы role_tab_privs
Столбец Тип Описание
ro le VARCHAR2(30) Пользователь, которому предоставляются привилегии
owner VARCHAR2(30) Пользователь, владеющий объектом.
table_name VARCHAR2(30) Название объекта, на который предоставляется привилегия.
colunn_name VARCHAR2(30) ■Имя столбца (если применимо).
p r i v i le g e VARCHAR2(40) Привилегия для объекта.
grantable VARCHAR2(3) Указывает, может ли привилегия быть предоставлена с опцией
grant. Принимает значения y e s или no.
В следующем примере делается запрос к r o l e _ t a b _ p r i v s для роли HR_
MANAGER:
SELECT *
FROM ro le _ ta b _ p riv s
WHERE ro le = ' HR_MANAGER';
ROLE OWNER
TABLEJIAME COLUMN_NAME
PRIVILEGE GRA
HR MANAGER STORE
EMPLOYEES
DELETE NO
HR MANAGER STORE
EMPLOYEES
INSERT NO
HR MANAGER STORE
EMPLOYEES
SELECT NO
HR MANAGER STORE
EMPLOYEES
UPDATE NO
HR MANAGER STORE
SALARY_GRADES
DELETE NO
Пользователи, привилегии и роли 305
HR MANAGER STORE
SALARY GRADES
INSERT NO
HR MANAGER STORE
SALARY GRADES