Ограничение привилегий для множества столбцов

Группы привилегий, группы пользователей.

Команда GRANT

Предположим, пользователь Diane является владельцем таблицы Customers и нужно передать пользователю Adrian право на формулирование запросов к этой таблице. Для этого пользователь Diane должен ввести следующую команду:

GRANT SELECT ON Customers TO Adrian;

Теперь Adrian может выполнять запросы по таблице Customers. Без других привилегий он имеет право выполнять только выборку, а не какие-либо дейст­вия, влияющие на значения элементов таблицы Customers (включая использова­ние Customers в качестве родительской таблицы внешнего ключа, ограничивающего изменения, которые могут быть сделаны для значений табли­цы Customers).

Когда SQL выполняет команду GRANT, он выбирает привилегии пользова­теля, давая ему возможность определить GRANT как допустимую команду. Сам пользователь Adrian не может задать выполнение этой команды, а также пере­дать право выполнения SELECT другому пользователю: владельцем таблицы остается Dian (хотя было показано, как Dian может передать права на выпол­нение команды SELECT пользователю Adrian).

Для передачи прав на другие привилегии синтаксис тот же самый. Если Adrian является владельцем таблицы Salespeople, то он может разрешить Dian вводить в нее строки; для этого следует указать команду:

GRANT INSERT ON Salespeople TO Diane;

Теперь Diane может вносить в таблицу сведения о новых продавцах.

Передача привилегий не ог­раничивается передачей единственной привилегии единственному пользователю с помощью одной команды GRANT. Списки привилегий или пользователей с элементами, разделенными запятыми, допустимы. Например, Stephen может передать права на выполнение команд SELECT и INSERT для таблицы Orders пользователю Adrian:

GRANT SELECT, INSERT ON Orders TO Adrian;

либо пользователям Adrian и Diane:

GRANT SELECT, INSERT ON Orders TO Adrian, Diane;

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

Все объектные при­вилегии используют один и тот же синтаксис, за исключением команд UPDATE и REFERENCES, в которых, в случае необходимости, можно указывать имена столбцов. Привилегию выполнения команды UPDATE можно передать как и все остальные привилегии:

GRANT UPDATE ON Salespeople TO Diane;

Команда разрешает пользователю Diane изменять значения любого или всех столбцов таблицы Salespeople. Однако, если Adrian желает ограничить Diane возможностью изменять только значения комиссионных (значения столбца comm), то он должен вместо предыдущей команды указать:

GRANT UPDATE (comm) ON Salespeople TO Diane;

Т.е. пользователь просто должен указать после имени таблицы в круглых скобках имя столбца, на который распространяется привилегия UPDATE. Мно­жество имен столбцов таблицы можно указать в любом порядке через запятую:

GRANT UPDATE (city, comm) ON Salespeople TO Diane;

REFERENCES задается в соответствии с теми же правилами. Когда приви­легии REFERENCES передаются другому пользователю, он может создать внешние ключи, которые ссылаются на столбцы вашей таблицы как на роди­тельские ключи. Подобно UPDATE, привилегия REFERENCES может содер­жать список из одного или более столбцов для каждой привилегии. Например, Diane может передать Stephen право использования таблицы Customers в каче­стве родительского ключа с помощью следующей команды:

GRANT REFERENCES (cname, cnum) ON Customers TO Stephen;

Команда дает Stephen право использовать столбцы cnum и cname в качестве родительских ключей для любых внешних ключей в этих таблицах. Stephen по­лучает возможность управления по собственному усмотрению. В одной из его собственных таблиц он может определить (cname, cnum) или, например, (cnum, cname) как родительский ключ, определенный на двух столбцах и соответствую­щий внешнему, определенному на двух столбцах. Или он может создать отдель­ные внешние ключи для ссылки на поля индивидуально, при условии, что Diane имеет подходящим образом разработанные родительские ключи (см. главу 19). Здесь нет ограничений на число внешних ключей, которые могут базироваться на родительских ключах, и на число родительских ключей для разрешенного множества внешних ключей. Что касается привилегии UPDATE, то можно опустить список столбцов и, следовательно, разрешить использование всех столбцов в качестве родительских ключей. Adrian может передать Diane права делать это следующим образом:

GRANT REFERENCES ON Salespeople TO Diane;

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: