Мартин Грубер - Понимание SQL (991940), страница 43
Текст из файла (страница 43)
Это дает возможность компьютеру размещать иуправлять информацией в которой он нуждается, используя те же самые процедуры,которые он использует, чтобы размещать и управлять данными, которые он хранитдля вас. Хотя это — вопрос конкретной программы, а не часть стандарта ANSI, большинство SQL баз данных используют набор SQL таблиц, хранящих служебную информацию для своих внутренних потребностей. Этот набор называется в различныхпубликациях как системный каталог, словарь данных, или просто системные таблицы (Термин "словарь данных" может также относится к общему архиву данных,включая информацию о физических параметрах базы данных которые хранятся внеSQL.Следовательно, имеются программы баз данных, которые имеют и системныйкаталог и словарь данных.)Таблицы системного каталога — напоминают обычные SQL таблицы: те жестроки и столбцы данных.
Например, одна таблица каталога обычно содержит информацию о таблицах, существующих в базе данных, по одной строке на каждую таблицу базы данных; другая содержит информацию о различных столбцах таблиц, поодной строке на столбец, и так далее. Таблицы каталога создаются и присваиваютсяс помощью самой базы данных и идентифицируются с помощью специальных имен,таких, например, как SYSTEM. База данных создает эти таблицы и модифицирует ихавтоматически; таблицы каталога не могут быть непосредственно подвергнуты действию команды модификации.Если это случится, это значительно запутает всю систему и сделает ее неработоспособной.
Однако, в большинстве систем, каталог может быть запрошен пользователем. Это очень полезно, потому что это дает вам возможность узнать кое-что о базеданных, которую вы используете. Конечно, вся информация не всегда доступна всемпользователям. Подобно другим таблицам, доступ к каталогу ограничен для пользователей без соответствующих привилегий.Так как каталог принадлежит самой системе, имеется некоторая неясность относительно того, кто имеет привилегии и кто может предоставить привилегии в этом каталоге. Обычно, привилегии каталога предоставляет суперпользователь, например,администратор системы, зарегистрированый как SYSTEM или DBA. Кроме того, некоторые привилегии могут предоставляться пользователям автоматически.ТИПИЧНЫЙ СИСТЕМНЫЙ КАТАЛОГДавайте рассмотрим некоторые таблицы, которые мы могли бы найти в типовомкаталоге системы:ТаблицыSYSTEMCATALOGSYSTEMCOLUMNSSYSTEMTABLESSYSTEMINDEXESSYSTEMUSERAUTHSYSTEMTABAUTHSYSTEMCOLAUTHSYSTEMSYNONSСодержаниеТаблицы (базовые и представления)Столбцы таблицыКаталог Представления в SYSTEMCATALOGИндексы в таблицеПользователи базы данныхОбъектные привилегии пользователейСтолбцовые привилегии пользователейСинонимы для таблицТеперь, если наш DBA предоставит пользователю Stephen право просматриватьSYSTEMCATALOG такой командой,GRANT SELECT ON SYSTEMCATALOG TO Stephen;то Stephen сможет увидеть некоторую информацию обо всех таблицах в базе данных(мы имеем здесь пользователя DBA, пользователя Chris, владельца трех наших типовых таблиц, а также Adrian, владельца представления Londoncust).SELECT tname, owner, numcolumns, type, COFROM SYSTEMCATALOG;=============== SQL Execution Log ===============| SELECT tname, owner, numcolumns, type, CO|| FROM SYSTEMCATALOG;|| ================================================ ||tnameownernumcolumns type CO|| ---------------------------- ---- --- || SYSTEMCATALOGSYSTEM4B|| SalespeopleChris4B|| CustomersChris5B|| LondoncustAdrian5VY|| OrdersChris5B|==================================================Рисунок 24.1: Содержание таблицы SYSTEMCATALOGКак вы можете видеть, каждая строка описывает свою таблицу.
Первый столбец— имя; второй — имя пользователя который владеет ею; третий — число столбцовкоторые содержит таблица; и четвертый — код из одного символа, это или B (для базовой таблицы) или V (для представления). Последний столбец имеет пустые (NULL)значения, если его тип не равен V; и этот столбец указывает, определена или нетвозможность проверки.Обратите внимание, что SYSTEMCATALOG (СИСТЕМНЫЙ КАТАЛОГ) представлен как одна из таблиц в вышеуказаном списке. Для простоты, мы исключили остальные каталоги системы из вывода.
Таблицы системного каталога обычно показываютсяв SYSTEMCATALOG.ИСПОЛЬЗОВАНИЕ ПРЕДСТАВЛЕНИЙ В ТАБЛИЦАХКАТАЛОГАПоскольку SYSTEMCATALOG — это таблица, вы можете использовать ее впредставлении. Фактически можно считать, что имеется такое представление с именем SYSTEMTABLES.Это представление SYSTEMCATALOG содержит только те таблицы, которыевходят в системный каталог; это обычно таблицы базы данных, типа таблицы Продавцов, которые показаны в SYSTEMCATALOG, но не в SYSTEMTABLES.Давайте предположим, что только таблицы каталога являются собственностьюпользователя SYSTEM. Если вы захотите, вы можете определить другое представление, которое бы специально исключало таблицы каталога из вывода:CREATE VIEW DatatablesAS SELECT *FROM SYSTEMCATALOGWHERE owner <> 'SYSTEM';РАЗРЕШИТЬ ПОЛЬЗОВАТЕЛЯМ ВИДЕТЬ (ТОЛЬКО) ИХСОБСТВЕННЫЕ ОБЪЕКТЫКроме того, имеются другое использование представлений каталога. Предположим вам нужно чтобы каждый пользователь был способен сделать запрос каталога,для получения информации только из таблиц которыми он владеет.
Пока значениеUSER, в команде SQL постоянно для ID доступа пользователя выдающего команду,оно может всегда быть использоваться, чтобы давать доступ пользователям только ких собственным таблицам.Вы можете, для начала создать следующее представление:CREATE VIEW OwntablesAS SELECT *FROM SYSTEMCATALOGWHERE Owner = USER;Теперь вы можете предоставить всем пользователям доступ к этому представлению:GRANT SELECT ON Owntables TO PUBLIC;Каждый пользователь теперь способен выбирать (SELECT) только те строки изSYSTEMCATALOG, владельцем которых он сам является.ПРЕДСТАВЛЕНИЕ SYSTEMCOLUMNS Одно небольшое добавление к этому позволит каждому пользователю просматривать таблицу SYSTEMCOLUMNS для столбцов из его собственных таблиц.
Сначала, давайте рассмотрим ту часть таблицыSYSTEMCOLUMNS, которая описывает наши типовые таблицы (другими словами, исключим сам каталог):tnameSalespeopleSalespeopleSalespeopleSalespeopleCustomerscnamesnumsnamecitycommcnumdatatypeintegercharchardecimalintegercnumber tabowner1Diane2Diane3Diane4Diane1ClaireCustomersCustomersCustomersCustomersOrdersOrdersOrdersOrdersOrderscnamecityratingsnumonumodateamtcnumsnumcharcharintegerintegerintegerdatedecimalintegerinteger234512345ClaireClaireClaireClaireDianeDianeDianeDianeDianeКак вы можете видеть, каждая строка этой таблицы показывает столбец таблицыв базе данных. Все столбцы данной таблицы должны иметь разные имена, также каккаждая таблица должна иметь данного пользователя, и наконец все комбинациипользователей, таблиц, и имен столбцов должны различаться между собой.Следовательно табличные столбцы: tname (имя таблицы), tabowner (владелецтаблицы), и cname (имя столбца), вместе составляют первичный ключ этой таблицы.Столбец datatype (тип данных) говорит сам за себя.
Столбец cnumber (номер столбца)указывает на местоположение этого столбца внутри таблицы. Для упрощения, мыопустили параметры длины столбца, точности, и масштаба.Для справки, показана строка из SYSTFMCATALOG, которая ссылается к этойтаблице:tnameownerSYSTEMCOLUMNS Systemnumcolumns type8BCOНекоторые SQL реализации будут обеспечивать вас большим количеством данных, чем показано в этих столбцах, но показанное являются основой для любой реализации.Для иллюстрации процедуры, предложенной в начале этого раздела, имеетсяспособ, позволяющий каждому пользователю видеть информацию SYSTEMCOLUMNSтолько для принадлежащих ему таблиц:CREATE VIEW OwncolumnsAS SELECT *FROM SYSTEMCOLUMNSWHERE tabowner = USER;GRANT SELECT ON Owncolumns TO PUBLIC;КОММЕНТАРИЙ В СОДЕРЖАНИИ КАТАЛОГАБольшинство версий SQL позволяют вам помещать комментарии (ремарки) вспециальные столбцы пояснений таблиц каталогов SYSTEMCATALOG иSYSTEMCOLUMNS, что удобно, так как эти таблицы не всегда могут объяснить своесодержание.
Для простоты, мы пока исключали этот столбец из наших иллюстраций.Можно использовать команду COMMENT ON со строкой текста, чтобы пояснитьлюбую строку в одной из этих таблиц. Состояние — TABLE, для комментирования вSYSTEMCATALOG, и текст — COLUMN, для SYSTEMCOLUMNS.Например:COMMENT ON TABLE Chris.OrdersIS 'Current Customer Orders';Текст будет помещен в столбец пояснений SYSTEMCATALOG. Обычно, максимальная длина таких пояснений — 254 символа.Сам комментарий, указывается для конкретной строки, одна с tname=Orders, адругая owner=Chris. Мы увидим этот комментарий в строке для таблицы Порядков вSYSTEMCATALOG:SELECT tname, remarksFROM SYSTEMCATALOGWHERE tname = 'Orders' AND owner = 'Chris';Вывод для этого запроса показывается в Рисунке 24.2.=============== SQL Execution Log ===============| SELECT tname, remarks|| FROM SYSTEMCATALOG|| WHERE tname = 'Orders'|| AND owner = 'Chris'|| ;|| ================================================ ||tnameremarks|| ----------------------------------|| OrdersCurrent Customers Orders|==================================================Рисунок 24.2:Коментарий в SYSTEMCATALOGSYSTEMCOLUMNS работает точно так же.
Сначала, мы создаем комментарий:COMMENT ON COLUMN Orders.onumIS 'Order #';затем выбираем эту строку из SYSTEMCOLUMNS:SELECT cnumber, datatype, cname, remarksFROM SYSTEMCOLUMNSWHERE tname = 'Orders' AND tabowner = 'Chris' AND cname = onum;Вывод для этого запроса показывается в Рисунке 24.3.Чтобы изменить комментарий, вы можете просто ввести новую командуCOMMENT ON для той же строки. Новый комментарий будет записан поверх старого.Если вы хотите удалить комментарий, напишите поверх него пустой комментарий, подобно следующему:COMMENT ON COLUMN Orders.onumIS ";и этот пустой комментарий затрет предыдущий.=============== SQL Execution Log ===============| SELECT cnumber, datatype, cname, remarks|| FROM SYSTEMCOLUMNS|| WHERE tname = 'Orders'|| AND tabowner = 'Chris'|| AND cname = 'onum'|| ;|| ================================================ ||cnumberdatatypecnameremarks|| ----------------------- ------------ ||1integeronumOrders #|==================================================Рисунок 24.3: Коментарий в SYSTEMCOLUMNSОСТАЛЬНОЕ ИЗ КАТАЛОГАЗдесь показаны оставшиеся из ваших системных таблиц определения, с типовым запросом для каждого:SYSTEMINDEXES — ИНДЕКСАЦИЯ В БАЗЕ ДАННЫХИмена столбцов в таблице SYSTEMINDEXES и их описания — следующие:СТОЛБЦЫinameiownertnamecnumbertabownernumcolumnscpositionisuniqueОПИСАНИЕИмя индекса (используемого для его исключения)Имя пользователя который создал индексИмя таблицы которая содержит индексНомер столбца в таблицеПользователь который владеет таблицей содержащей индексЧисло столбцов в индексеПозиция текущего столбца среди набора индексовУникален ли индекс (Y или N)ТИПОВОЙ ЗАПРОС Индекс считается неуникальным, если он вызывает продавца, в snum столбце таблицы Заказчиков:SELECT iname, iowner, tname, cnumber, isuniqueFROM SYSTEMINDEXESWHERE iname = 'salesperson';Вывод для этого запроса показывается в Рисунке 24.4.=============== SQL Execution Log ================| SELECT iname, iowner, tname, cnumber, isunique|| FROM SYSTEMINDEXES|| WHERE iname = 'salespeople'|| ;|| ================================================= ||inameiownertnamecnumber isunique || ----------- ------ ---------- ------- -------- || salesperson Stephan Customers5N|===================================================Рисунок 24.4: Строка из таблицы SYSTEMINDEXESSYSTEMUSERAUTH — ПОЛЬЗОВАТЕЛЬСКИЕ И СИСТЕМНЫЕ ПРИВИЛЕГИИВ БАЗЕ ДАННЫХИмена столбцов для SYSTEMUSERAUTH и их описание, следующее:СТОЛБЦЫusernamepasswordresourcedbaОПИСАНИЕИдентификатор (ID) доступа пользователяПароль пользователя вводимый при регистрацииГде пользователь имеет права RESOURCEГде пользователь имеет права DBAМы будем использовать простую схему системных привилегий, которая представлена в Главе 22, где были представлены три системных привилегии — CONNECT(ПОДКЛЮЧИТЬ), RESOURCE (РЕСУРСЫ) и DBA.Все пользователи получают CONNECT по умолчанию при регистрации, поэтомуон не описан в таблице выше.