Опубликован: 02.08.2007 | Доступ: свободный | Студентов: 3890 / 753 | Оценка: 4.55 / 4.39 | Длительность: 27:09:00
ISBN: 978-5-9556-0111-3
Лекция 13:

Создание физической модели базы данных. Подготовка скрипта для создания базы данных

Создание пользователей и назначение им привилегий

Создание пользователей

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

  • это человек, который входит в базу данных для выполнения работы;
  • это область схемы приложения, в которой хранятся объекты, используемые этим приложением.

На самом деле под созданием пользователя базы данных понимают создание учетной записи пользователя (user account) в словаре данных, с помощью которой пользователь может войти в базу данных для выполнения своей работы. Учетные записи представляют собой способ организации доступа пользователя к базе данных, выдачи разрешений на выполнение требуемых задач, а также отслеживания выполняемых пользователем действий. Такая учетная запись включает имя пользователя базы данных, которое присваивают пользователю в базе данных, пароль, указание которого разрешает доступ к объектам базы данных, уровень полномочий или уровень доступа и еще ряд опциональных параметров. Уровень доступа означает тип операций, которые данный пользователь может выполнять (создавать таблицу, определять пользователей и т.д).

Пользователь является объектом базы данных. При создании пользователя базы данных обязательным является указание имени. Остальные параметры могут быть установлены администратором базы данных позже с помощью команды SQL ALTER USER.

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

Чтобы создать пользователей базы данных, проектировщик должен иметь список лиц, которым будут разрешен доступ к базе данных.

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

CREATE USER имя_пользователя IDENTIFIED BY 
  [пароль|EXTERNALLY];

Ключевое слов EXTERNALLY указывает, что должна быть использована аутентификация операционной системы.

Для исключения пользователей из базы данных применяется команда DROP USER.

В качестве примера создадим пользователей нашей учебной базы данных. Допустим, что у нас есть следующий фрагмент списка лиц, которые в организации будут пользоваться базой данных:

...
Иванов А.А. - разработчик приложения
Петров В.В. - разработчик приложения
Сидоров С.С. - тестировщик базы данных
…

Иванов и Петров уже имеют системную аутентификацию, и администратор базы данных решил, что учетная запись для их доступа к базе данных будет такой же. Их имена для входа в систему - Ivan и Peter, соответственно. Сидоров - это новый сотрудник, который будет принят на работу через 1,5 месяца специально для тестирования базы данных. Совместно с администратором базы данных было решено, что его имя для входа в базу данных будет Sidorov, а пароль - alsy_. Тогда проектировщик базы данных может включить в свой скрипт следующие команды:

CREATE USER Ivan IDENTIFIED BY EXTERNALLY;
CREATE USER Peter IDENTIFIED BY EXTERNALLY;
CREATE USER Sidorov IDENTIFIED BY 'alsy_';

Назначение привилегий

С каждой учетной записью связана так называемая область привилегий, которая остается пустой при создании ее с помощью команды CREATE USER.

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

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

Множество базовых привилегий определено стандартом ANSI SLQ, но, как правило, в конкретных СУБД поддерживаются дополнительные типы привилегий. Например, в СУБД Oracle их около сотни.

Все привилегии могут быть разделены на два класса: системные привилегии и привилегии прав доступа к объектам базы данных.

Системная привилегия - это привилегия, которая дает пользователю право на выполнение какой-либо операции в масштабе базы данных. Например, привилегия SELECT ANY TABLE дает пользователю право выполнять выборку из любой таблицы базы данных.

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

Для предоставления привилегий или, как еще говорят, авторизации доступа в SQL предусмотрена команда GRANT - ее может выполнить обычно только системный администратор, который предопределен в системе как SYSADM (наивысший уровень доступа, при котором возможно выполнение всех операций над БД). В СУБД Oracle такой пользователь должен обладать привилегией GRANT ANY RPIVILEGE.

