Главная » Просмотр файлов » Понимание SQL

Понимание SQL (775646), страница 27

Файл №775646 Понимание SQL (книга - Мартин Грубер - Понимание SQL) 27 страницаПонимание SQL (775646) страница 272017-06-07СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 27)

ИСПОЛЬЗОВАНИЕ ПРЕДСТАВЛЕНИЙ В ТАБЛИЦАХ КАТАЛОГА

Поскольку SYSTEMCATALOG - это таблица, вы можете использовать ее в представлении. Фактически можно считать, что имеется такое представление с именем SYSTEMTABLES.

Это представление SYSTEMCATALOG содержит только те таблицы, которые входят в системный каталог; это обычно таблицы базы данных, типа таблицы Продавцов, которые показаны в SYSTEMCATALOG, но не в SYSTEMTABLES.

Давайте предположим, что только таблицы каталога являются собственностью пользователя 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 Одно небольшое добавление к этому, позволит каждому пользователю просматривать таблицу SYSTEMCOLUMNS для столбцов из его собственных таблиц. Сначала, давайте рассмотрим ту часть таблицы 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 реализации, будут обеспечивать вас большим количеством данных чем показано в этих столбцах, но показанное являются основой для любых реализаций.

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

CREATE VIEW Owncolumns

AS SELECT *

FROM SYSTEMCOLUMNS

WHERE tabowner = USER;

GRANT SELECT ON Owncolumns TO PUBLIC;

КОММЕНТАРИЙ В СОДЕРЖАНИИ КАТАЛОГА

Большинство версий SQL, позволяют вам помещать комментарии(ремарки) в специальные столбцы пояснений таблиц каталогов SYSTEMCATALOG и SYSTEMCOLUMNS, что удобно, так как эти таблицы не всегда могут объяснить свое содержание. Для простоты, мы пока исключали этот столбец из наших иллюстраций.

Можно использовать команду COMMENT ON со строкой текста, чтобы пояснить любую строку в одной из этих таблиц. Состояние - TABLE, для комментирования в SYSTEMCATALOG, и текст - COLUMN, для SYSTEMCOLUMNS. Например:

COMMENT ON TABLE Chris.Orders

IS 'Current Customer Orders';

Текст будет помещен в столбец пояснений SYSTEMCATALOG. Обычно, максимальная длина таких пояснений - 254 символов.

Сам комментарий, указывается для конкретной строки, одна с tname=Orders,

а другая owner=Chris. Мы увидим этот комментарий в строке для таблицы

Порядков в SYSTEMCATALOG:

SELECT tname, remarks

FROM SYSTEMCATALOG

WHERE tname = 'Orders'

AND owner = 'Chris';

Вывод для этого запроса показывается в Рисунке 24.2.

SYSTEMCOLUMNS работает точно так же. Сначала, мы создаем комментарий

COMMENT ON COLUMN Orders.onum

IS 'Order #';

затем выбираем эту строку из SYSTEMCOLUMNS:

SELECT cnumber, datatype, cname, remarks

FROM SYSTEMCOLUMNS

WHERE tname = 'Orders'

AND tabowner = 'Chris'

AND cname = onum;

Вывод для этого запроса показывается в Рисунке 24.3.

Чтобы изменить комментарий, вы можете просто ввести новую команду

COMMENT ON для той же строки. Новый комментарий будет записан

поверх старого. Если вы хотите удалить комментарий, напишите поверх

него пустой комментарий, подобно следующему:

COMMENT ON COLUMN Orders.onum

IS ";

и этот пустой комментарий затрет предыдущий.

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

| |

| SELECT tname, remarks |

| FROM SYSTEMCATALOG |

| WHERE tname = 'Orders' |

| AND owner = 'Chris' |

| ; |

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

| tname remarks |

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

| Orders Current Customers Orders |

| |

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

Рисунок 24.2: Коментарий в SYSTEMCATALOG

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

| |

| SELECT cnumber, datatype, cname, remarks |

| FROM SYSTEMCOLUMNS |

| WHERE tname = 'Orders' |

| AND tabowner = 'Chris' |

| AND cname = 'onum' |

| ; |

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

| cnumber datatype cname remarks |

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

| 1 integer onum Orders # |

| |

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

Рисунок 24.3: Комментарий в SYSTEMCOLUMNS

ОСТАЛЬНОЕ ИЗ КАТАЛОГА

Здесь показаны оставшиеся из ваших системных таблиц определения, с типовым запросом для каждого:

SYSTEMINDEXES - ИНДЕКСАЦИЯ В БАЗЕ ДАННЫХ

Имена столбцов в таблице SYSTEMINDEXES и их описания - следующие:

СТОЛБЦЫ ОПИСАНИЕ

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

iname Имя индекса (используемого для его исключения)

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

tname Имя таблицы которая содержит индекс

cnumber Номер столбца в таблице

