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

grantor VARCHAR2(30) Пользователь, передавший привилегию.

privilege VARCHAR2(40) Привилегия на объект.

grantable VARCHAR2(3) ^ Указывает, может ли пользователь передать полученную

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

YES или N0.

В следующем примере делается запрос к user_col_privs_made:

SELECT *

FROM user_col_privs_made;

GRANTEE TABLE_NAME

COLUMNJIAME GRANTOR

PRIVILEGE GRA

STEVE EMPLOYEES

LAST NAME STORE

UPDATE N0

STEVE EMPLOYEES

SALARY STORE

UPDATE N0

Проверка полученных объектных привилегий

Можно проверить, какие объектные привилегии на таблицу получил пользователь,

сделав запрос к таблице u se r_ tab _ p riv s_ re cd . В таблице 9.6 перечислены

столбцы u se r_ tab _ p riv s_ re cd .

В следующем примере мы подключаемся как steve и делаем запрос к

user_tab _p rivs_recd:

□ CONNECT steve/button

SELECT *

FROM user_tab_privs_recd

ORDER BY privilege;

Пользователи, привилегии и роли 297

OWNER TABLE_NAME

GRANTOR PRIVILEGE GRA HIE

STORE CUSTOMERS

STORE SELECT YES NO

STORE PRODUCTS

STORE INSERT NO NO

STORE PRODUCTS

STORE SELECT NO NO

STORE PRODUCTS

STORE UPDATE NO NO

STORE EMPLOYEES

STORE SELECT NO NO

Можно проверить, какие привилегии на столбцы получил пользователь,

сделав запрос к user_col_privs_reed. В таблице 9.7 перечислены столбцы

user_col_privs_recd.

Таблица 9.6. Некоторые столбцы в userjab_privs_recd

Столбец Тип Описание

owner VARCHAR2(30) Пользователь, владеющий объектом.

table_

name

VARCHAR2(30) Название объекта, на который была передана привилегия.

grantor VARCHAR2(30) Пользователь, передавший привилегию.

privilege VARCHAR2(40) Привилегия на объект.

grantable VARCHAR2(3) Указывает, может ли пользователь передать полученную привилегию

другому пользователю. Принимает значения YES или

N0.

hierarchy VARCHAR2(3) Указывает, образует ли привилегия часть иерархии. Принимает

значения YES или N0.

Таблица 9.7. Некоторые столбцы в userjcol_privs_recd

Столбец Тип Описание

owner VARCHAR2(30) Пользователь, владеющий объектом.

table_name VARCHAR2(30) Название таблицы, на которую была передана привилегия.

column_namei VARCHAR2(30) Название столбца, на который была передана привилегия.

grantor VARCHAR2(30) Пользователь, передавший привилегию.

privilege VARCHAR2(40) Привилегия на объект.

grantable VARCHAR2(3) Указывает, может ли пользователь передать полученную

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

YFS ипи N0

298 Глава 9

В следующем примере делается запрос к user_col_privs_recd:

П SELECT *

FROM user_col_privs_recd;

OWNER TABLE_NAME

COLUMN_NAME GRANTOR

PRIVILEGE GRA

STORE EMPLOYEES

LAST_NAME STORE

UPDATE NO

STORE EMPLOYEES

SALARY STORE

UPDATE NO

Как использовать объектные привилегии

После предоставления пользователю объектной привилегии он может использовать

ее для выполнения поставленной перед ним задачи. Пусть у

steve есть привилегия SELECT на таблицу store.customers:

CONNECT steve/button

SELECT *

FROM store.customers;

CUSTOMER .IID FIRST_NAME LAST_NAME DOB PHONE

1 John Brown 01-JAN-65 800-555-1211

2 Cynthia Green 05-FEB-68 800-555-1212

3 Steve White 16—MAR—71 800-555-1213

4 Gail Black 800-555-1214

5 Doreen Blue 20-MAY-70

Если steve попытается выбрать данные из таблицы purchases, на которую

у него нет никаких полномочий, база данных выдаст сообщение об

ошибке ORA-00942: table or view does not exist (ORA-00942: таблица или

представление не существуют):

□ SQL> SELECT *

2 FROM store.purchases;

FROM store.purchases

ERROR at line 2:

ORA-00942: table or view does not exist

Синонимы

В примерах из предыдущего раздела показано, что можно обращаться к

таблицам из другой схемы, если задать имя схемы, за которым следует имя

таблицы. Когда steve выбирает строки из таблицы customers в схеме store,

Пользователи, привилегии и роли 299

он должен выполнить оператор SELECT FROM store.customers. Можно избежать

ввода имени схемы, если создать для таблицы синоним, который создается

с помощью оператора CREATE SYNONYM.

Рассмотрим пример. Сначала подключимся к базе данных как пользователь

system и передадим системную привилегию CREATE SYNONYM пользователю

steve:

□ CONNECT system/manager

GRANT CREATE SYNONYM TO steve;

Затем подключимся как steve и выполним оператор CREATE SYNONYM для

создания синонима таблицы store.customers:

П CONNECT steve/button

CREATE SYNONYM customers FOR store.customers;

Все, что нужно теперь сделать пользователю steve, чтобы выбирать

строки из таблицы store.customers, - это указать во фразе FROM оператора

SELECT синоним customers:

П SELECT *

FROM customers;

ДО FIRST_NAME LAST_NAME DOB PHONE

1 John Brown 01-JAN-65 800-555-1211

2 Cynthia Green 05-FEB-68 800-555-1212

3 Steve White 16—MAR-71 800-555-1213

4 Gail Black 800-555-1214

5 Doreen Blue 20-MAY-70

Общедоступные синонимы

Для таблицы можно также создать общедоступный (public) синоним, при

этом синоним увидят все пользователи. Приведенные ниже операторы