Программирование >>  Руководство по sql 

1 ... 64 65 66 [ 67 ] 68 69 70 ... 105


операций, являются таблицы и курсоры. Санкция на выдачу этих разрешений исходит от владельца соответствуюшего объекта и может передаваться вместе с самим разрешением. Сушествует два варианта синтаксиса команды GRANT, отличающихся по местоположению списка столбцов.

GRANT {ALL j список полномочий}

ON {имя таблицы [{список столбцов)] [список столбцов)]} ТО {PUBLIC I } [WITH GRANT OPTION]

GRANT {ALL список полномочий [(список столбцов)]} ON { имя таблицы имя курсора } TO {PUBLIC I список попьзователей } [WITH GRANT OPTION]

Команда REVOKE похожа на команду GRANT: REVOKE {ALL ] список полномочий }

ON {имя таблицы [ (список столбцов)] имя курсора [(список столбцов )]} FROM {PUBLIC 1 список пользователей }

REVOKE {ALL список полномочий [(список столбцов)]} ON { имя таблицы имя курсора } FROM {PUBLIC I список пользователей }

Как это часто бывает в SQL, синтаксис выглядит намного сложнее, чем большинство операторов, с которыми вам придется иметь дело в действительности. Прежде чем мы объясним это подробнее, приведем простой пример, в котором Магу получает разрешение вставлять данные в таблицу titles и обновлять ее:

SQL:

grant insert, update on titles to тагу

Ha рис. 10.1 представлено небольшое отличие в операторах из двух диалектов SQL, которые аннулируют разрешение Магу на обновление столбцов advance и price в таблице titles. Другие варианты синтаксиса приведены в Приложении Б.

SQL: SQL:

revoke update (advance, price) revoke update

on titles on titles (advance, price)

from тагу from тагу

Рис. 10.1. Сравнение двух операторов REVOKE

Рассмотрим подробнее синтаксис команд GRANT и REVOKE. Первая строка включает ключевое слово GRANT или REVOKE и либо ключевое слово ALL, либо список полномочий, которыми наделяется пользователь (или которые снимаются с него). Если в списке необходимо указать несколько полномочий, они разделяются запятыми. Если используется ключевое слово ALL, то предоставляются или аннулируются все полномочия, применимые к данному объекту (т.е. все полномочия, которыми обладает наделяющий или аннулирующий пользователь).

В операторе ON указывается таблица или курсор, на которые вьщаются или аннулируются полномочия (по одной таблице или одному курсору на оператор).

В разных версиях SQL допускаются разные наборы полномочий. В этих наборах всегда присутствуют SELECT, UPDATE, INSERT и DELETE, а в SQL-92 добавлено REFERENCES (право ссылаться из оператора CREATE TABLE на другие таблицы). Реже включаемыми полномочиями являются ALTER, INDEX и EXECUTE. Разные SQL отличаются друг от друга возможностью управлять выдачей разрешений на некоторые, все или на одну из этих операций на уровне столб-Глава 10. Безопасность, транзакции, производительность и целостность 203



цов, таблиц или курсоров. Когда полномочия выдаются по отдельным столбцам, имя (имена) столбца (столбцов) перечисляются в круглых скобках.

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

Следующая строка в синтаксисе начинается с ключевого слова ТО (для команды GRANT) или FROM (для команды REVOKE). Ключевое слово PUBLIC означает всех пользователей в системе.

Альтернативой PUBLIC является список имен пользователей, которых вы хотите наделить полномочиями (или наоборот, лишить их). Как обычно, имена в этом списке разделяются запятыми. Некоторые диалекты SQL поддерживают концепцию пользовательских фупп и ролей (или того и другого); в этих SQL в список пользователей можно включить название какой-либо фуппы или роли.

Необязательный оператор WITH GRANT OPTION определяет, может ли пользователь, наделяемый полномочиями, в свою очередь передавать их другим пользователям. Например, ниже приведен оператор, который наделяет Магу правом выполнять операцию SELECT в таблице authors и позволяет ей передавать это право другим пользователям.

SQL:

grant select on authors to тагу

with grant option