tabowner Пользователь который владеет таблицей содержащей

индекс

numcolumns Число столбцов в индексе

cposition Позиция текущего столбца среди набора индексов

isunique Уникален ли индекс (Y или N)

ТИПОВОЙ ЗАПРОС Индекс считается неуникальным, если он вызывает продавца, в snum столбце таблицы Заказчиков:

SELECT iname, iowner, tname, cnumber, isunique

FROM SYSTEMINDEXES

WHERE iname = 'salesperson';

Вывод для этого запроса показывается в Рисунке 24.4.

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

| |

| SELECT iname, iowner, tname, cnumber, isunique |

| FROM SYSTEMINDEXES |

| WHERE iname = 'salespeople' |

| ; |

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

| iname iowner tname cnumber isunique |

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

| salesperson Stephan Customers 5 N |

| |

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

Рисунок 24.4: Строка из таблицы SYSTEMINDEXES

SYSTEMUSERAUTH - ПОЛЬЗОВАТЕЛЬСКИЕ И СИСТЕМНЫЕ ПРИВИЛЕГИИ В БАЗЕ ДАННЫХ

Имена столбцов для SYSTEMUSERAUTH и их описание, следующее:

СТОЛБЦЫ ОПИСАНИЕ

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

username Идентификатор (ID) доступа пользователя

password Пароль пользователя вводимый при регистрации

resource Где пользователь имеет права RESOURCE

dba Где пользователь имеет права DBA

Мы будем использовать простую схему системных привилегий, которая представлена в Главе 22, где были представлены три системных привилегии - CONNECT(ПОДКЛЮЧИТЬ), RESOURCE(РЕСУРСЫ)

и DBA.

Все пользователи получают CONNECT по умолчанию при регистрации, поэтому он не описан в таблице выше. Возможные состояния столбцов resource и dba могут быть - Y (Да, пользователь имеет привилегии) или - No (Нет, пользователь не имеет привилегий).

Пароли (password) доступны только высоко привилегированным пользователям, если они существуют. Следовательно запрос этой таблицы можно вообще делать только для информации относительно привилегий системы и пользователей.

ТИПОВОЙ ЗАПРОС Чтобы найти всех пользователей которые имеют привилегию RESOURCE, и увидеть какие из них - DBA, вы можете ввести следующее условие:

SELECT username, dba

FROM SYSTEMUSERAUTH

WHERE resource = 'Y';

Вывод для этого запроса показывается в Рисунке 24.5.

SYSTEMTABAUTH - ПРИВИЛЕГИИ ОБЪЕКТА КОТОРЫЕ НЕ ОПРЕДЕЛЯЮТ СТОЛБЦЫ

Здесь показаны имена столбцов в таблице SYSTEMTABAUTH и их описание:

COLUMN ОПИСАНИЕ

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

username Пользователь который имеет привилегии

grantor Пользователь который передает привилегии

по имени пользователя

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

owner Владелец tname

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

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

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

Возможные значения для каждой из перечисленных привилегий объекта (имена столбцов которых оканчиваются на auth) - Y, N, и G. G указывает что пользователь имеет привилегию с возможностью передачи привилегий. В каждой строке, по крайней мере один из этих столбцов должен иметь состояние отличное от N (другими словами, иметь хоть какую-то привилегию).

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

| |

| SELECT username, dba |

| FROM SYSTEMUSERAUTH |

| WHERE resource = 'Y' |

| ; |

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

| username dba |

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

| Diane N |

| Adrian Y |

| |

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

Рисунок 24 .5: Пользователи которые имеют привилегию RESOURCE

Первые четыре столбца этой таблицы составляют первичный ключ. Это означает что каждая комбинация из tname, владелец-пользователь (не забудьте, что две различные таблицы с различными владельцами могут иметь одно и тоже имя), пользователь и пользователь передающий права(гарантор), должна быть уникальной. Каждая строка этой таблицы содержит все привилегии (которые не являются определенным столбцом), предоставляются одним определенным пользователем другому определенному пользователю в конкретном объекте.

UPDATE и REFERENCES, являются привилегиями, которые могут быть определенными столбцами, и находиться в различных таблицах каталога. Если пользователь получает привилегии в таблице от более чем одного пользователя, такие привилегии могут быть отдельными строками созданными в этой таблице. Это необходимо для каскадного отслеживания при вызове привилегий.

ТИПОВОЙ ЗАПРОС Чтобы найти все привилегии SELECT, INSERT, и DELETE, которые Adrian предоставляет пользователям в таблице Заказчиков, вы можете ввести следующее (вывод показан в Рисунке 24.6):

SELECT username, selauth, insauth, delauth

FROM SYSTEMTABAUTH

Характеристики

Тип файла
Документ
Размер
1,55 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6489
Авторов
на СтудИзбе
303
Средний доход
с одного платного файла
Обучение Подробнее