Название: Базы данных. Концепция баз данных, реляционная модель данных, языки SQL и XML (Токмаков Г. П.)

Жанр: Информационные системы и технологии

Просмотров: 1401


5.1.назначение и ликвидация прав

 

5.1.1.  К ОМА Н Д А  GRANT

 

Создание пользователя само по себе не дает ему никаких прав на доступ к объектам базы данных. Права доступа предоставляются командой GRANT.GRANT ус- танавливает права на объекты базы данных пользователям, ролям или другим объектам базы данных. Когда объект создается право на него имеет только его создатель и только он может выдавать права другим пользователям или объектам.

Для доступа к таблице пользователь или объект нуждается в правах на SE‐ LECT, INSERT, UPDATE, DELETE или REFERENCES. Для вызова процедуры в прило- жении пользователь должен иметь права на EXECUTE. Права могут быть даны всем пользователям опцией PUBLIC на месте списка пользователей.

Перечень прав приведен в нижеследующей таблице.

Права Позволяет пользователям     . ALL..........SELECT, INSERT, UPDATE, DELETE, EXECUTE, REFERENCES

SELECT.......Дает право выбирать строки из таблицы или просмотра

INSERT.......Дает право добавлять строки в таблицы или просмотры UPDATE.......Дает право изменять строки в таблице или просмотре DELETE.......Дает право удалять строки из таблицы или просмотра EXECUTE......Дает право выполнять хранимую процедуру REFERENCES...Дает право ссылаться при работе с FK на специфицированные

столбцы

Чтобы показать, насколько гибкой является система безопасности сервера

БД, приведем синтаксис команды предоставления прав:

 

GRANT{

<список прав>

ON [TABLE] {имяТаблицы | имяПросмотра}

TO {<объект> | <списокПользователей>} | <роль> TO {PUBLIC | <списокРолей>}};

 

Здесь

<права> = {ALL [PRIVILEGES] | <списокПрав>} где

<списокПрав> = { SELECT | INSERT |

UPDATE [(столбец [,столбец ...])] | REFERENCES [(столбец [,столбец ...])]

[,<списокПрав> ...]}

 

Это  права  на  выполнение  либо  отдельных  операций  SELECT, DELETE, INSERT, UPDATE, REFERENCES, либо их комбинаций, либо всех – ALL. предостав- ление права REFERENCES означает возможность создавать ссылочную целост- ность таблиц (ограничения внешнего ключа FOREIGN KEY).

Далее в команде GRANT под <объект> понимают:

 

<объект> =

PROCEDURE имяПроцедуры | TRIGGER имяТриггера | VIEW имяПросмотра | PUBLIC |

[,<объект> ...]

 

<списокПользователей> – это пользователи, которым предоставлены права на выполнение хранимых процедур, триггеров и просмотров.

<роль> – в системе безопасности InterBase-сервера пользователей можно

объединять в группы. Например, на фирме есть служба, которая использует ба- зы данных, но не может их удалять. То есть ее сотрудникам достаточно прав на выполнение операций SELECT, INSERT, UPDATE. В этом случае создаем роль SEL_INS_UP:

 

CREATE ROLE SEL_INS_UP

 

Предоставляем этой роли право на просмотр, вставку и изменение данных таблицы, например, Owner:

 

GRANT SELECT, INSERT, UPDATE ON Owner TO SEL_INS_UP Назначаем эту роль каждому из сотрудников данной службы: GRANT SEL_INS_UP TO <имяПользователя>

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

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

При назначении прав доступа на операцию можно уточнить, значения каких столбцов может изменять пользователь. Допустим, что пользователь Petrov имеет

право изменять цену на предоставление услуги. Предположим, что цена задается в столбце COST таблицы SERVICE. Тогда операция назначения прав пользователю Pe‐ trov выглядит следующим образом:

 

GRANT SELECT, UPDATE (COST) ON SERVICE TO Petrov

 

5.1.2. К ОМА Н Д А  REVOKE

 

Ликвидация ранее выданных прав осуществляется командой REVOKE. Ее фор-

мат:

 

 

REVOKE <права> ON [TABLE] {имяТаблицы | имяПросмотра} FROM {<объект> | <списокПользователей>}

 

Пример, лишить пользователя Petrov права вставки данных в таблицу Owner:

 

REVOKE INSERT ON Owner FROM Petrov