Команда GRANT для определения системных привилегий имеет следующий синтаксис:

GRANT системная_привилегия [ { , системная_привиления } ѕ] 
TO { пользователь | PUBLIC } [{, пользователь} ѕ ] [WITH ADMIN OPTION]

В СУБД Oracle привилегии прав доступа к объекту могут быть предоставлены двум объектам системы: пользователям и ролям. Роль представляет собой поименованный набор привилегий. Предложения команды GRANT в данном случае управляют разграничением доступа к объектам базы данных: таблицам, представлениям, процедурам и т.д. Синтаксис команды имеет вид

GRANT {привилегия_доступа_к_объекту | ALL PRIVILEGES} 
[ имя_столбца [{ , имя_столбца } ѕ] ]
[{ , привилегия_доступа_к_объекту } ѕ ]
ON [имя_схемы.]имя_объекта
TO { пользователь | PUBLIC } 
[WITH GRANT OPTION]

Список привилегий доступа показан в таблице 13.1 ниже.

Таблица 13.1. Список привилегий доступа
Привилегия Разрешаемые действия
SELECT Выполнение вставки данных из соответствующего объекта
INSERT Выполнение вставки данных в соответствующий объект или его элемент
UPDATE Выполнение модификации данных в соответствующем объекте или его элементе
REFERENCES Определение столбцов как родительских ключей по отношению к внешним ключам в таблицах, ссылки, по которой производится контроль целостности объекта или егоэлемента
DELETE Выполнение удаления данных из соответствующего объекта
EXECUTE Выполнение действия с соответствующим объектом, например, вызов процедуры
INDEX Выполнение индексирования для соответствующего объекта

Таким образом, команда GRANT состоит из трех предложений. GRANT - для присвоения привилегий, ON - для определения таблицы и TO - для определения пользователей. Допустим, что вы хотите дать право на доступ к таблице EMPLOYEE пользователю PETROV. Тогда следует выполнить команду

GRANT SELECT
ON EMPLOYEE
TO PETROV;

Вы можете также дать привилегии на выполнение обновления, добавления, удаления данных в таблицах и виртуальных таблицах (UPDATE, INSERT, DELETE), а также для изменения структуры таблицы (ALTER) и право на использование индекса (INDEX). При определении привилегии на обновление вы можете указать список колонок, обновлять которые вы разрешаете другим пользователям таблицы.

Можно разрешить доступ на выборку таблицы и группе пользователей. Допустим, что вы желаете разрешить доступ к таблице EMPLOYEE всем пользователям, но исключить при этом доступ к колонкам SAL, COMM и FINE. Хорошим решением в данном случае будет создать виртуальную таблицу и разрешить доступ к ней всем пользователям:

CREATE VIEW EMP  AS
   SELECT  EMPNO,ENAME,JOB,AGE,HIREDATE,DEPNO
   FROM  EMPLOYEE;

Теперь вы можете разрешить доступ всем пользователям к созданной виртуальной таблице, используя ключевое слово PUBLIC.

GRANT SELECT
ON   EMP
TO     PUBLIC;

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

CREATE  VIEW  EMPDEPT  AS
    SELECT *
    FROM  EMPLOYEE
    WHERE  DEPNO IN
       ( SELECT DEPNO
         FROM  EMPLOYEE
         WHERE  ENAME = USER );

Теперь вы можете определить привилегии доступа для всех руководителей организации:

GRANT SELECT,UPDATE
ON EMPDEPT
TO  IVLEV

Для отмены привилегий доступа в SQL предназначена команда REVOKE. Эта команда, так же как и команда GRANT, включает предложения ON и TO. Предложение REVOKE определяет отменяемую привилегию. Чтобы отменить привилегии на добавление строк в таблицу пользователю PETROV, нужно выполнить команду

REVOKE  INSERT
ON DEPARTAMENT
TO  PETROV;
Александра Каева
Александра Каева
Михаил Забелкин
Михаил Забелкин