Поскольку SYSTEMCATALOG — это таблица, вы можете использовать ее в представлении. Фактически можно считать, что имеется такое представление с именем SYSTEMTABLES. Это представление SYSTEMCATALOG содержит только те таблицы, которые входят в системный каталог; это обычно таблицы базы данных, типа таблицы Продавцов, которые показаны в SYSTEMCATALOG, но не в SYS- TEMTABLES. Давайте предположим, что только таблицы каталога являются собственностью пользователя SYSTEM. Если вы захотите, вы можете определить другое представление, которое бы специально исключало таблицы каталога из вы- вода:
CREATE VIEW Datatables AS SELECT * FROM SYSTEMCATALOG WHERE owner < > ‘SYSTEM’;
РАЗРЕШИТЬ ПОЛЬЗОВАТЕЛЯМ ВИДЕТЬ(ТОЛЬКО) ИХ СОБСТВЕННЫЕ ОБЪЕКТЫ
Кроме того, имеются другое Использование представлений каталога. Предположим вам нужно, чтобы каждый ПОЛЬЗОВАТЕЛЬ был способен сделать запрос каталога, для получения информации только из таблиц, которыми он владеет. Пока значение USER, в команде SQL постоянно для ID доступа пользователя выдающего команду, оно может всегда быть использоваться, чтобы давать доступ пользователям только к их собственным таблицам. Вы можете, для начала создать следующее представление:
CREATE VIEW Owntables AS SELECT * FROM SYSTEMCATALOG WHERE Owner = USER;
Теперь вы можете предоставить всем пользователям доступ к этому представлению:
GRANT SELECT ON Owntables TO PUBLIC;
Каждый ПОЛЬЗОВАТЕЛЬ теперь способен выбирать (SELECT) только те строки из SYSTEMCATALOG, владельцем которых он сам является.
ПРЕДСТАВЛЕНИЕ SYSTEMCOLUMNS Одно небольшое добавление к этому, позволит каждому пользователю просматривать таблицу SYS- TEMCOLUMNS для столбцов из его собственных таблиц. Сначала, давайте рассмотрим ту часть таблицы SYSTEMCOLUMNS, которая описывает наши типовые таблицы( другими словами, исключим сам каталог):
tname
cname
datatype
cnumber
tabowner
Salespeople
snum
integer
1
Diane
Salespeople
sname
char
2
Diane
Salespeople
city
char
3
Diane
Salespeople
comm
decimal
4
Diane
Customers
cnum
integer
1
Claire
Customers
cname
char
2
Claire
Customers
city
char
3
Claire
Customers
rating
integer
4
Claire
Customers
snum
integer
5
Claire
Orders
onum
integer
1
Diane
Orders
odate
date
2
Diane
Orders
amt
decimal
3
Diane
Orders
cnum
integer
4
Diane
Orders
snum
integer
5
Diane
Как вы можете видеть, каждая строка этой таблицы показывает столбец таблицы в базе данных. Все столбцы данной таблицы должны иметь разные имена, также как каждая таблица должна иметь данного пользователя, и наконец все комбинации Пользователей, таблиц, и имен столбцов должны различаться между собой. Следовательно табличные столбцы: tname ( им таблицы ), tabowner ( владелец таблицы ), и cname ( им столбца ), вместе составляют первичный ключ этой таблицы. Столбец datatype( тип данных ) говорит сам за себя. Столбец cnumber ( номер столбца ) указывает на место- поляожении этого столбца внутри таблицы. Для упрощения, мы опустили параметры длины столбца, точности, и масштаба. Для справки, показана строка из SYSTFMCATALOG которая ссылается к этой таблице:
tname
owner
numcolumns
type
CO
SYSTEMCATALOG
SYSTEM
8
B
Некоторые SQL реализации, будут обеспечивать вас большим количеством данных чем показано в этих столбцах, но показанное являются основой для любых реализаций.
Для иллюстрации процедуры предложенной в начале этого раздела, имеет- с способ, позволяющий каждому пользователю видеть информацию SYS- TEMCOLUMNS только для принадлежащих ему таблиц:
CREATE VIEW Owncolumns AS SELECT * FROM SYSTEMCOLUMNS WHERE tabowner = USER; GRANT SELECT ON Owncolumns TO PUBLIC;
‹ Типичный системный каталог
Вверх
Комментарий в содержании каталога ›