Оставшаяся часть каталога
Пользователь, имеющий привилегии
Пользователь, передавший привилегии пользователю
|
с данным именем |
tname |
Имя таблицы, для которой существуют привилегии |
owner |
Владелец tname |
selauth |
Имеет ли пользователь привилегию SELECT |
insauth |
Имеет ли пользователь привилегию INSERT |
delauth |
Имеет ли пользователь привилегию DELETE |
В таблице представлены значения для каждой объектной привилегии (названия столбцов для них заканчиваются на auth); это может быть У, N или G. G означает, что
пользователь имеет привилегию с правом ее передачи. В каждой строке значение по
крайней мере одного столбца должно быть отлично от N.
Первые четыре столбца этой таблицы формируют ее первичный ключ. Это озна чает, что каждая комбинация значений из столбцов tname, owner (следует помнить, что две разные таблицы, принадлежащие различным владельцам, могут иметь одно имя), user и grantor должна быть уникальной. Каждая строка в этой таблице содер жит все привилегии (не на уровне столбца), переданные одним конкретным поль зователем другому конкретному пользователю для отдельного объекта. UPDATE и REFERENCES являются привилегиями, которые могут быть определены для столбца и хранятся в другой таблице каталога. Если пользователь получает приви легии на таблицу не от одного, а от многих пользователей, то в ней создаются от дельные строки. При отмене привилегий это вынуждает применять процедуру
каскада.
Пример запроса. Для того, чтобы найти все привилегии SELECT, INSERT и DELETE, которые Adrian передал для таблицы Customers, нужно ввести следующее предложение (выходные данные показаны на рис. 24.6):
SELECT userпame, selauth, insauth, delauth
FROM SYSTEMTABAUTH
WHERE grantor = 'Adrian'
AND tname = 'Customers';
Из примера ясно, что Adrian передал Claire привилегии NSERT и SELECT для таб лицы Customers, причем последняя привилегия передана с правом ее дальнейшей пе редачи. Norman он передал привилегии SELECT, INSERT и DELETE, но ни для одной из них не предоставил права передачи. Если Claire получает привилегию DELETE для таблицы Customers из какого-либо другого источника, то этот факт не будет отражен в
результате данного конкретного запроса.