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

предоставляются ролям 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