Опубликован: 07.05.2010 | Уровень: специалист | Доступ: свободно
Лекция 25:

Администрирование InterBase: безопасность БД

< Лекция 24 || Лекция 25: 12 || Лекция 26 >

Права

Добавление нового пользователя еще не означает, что он сможет работать с БД. Чтобы он мог с ней работать, ему необходимо также выделить какие то права. Права в InterBase раздаются пользователям и ролям (и даже хранимым процедурам и триггерам) на какие либо действия с отдельными объектами БД. Под объектами подразумеваются таблицы и их столбцы, просмотры и хранимые процедуры. Права могут быть такими:

  • Для таблиц и их полей команды SELECT, INSERT, UPDATE, DELETE и REFERENCES (право на создание ограничений внешнего ключа FOREIGN KEY для данной таблицы. Если таблица содержит внешний ключ, а пользователь должен иметь право на изменение таблицы, то это право ему необходимо также предоставить).
  • Для просмотров VIEW команды SELECT, INSERT, UPDATE и DELETE.
  • Для хранимых процедур команда EXECUTE.

Таким образом, пользователю можно предоставить, например, права на изменение каких то отдельных столбцов; на другие столбцы только просмотр; возможность добавлять новую запись, но без возможности ее удалить. Могут быть пользователи с правами только на просмотр определенных таблиц или, наоборот, с полными правами на все объекты БД. Раздаются права командой GRANT.

Предоставлять пользователям права удобней утилитой IBConsole. Загрузите IBConsole, войдите в локальный сервер и базу данных First. Дадим пользователю PUPKIN (которого мы создали в "Введение в клиент-серверные БД. InterBase" ) права на просмотр таблицы Tovar. Откройте окно Interactive SQL и введите следующую команду:

GRANT SELECT ON TOVAR TO PUPKIN;

После нажатия кнопки Execute Query, пользователь PUPKIN получит права на просмотр этой таблицы. Убедиться в этом можно, выделив в IBConsole таблицу Tovar, щелкнув по ней правой кнопкой и выбрав команду Properties. Перейдем на вкладку Permission:

Права на таблицу Tovar

Рис. 25.2 . Права на таблицу Tovar

Как видим, пользователь SYSDBA имеет на таблицу все права, тогда как пользователь PUPKIN - только на чтение. И еще мы можем сделать вывод, что если пользователи и их пароли хранятся в системной БД InterBase, то их права на объекты рабочей БД хранятся в этой самой БД.

Значок открытой руки в правах пользователя SYSDBA означает, что эти права могут передаваться другим пользователям. Дадим пользователю PUPKIN права на модификацию записей, с возможностью передачи этого права другим пользователям. Для этого существует дополнительный оператор WITH GRANT OPTION. Снова откроем Interactive SQL и введем следующую команду:

GRANT UPDATE ON TOVAR TO PUPKIN WITH GRANT OPTION;

Если мы снова откроем вкладку Permission таблицы Tovar, то убедимся, что PUPKIN теперь имеет право не только изменять записи таблицы, но и передавать это право другим пользователям. Причем каждый пользователь может передавать лишь те права или их часть, которые есть у него самого.

Чтобы предоставить пользователю права на отдельные столбцы в таблице, их нужно перечислить в скобках:

GRANT UPDATE (FNAME, FTYPE, FCENA) ON FOOD TO PUPKIN;

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

GRANT SELECT, INSERT, UPDATE  ON  PRIM_1 TO PUPKIN;

Через запятую можно указать и список пользователей:

GRANT SELECT, INSERT ON DAYS TO PUPKIN, MISHA;

Чтобы предоставить пользователю ВСЕ права на объект, можно использовать оператор ALL:

GRANT ALL ON SKLAD TO PUPKIN;

А чтобы предоставить какое то право ВСЕМ зарегистрированным пользователям, можно воспользоваться "виртуальным" пользователем PUBLIC:

GRANT ALL ON SDELKI TO PUBLIC;

Права можно не только дать, но и отнять. Делается это командой REVOKE, которая является копией GRANT, только с обратным действием (вместо TO <пользователь> синтаксис использует FROM <пользователь>). Например, снять все права у всех пользователей на таблицу Sdelki можно командой:

REVOKE ALL ON SDELKI FROM PUBLIC;

Пользователь SYSDBA при этом прав на таблицу не потеряет.

Роли

Когда в организации работает множество пользователей, они, как правило, разбиваются на группы. Например, несколько бухгалтеров с одинаковыми правами. Чтобы не терять время на создание одинаковых прав для нескольких пользователей, в InterBase имеется механизм ролей. При пользовании этим механизмом, существует четыре последовательности действий:

  1. Создать роль.
  2. Присвоить этой роли необходимые права.
  3. Назначить нужным пользователям эту роль.
  4. При соединении с БД указать не только имя пользователя и пароль, но и его роль.

Выполним эту последовательность в окне Interactive SQL:

CREATE ROLE BUH; /*Создаем роль*/
GRANT ALL ON SDELKI TO BUH; /*присваиваем ей права*/
GRANT BUH TO PUPKIN; /*Предоставляем роль пользователю*/

Теперь, если мы выделим в дереве серверов в нашей БД раздел Roles, то увидим новую роль BUH:

Создание роли

Рис. 25.3 . Создание роли

А если щелкнуть по BUH в правой части окна правой копкой и выбрать команду Properties, мы увидим, что на эту роль имеет право пользователь PUPKIN. Чтобы подключить пользователя PUPKIN к БД в контексте роли, а не как просто пользователя, в параметрах компонента IBDatabase нужно будет указать следующие параметры:

user_name=pupkin
password=qwerty
sql_role_name=buh
lc_ctype=WIN1251

Это сработает только в том случае, если данному пользователю действительно присвоена эта роль. Таким образом, в клиентском приложении можно сделать гибкую систему подключений пользователя: как простого пользователя с одними правами, и как пользователя в контексте роли с другими правами.

Если же мы подключаемся к БД другим образом, например, через SQL -скрипт, то параметры подключения могут выглядеть иначе:

CONNECT C:\DATABASES\FIRST.GDB 
USER PUPKIN
ROLE BUH
PASSWORD qwerty;

Удаляется роль командой DROP, при этом все права роли на объекты утрачиваются:

DROP ROLE BUH;
< Лекция 24 || Лекция 25: 12 || Лекция 26 >
Евгений Медведев
Евгений Медведев
Не могу вставить модуль данных
Анна Зеленина
Анна Зеленина
пытаюсь повторить упражнение в лекции 5
Сергей Власюк
Сергей Власюк
Украина
Игорь Крещенников
Игорь Крещенников
Россия, Новосибирск