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) синоним, при
этом синоним увидят все пользователи. Приведенные ниже операторы