SYSTEMTABAUTH — ПРИВИЛЕГИИ ОБЪЕКТА, КОТОРЫЕ НЕ ОПРЕДЕЛЯЮТ СТОЛБЦЫ

Здесь показаны имена столбцов в таблице SYSTEMTABAUTH и их описание:

COLUMN ОПИСАНИЕ

usernameПользователь, который имеет привилегии

grantorПользователь, который передает привилегии по имени пользователя

tnameИмя таблицы, в которой существуют привилегии

ownerВладелец tname

selauthИмеет ли пользователь привилегию SELECT

insauthИмеет ли пользователь привилегию INSERT

delauthИмеет ли пользователь привилегию DELETE

Возможные значения для каждой из перечисленных привилегий объекта (имена столбцов которых окончиваются на auth) — Y, N, и G. G указывает, что пользователь имеет привилегию с возможностью передачи привилегий. В каждой строке, по крайней мере один из этих столбцов должен иметь состояние отличное от N (другими словами, иметь хоть какую-то привилегию).

=============== SQL Execution Log ================
| SELECT username, dba |
| FROM SYSTEMUSERAUTH |
| WHERE resource = 'Y' |
| ; |
| ================================================= |
| username dba |
| ----------- ------ |
| Diane N |
| Adrian Y |
===================================================

Рисунок 24.5. Пользователи которые имеют привилегию RESOURCE

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

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

ТИПОВОЙ ЗАПРОС Чтобы найти все привилегии SELECT, INSERT и DELETE, которые Adrian предоставляет пользователям в таблице Заказчиков, вы можете ввести следующее (вывод показан в Рисунке 24.6):

SELECT username, selauth, insauth, delauth
FROM SYSTEMTABAUTH
WHERE grantor = 'Adrian' AND tname = 'Customers';

=============== SQL Execution Log ================
| SELECT username, selauth, insauth, delauth |
| FROM SYSTEMTABAUTH |
| WHERE grantor = 'Adrian' |
| AND tname = 'Customers' |
| ; |
| ================================================= |
| username selauth insauth delauth |
| ----------- ------- -------- -------- |
| Claire G Y N |
| Norman Y Y Y |
===================================================

Рисунок 24.6. Пользователи получившие привилегии от Adrian

Выше показано, что Adrian предоставил Claire привилегии INSERT и SELECT в таблице Заказчиков, позднее предоставив ей права на передачу привилегий. Пользователю Norman он предоставил привилегии SELECT, INSERT и DELETE, но не дал возможность передачи привилегий ни в одной из них. Если Claire имела привилегию DELETE в таблице Заказчиков от какого-то другого источника, в этом запросе это показано не будет.

SYSTEMCOLAUTH

СТОЛБЦЫОПИСАНИЕ

username Пользователь который имеет привилегии

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

tname Имя таблицы в которой существуют привилегии

cname Имя столбца в котором существуют привилегии

owner Владелец tname

updauth Имеет ли пользователь привилегию UPDATE в этом столбце

refauth Имеет ли пользователь привилегию REFERENCES в этом столбце

Столбцы updauth и refauth могут быть в состоянии Y, N, или G; но не могут быть одновременно в состоянии N для одной и той же строки. Это — первые пять столбцов таблицы, которы не составляют первичный ключ. Он отличается от первичного ключа SYSTEMTABAUTH в котором содержится поле cname, указывающее на определенный столбец обсуждаемой таблицы для которой применяются одна или обе привилегии. Отдельная строка в этой таблице может существовать для каждого столбца в любой данной таблицы в которой одному пользователю передаются превилегии определенного столбца с помощью другого пользователя.

Как и в случае с SYSTEMTABAUTH та же привилегия может быть описана в более чем одной строке этой таблицы если она была передана более чем одним пользователем.

ТИПОВОЙ ЗАПРОС Чтобы выяснить, в каких столбцах какой таблицы вы имеете привилегию REFERENCES, вы можете ввести следующий запрос (вывод показывается в Рисунке 24.7)

SELECT owner, tname, cname
FROM SYSTEMCOLAUTH
WHERE refauth IN ('Y', 'G') AND username = USER
ORDER BY 1, 2;

который показывает, что эти две таблицы, которые имеют различных владельцев, но одинаковые имена, в действительности, совершенно разные таблицы (т.е. это не как два синонима для одной таблицы).

=============== SQL Execution Log ================
| SELECT OWNER, TNAME, CNAME |
| FROM SYSTEMCOLAUTH |
| WHERE refaulth IN ('Y' , 'G') |
| AND username = USER |
| ORDER BY 1, 2 |
| ; |
| ================================================= |
| owner tname cname |
| ----------- ----------- ------- |
| Diane Customers cnum |
| Diane Salespeople sname |
| Diane Salespeople sname |
| Gillan Customers cnum |
===================================================

Рисунок 24.7. Столбцы в пользователь имеет привилегию INSERT

Наши рекомендации