Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Базы данных / БД2012 / Understanding.SQL.doc
Скачиваний:
281
Добавлен:
28.03.2015
Размер:
1.75 Mб
Скачать

Типичный системный каталог

Давайте рассмотрим некоторые таблицы которые мы могли бы найти в типовом каталоге системы:

Таблицы Содержание

------------- -------------------------------------------

SYSTEMCATALOG Таблицы (базовые и представления)

SYSTEMCOLUMNS Столбцы таблицы

SYSTEMTABLES Каталог Представления в SYSTEMCATALOG

SYSTEMINDEXES Индексы в таблице

SYSTEMUSERAUTH Пользователи базы данных

SYSTEMTABAUTH Объектные привилегии пользователей

SYSTEMCOLAUTH Столбцовые привилегии пользователей

SYSTEMSYNONS Синонимы для таблиц

Теперь, если наш DBA предоставит пользователю Stephen право просматривать SYSTEMCATALOG такой командой,

GRANT SELECT ON SYSTEMCATALOG TO Stephen;

то Stephen сможет увидеть некоторую информацию обо всех таблицах в базе данных ( мы имеем здесь пользователя DBA, пользователя Chris, владельца трех наших типовых таблиц, а также Adrian владельца представления Londoncust ).

SELECT tname, owner, numcolumns, type, CO

FROM SYSTEMCATALOG;

=============== SQL Execution Log ===============

| |

| SELECT tname, owner, numcolumns, type, CO |

| FROM SYSTEMCATALOG; |

| |

| ================================================ |

| tname owner numcolumns type CO |

| ------------- ------- ---------- ---- --- |

| SYSTEMCATALOG SYSTEM 4 B |

| Salespeople Chris 4 B |

| Customers Chris 5 B |

| Londoncust Adrian 5 V Y |

| Orders Chris 5 B |

| |

==================================================

Рисунок 24.1: Содержание таблицы SYSTEMCATALOG Как вы можете видеть, каждая строка описывает свою таблицу. Первый столбец - им; второй - им пользователя который владеет ею; третий - число столбцов которые содержит таблица; и четвертый - код из одного символа, это или B ( для базовой таблицы ) или V ( для представления ). Последний столбец имеет пустые(NULL) значения, если его тип не равен V; и этот столбец указывает, определена или нет возможность проверки. Обратите внимание что SYSTEMCATALOG(СИСТЕМНЫЙ КАТАЛОГ) представлен как одна из таблиц в вышесказанном списке. Для простоты, мы исключили остальные каталоги системы из вывода. Таблицы системного каталога обычно показываются в SYSTEMCATALOG.

Использование представлений в таблицах каталога

Поскольку 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

------------- ------ ----------- ----- ---

SYSTEMCOLUMNS System 8 B

Некоторые SQL реализации, будут обеспечивать вас большим количеством данных чем показано в этих столбцах, но показанное являются основой для любых реализаций. Для иллюстрации процедуры предложенной в начале этого раздела, имеет- с способ, позволяющий каждому пользователю видеть информацию SYS- TEMCOLUMNS только для принадлежащих ему таблиц:

CREATE VIEW Owncolumns

AS SELECT *

FROM SYSTEMCOLUMNS

WHERE tabowner = USER;

GRANT SELECT ON Owncolumns TO PUBLIC;

Соседние файлы в папке БД2012