Читаем Понимание SQL полностью

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

SYSTEMSYNONS - СИНОНИМЫ ДЛЯ ТАБЛИЦ В БАЗЕ ДАННЫХ

Это - имена столбцов в таблице SYSTEMSYNONS и их описание:

СТОЛБЕЦ

ОПИСАНИЕ

synonym

Имя синонима

synowner

Пользователь, который является владельцем синонима (может быть PUBLIC (ОБЩИЙ))

tname

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

tabowner

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

ТИПОВОЙ ЗАПРОС. Предположим, что Adrian имеет синоним Clients для таблицы Заказчиков принадлежащей Diane, и что имеется общий синоним Customers для этой же таблицы. Вы делаете запрос таблицы для всех синонимов в таблице Заказчиков (вывод показывается в Таблице 24.8 ):

SELECT *

FROM SYSTEMSYNONS

WHERE tname='Customers'

SQL Execution Log

SELECT * FROM SYSTEMSYNONS

WHERE tname='Customers';

synonym

synowner

tname

tabowner

Clients

Adrian

Customers

Diane

Customers

PUBLIC

Customers

Diane

Таблица 24.8: Синонимы для таблицы Заказчиков

ДРУГОЕ ИСПОЛЬЗОВАНИЕ КАТАЛОГА

Конечно, вы можете выполнять более сложные запросы в системном каталоге. Обьединения, например, могут быть очень удобны. Эта команда позволит вам увидеть столбцы таблиц и базовые индексы установленые для каждого, (вывод показывается в Таблице 24.9 ):

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

FROM SYSTEMCOLUMNS a, SYSTEMINDEXES b

WHERE a.tabowner=b. tabowner

AND a.tname=b.tname

AND a.cnumber=b.cnumber

ORDER BY 3 DESC, 2;

Она показывает два индекса, один для таблицы Заказчиков и один для таблицы Продавцов. Последний из них - это одностолбцовый индекс с именем salesno в поле snum; он был помещен первым из-за сортировки по убыванию (в обратном алфавитном порядке ) в столбце iname. Другой индекс, custsale, используется продавцами чтобы отыскивать своих заказчиков. Он основывается на комбинации полей snum и cnum внутри таблицы Заказчиков, с полем snum приходящим в индексе первым, как это и показано с помощью поля cposition.

SQL Execution Log

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

FROM SYSTEMCOLUMNS a, SYSTEMINDEXES b

WHERE a.tabowner=b.tabowner

AND a.tname=b.tname

AND a.cnumber=b.cnumber

ORDER BY 3 DESC, 2;

Перейти на страницу:

Похожие книги

97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT