Материал: Graber_Martin_-_SQL_dlya_prostykh_smertnykh_-_2014

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Оставшаяся часть каталога

username grantor

Пользователь, имеющий привилегии

Пользователь, передавший привилегии пользователю

 

с данным именем

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 из какого-либо другого источника, то этот факт не будет отражен в

результате данного конкретного запроса.

271

Глава 24. Как 1rоддерживается порядок в базе данных SQL

Рис. 24.6. Пользователи, получившие привилегии от пользователия Adriaп

SYSTEMCOLAUTH- привилегии, соответствующие

специфике столбцов

Имя столбца

Описание

usemame

Пользователь, имеющий привилегии

grantor

Пользователь, передавший привилегии пользователю

 

с данным именем

tname

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

cname

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

owner

Владелец tname

updauth

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

 

для данного столбца

refautl1

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

 

для данного столбца

Поля updautl1 и refauth могут принимать значения У, N или G; в одной и той же строке оба эти поля не могут иметь одно и то же значение N. Первые пять столбцов этой таблицы формируют первичный ключ. Он отличается от первичного ключа таб­ лицы SYSTEMTABAUTH и включает поле cname, определяющее отдельный столбец рассматриваемой таблицы, на который распространяются одна и.1и обе рассматривае-

272

Оставшаяся часть катшzога

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

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

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

Пример запроса. Чтобы определить, для какого столбца какой таблицы имеется привилегия REFERENCES, нужно ввести следующее (выходные данные представле­ ны на рис. 24.7):

SELECT оwпег, tname, cname

FROM SYSTEMCOLAUTH

WHERE refauth IN ('У', 'G')

AND username = USER

ORDER ВУ 1, 2;

Результат иллюстрирует факт, что две таблицы, имеющие разных владельцев, но одно и то же имя, являются двумя раз,1ичными таблицами (не путать с двумя синони­ мами для единственной таблицы).

Рис. 24. 7. Столбцы, для которых пользователи имеют привилегию

273

Глава 24. Как поддерживается порядок в базе данных SQL

SYSTEMSYNONS - синонимы таблиц базы данных

Ниже представлены имена столбцов в таблице SYSTEMSYNONS и их описание:

Имя столбца

Описание

synonym

Имя синонима

synowner

Пользователь, являющийся владельцем синонима

 

(может быть PUBLIC)

tname

Имя таблицы, используемой в качестве владельца

tabowner

Имя пользователя, владеющего таблицей

Пример запроса. Предположим, пользователь Adrian имеет синоним Clients для таблицы Customers, владельцем которой является Diane, и что для этой таблицы есть общедоступный синоним Custoшers. Можно сформулировать запрос по поводу всех синонимов таблицы Customers (выходные данные представлены на рис. 24.8):

SELECT •

FROM SYSTEMSYNONS

WHERE tname = 'Customers';

Рис. 24.8. Синонимы таблицы Custoшer

274

Другие пользователи каталога

Другие пользователи каталога

Можно сформулировать более сложные запросы для системного каталога. Напри­ мер, выполнить операцию соединения. Эта команда позволяет увидеть столбцы таб­ лиц и индексы, базирующиеся на этих столбцах (выходные данные представлены на

рис. 24.9):

SELECT a.tname, a.cname, iname, cposition

FROM SYSTEMCOLUMNS а, SYSTEMINDEXES Ь

WHERE a.tabowner = b.tabowner

AND a.tname = b.tname

AND a.cnumber = b.cnumber

ORDER ВУ 3 DESC,2;

В результате представлены два индекса для каждой из таблиц Customers и Salespeople. Последняя таблица имеет ющекс с именем salesno, определенный на одном столбце snum; он был представлен первым, поскольку строки в таблице приводятся по убыванию (в соответствии с порядком, обратном алфавитному) значений столбца iname. Индекс custsale используется продавцами для поиска их покупателей. Он базируется на

Рис. 24.9. Столбцы и их индексы

275

Источник: https://studfile.net/preview/16418473/