
- •254 Понимание sql
- •256 Понимание sql
- •258 Понимание sql
- •260 Понимание sql
- •262 Понимание sql
- •266 Понимание sql
- •268 Понимание sql
- •270 Понимание sql
- •272 Понимание sql
- •274 Понимание sql
- •276 Понимание sql
- •278 Понимание sql
- •280 Понимание sql
- •282 Понимание sql
- •284 Понимание sql
- •286 Понимание sql
- •288 Понимание sql
- •290 Понимание sql
- •292 Понимание sql
- •294 Понимание sql
- •Глава 23 продолжит обсуждение о выводах в sql, таких как сохранение
284 Понимание sql
______________________________________________________________________
ГЛ. 22
ОГРАНИЧЕНИЕ ПРИВИЛЕГИЙ
НА ОПРЕДЕЛЕННЫЕ СТОЛБЦЫ
Все привилегии объекта используют один тот же синтаксис, кроме команд
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 имела принудительное присвоение роди-
тельского ключа (см. Главу 19 ).
ОПРЕДЕЛЕНИЕ: КТО МОЖЕТ ДЕЛАТЬ ЧТО 285
______________________________________________________________________
Не имея ограничений на номера внешних ключей он должден базироваться
на этих родительских ключах, а родительские ключи различных внешних
ключей - разрешены для совмещения(overlap).
Как и в случае с привилегией UPDATE, вы можете исключить список столб-
цов и таким образом позволять всем без исключения столбцам быть исполь-
зуемыми в качестве родительских ключей. Adrian может предоставить Diane
право сделать это следующей командой:
GRANT REFERENCES ON Salespeople TO Diane;
Естественно, привилегия будет пригодна для использования только в столб-
цах, которые имеют ограничения требуемые для родительских ключей.
ИСПОЛЬЗОВАНИЕ АРГУМЕНТОВ ALL И PUBLIC
SQL поддерживает два аргумента для команды GRANT, которые имеют специ-
альное значение: ALL PRIVILEGES (ВСЕ ПРИВИЛЕГИИ) или просто
ALL и PUBLIC (ОБЩИЕ). ALL используется вместо имен привилегий в
команде GRANT чтобы отдать все привилегии в таблице. Например, Diane мо-
жет дать Stephen весь набор привилегий в таблице Заказчиков с помощью такой
команды:
GRANT REFERENCES ON Salespeople TO Diane;
( привилегии UPDATE и REFERENCES естественно применяются ко всем
столбцам. ) А это другой способ высказать ту же мысль:
GRANT ALL ON Customers TO Stephen;
PUBLIC - больше похож на тип аргумента - захватить все (catch-all), чем
на пользовательскую привилегию.
Когда вы предоставляете привилегии для публикации, все пользователи
автоматически их получают. Наиболее часто, это применяется для приви-
легии SELECT в определенных базовых таблицах или представлениях ко-
торые вы хотите сделать доступными для любого пользователя. Чтобы
позволить любому пользователю видеть таблицу Порядков, вы, например,
можете ввести следующее:
GRANT SELECT ON Orders TO PUBLIC;