КОМАНДА GRANT
Позвольте предположить, что пользователь
Diane имеет таблицу Заказчиков и хочет
позволить пользователю Adrian выполнить
запрос к ней. Diane должна в этом случае ввести
следующую команду:
GRANT INSERT ON Salespeople TO Diane;
Теперь Adrian может выполнить запросы к
таблице Заказчиков. Без дру- гих привилегий,
он может только выбрать значения; но не
может выполнить любое действие, которые бы
воздействовало на значения в таблице
Заказчи- ков ( включая использование
таблицы Заказчиков в качестве родительской
таблицы внешнего ключа, что ограничивает
изменения которые выполнять со значением в
таблице Заказчиков).
Когда SQL получает команду GRANT, он проверяет
привилегии пользователя подавшего эту
команду, чтобы определить допустима ли
команда GRANT. Adrian самостоятельно не может
выдать эту команду. Он также не может
предоставить право SELECT другому
пользователю: таблица еще принадлежит Diane (
позже мы покажем как Diane может дать право
Adrian предоставлять SELECT другим пользователям).
Синтаксис - тот же самый, что и для
предоставлени других привилегий. Если Adrian -
владелец таблицы Продавцов, то он может
позволить Diane вводить в нее строки с помощью
следующего предложения
GRANT INSERT ON Salespeople TO Diane;
Теперь Diane имеет право помещать нового
продавца в таблицу.
ГРУППЫ ПРИВИЛЕГИЙ, ГРУППЫ ПОЛЬЗОВАТЕЛЕЙ
Вы не должны ограничивать себя
предоставлением одиночной привилегии
отдельному пользователю командой GRANT.
Списки привилегий или пользователей,
отделяемых запятыми, являются совершенно
приемлемыми. Stephen может предоставить и SELECT и
INSERT в таблице Порядков для Adrian
GRANT SELECT, INSERT ON Orders TO Adrian;
или и для Adrian и для Diane
GRANT SELECT, INSERT ON Orders TO Adrian, Diane;
Когда привилегии и пользователи
перечислены таким образом, весь спи- сок
привилегий предоставляются всем указанным
пользователям. В строгой ANSI интерпретации,
вы не можете предоставить привилегии во
многих таблицах сразу одной командой, но в
некоторых реализациях это ограничение
может быть ослаблено, позволяя вам
указывать несколько таблиц, отделяя их
запятыми, так что бы весь список привилегий
мог быть предоставлен для всех указанных
таблиц.
ОГРАНИЧЕНИЕ ПРИВИЛЕГИЙ НА ОПРЕДЕЛЕННЫЕ
СТОЛБЦЫ
Все привилегии объекта используют один
тот же синтаксис, кроме команд UPDATE и REGERNCES в
которых необязательно указывать имена
столбцов. Привилегию UPDATE можно
предоставлять наподобие других привилегий:
GRANT UPDATE ON Salespeople TO Diane;
Эта команда позволит Diane изменять
значения в любом или во всех столбцах
таблицы Продавцов. Однако, если Adrian хочет
ограничить Diane в изменении например
комиссионных, он может ввести
GRANT UPDATE (comm) ON Salespeople TO Diane;
Другими словами, он просто должен указать
конкретный столбец к которому привилегия
UPDATE должна быть применена, в круглых
скобках после имени таблицы. Имена
многочисленных столбцов таблицы могут
указываться в любом порядке, отделяемые
запятыми:
GRANT UPDATE (city, comm) ON Salespeople TO Diane;
REFERENCES следует тому же самому правилу.
Когда вы предоставите при- вилегию REFERENCES
другому пользователю, он сможет создавать
внешние ключи ссылающиеся на столбцы вашей
таблицы как на родительские ключи. Подобно
UPDATE, для привилегии REFERENCES может быть указан
список из одного или более столбцов для
которых ограничена эта привилегия.
Например, Diane может предоставить Stephen право
использовать таблицу Заказчиков, как
таблицу родительского ключа, с помощью
такой команды:
GRANT REFERENCES (cname, cnum)
ON Customers TO Stephen;
Эта команда дает Stephen право использовать
столбцы cnum и cname, в качестве родительских
ключей по отношению к любым внешним ключам
в его таблицах. Stephen может контролировать то
как это будет выполнено. Он может
определить (cname, cnum) или, как в нашем случае(
cnum, cname), как двух-столбцовый родительский
ключ, совпадающий с помощью внешнего ключа
с двум столбцами в одной из его собственных
таблиц. Или он может создать раздельные
внешние ключи чтобы ссылаться на пол
индивидуально, обеспечив тем самым чтобы
Diane имела принудительное присвоение роди-
тельского ключа (см.