Когда вы устанавливаете разрешения для какой-либо таблицы или курсора, владельцем которых являетесь именно вы, лучше всего использовать команды GRANT и REVOKE в соответствии с каким-то определенным и хорошо продуманным планом, а не выполнять их хаотически, под влиянием сиюминутных настроений.

Ниже приведено несколько примеров, которые показывают, как пользоваться операторами GRANT и REVOKE для выделения полномочий на определенную таблицу. Допустим, вы являетесь владельцем таблицы titles и решаете, что большинству пользователей системы следует разрешить доступ к этой таблице - за исключением столбцов, в которых речь идет о деньгах и продажах. Вы хотите разрешить модифицировать эти столбцы только трем конкретным пользователям (Sara, John и Leslie).

Такой вариант можно реализовать, воспользовавшись одним из двух подходов. Самый простой из них - назначить конкретные полномочия конкретным пользователям. В данном случае это будет означать выдачу нескольких команд GRANT. Вам потребуется один оператор, чтобы наделить всеми полномочиями пользователей с именами Sara, John и Leslie:

SQL:

grant select, insert, delete, update on titles

to sara, John, leslie

Теперь вам потребуется оператор, чтобы наделить полномочиями на выборку всех остальных пользователей:

SQL:

grant select on titles

to linda, pat, steve, chris, cathy, peter, lee, carl, karen



Список пользователей может быть весьма пространным; кроме того, вам понадобится еще один оператор, предоставляющий всем им разрещение модифицировать все столбцы в таблице titles, за исключением advance, price и ytd sales. В зависимости от синтаксических правил, действующих в вашей системе, вам придется воспользоваться одним из двух следующих операторов:

SQL:

grant update

on titles (title id, title, type, pub id, contract, notes, pubdate) to linda, pat, steve, chris, cathy, peter, lee, carl, karen

grant update (title id, title, type, pub id, contract, notes, pubdate) on titles

to linda, pat, steve, chris, cathy, peter, lee, carl, karen

Поскольку вы собираетесь предоставить большинству пользователей большинство полномочий, проще было бы назначить все полномочия всем пользователям, а затем аннулировать конкретные полномочия у некоторых пользователей. Вот как это делается. Начните с оператора, который наделяет всех пользователей правами выбирать данные из таблицы titles, вставлять данные в эту таблицу, удалять из нее данные и обновлять ее.

SQL:

grant all on titles to public

Вы проявили потрясающую щедрость: теперь любой пользователь может модифицировать таблицу titles по своему усмотрению. Чтобы защитить самые важные столбцы, выполните оператор, изменяющий ситуацию, созданную предшествующим оператором. Приведенные ниже операторы аннулируют права всех пользователей на обновление столбцов advance, price и ytdsales в таблице titles. Другие права, дарованные в предшествующем операторе, остаются неизменными.

SQL:

revoke update

on titles (price, advance, ytd sales) from public

Теперь, чтобы предоставить пользователям с именами Sara, John и Leslie право обновлять эти столбцы, можно задать следующую команду:

SQL:

grant update

on titles (price, advance, ytd sales) to sara, John, leslie

Вам наверняка потребуется включить в этот список пользователей и себя, поскольку исключение FROM PUBLIC относится и к вам.

Конфликты операторов GRANT и REVOKE. Как явствует из предыдущих примеров, для операторов GRANT и REVOKE имеет большое значение порядок их следования (в больщинстве реализаций SQL). В случае какого-либо конфликта оператор, выполненный самым последним, отменяет действие всех предьщущих операторов. Так, например, если все пользователи был наделены правом на выборку данных из таблицы titles, а затем пользователю с именем Joe было запрещено просматривать столбец advance, то он сможет просматривать все столбцы, за исключением столбца advance, в то время как другие пользователи смогут по-прежнему видеть все столбцы. Аналогично, оператор GRANT или REVOKE изменит все установленные ранее полномочия.

Результатом действия этого правила является то, что одни и те же операторы GRANT и REVOKE, выполненные в разной последовательности, могут создавать



1 ... 64 65 66 [ 67 ] 68 69 70 ... 105

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика