Управление доступом к базе данных. Пользователи базы данных Oracle и схемы. Аутентификация в СУБД Oracle и SQL Server, страница 4

Хранимая процедура

Описание

Пример

sp_addlogin

[@loginame =] 'имя_учетной_записи'

[, [@passwd =] 'пароль']

[, [@defdb =] 'БД_по_умолчанию']

Используется, чтобы создать идентификатор SQL Server и предоставить ему доступ с заданным паролем (NULL, если опущен). Можно указать базу данных по умолчанию (Master, если опущено), язык, идентификатор безопасности, опции шифрования пароля

sp_addlogin

@loginame = 'student'

@passwd = 'subd'

sp_droplogin

[@loginame =] 'имя_учетной_записи'

Используется, чтобы удалить идентификатор SQL Server. Нельзя удалить идентификатор, который соответствует пользователю БД, имеющему привилегии для этой БД. Сначала необходимо удалить привилегии.

sp_addlogin

@loginame = 'student'

Авторизация пользователей

Для получения доступа к базе данных одной аутентификации не достаточно. Пользователи базы данных должны пройти авторизацию, чтобы получить доступ к собственной схеме (Oracle) или определенной базе данных (SQL Server).

Авторизация в СУБД Oracle

Только что созданный пользователь базы данных Oracle не имеет никаких привилегий, в том числе на создание сеанса связи с базой данных. При попытке пользователя соединиться с базой данных возвращается ошибка, сообщающая, что пользователь не имеет необходимых привилегий. Администратор базы данных должен разрешить пользователю создавать сеанс, чтобы он мог, по крайней мере, соединиться с базой данных. Для этого в СУБД Oracle используется команда GRANT CREATE SESSION TO пользователь.

SQL> CONNECT student/tbd

ERROR:

ORA-01045: user STUDENT lacks CREATE SESSION privilege; logon denied

Warning: You are no longer connected to ORACLE.

SQL> CONNECT system

Enter password: *********

Connected.

SQL> GRANT CREATE SESSION TO student;

Grant succeeded.

SQL> CONNECT student/tbd

Connected.

Администратор может запретить пользователю соединяться с базой данных Oracle. Для этого используется команда REVOKE CREATE SESSION FROM пользователь.

Авторизация в SQL Server

Для управления авторизацией в SQL Server используются системные хранимые процедуры:

Хранимая процедура

Описание

Пример

sp_grantdbaccess

[@loginame =] 'имя_учетной_записи'

[, [@name_in_db =] 'псевдоним']

Добавляет учетное имя к текущей базе данных, позволяет использовать псевдонимы учетных записей. Если @name_in_db не задан, псевдонимом учетной записи является идентификатор пользователя.
USE subd
sp_grantdbaccess

@loginame = 'student'

sp_revokedbaccess

[@name_in_db =] 'псевдоним'

Используется для удаления учетной записи из базы данных SQL Server. Идентификатор SQL Server нельзя удалить до тех пор, пока данная процедура не будет выполнена для всех баз данных, доступ к которым разрешен для пользователя. Учетную запись Windows можно снять без предварительного снятия привилегий.

USE subd
sp_revokedbaccess

@name_in_db = 'student'

Привилегии и роли

Безопасность базы данных можно разделить на две части:

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

§  проверка правильности комбинации имени и пароля пользователя;

§  контроль системных операций, которые пользователю разрешено выполнять.

§  Безопасность данных включает механизмы, которые управляют доступом к объектам базы данных. Безопасность данных определяет:

§  к каким объектам базы данных имеет доступ пользователь;

§  какие действия пользователь может выполнять с объектами базы данных (извлечение, вставка, обновление, удаление).

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

Привилегии – права на выполнение определенных команд SQL. Привилегии делятся на системные (командные) и объектные привилегии.

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

§  CREATE TABLE – разрешает создание таблиц в собственной схеме

§  CREATE VIEW – создание представлений в собственной схеме

§  CREATE PROCEDURE – создание хранимых процедур, функций, пакетов в собственной схеме

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

§  ALTER – разрешает изменение определения заданных таблиц, представлений

§  DELETE – разрешает удаление строк из заданных таблиц, представлений

§  EXECUTE – разрешает выполнение заданных хранимых процедур, функций, пакетов

§  INSERT – разрешает вставка строк в заданные таблицы, представления

§  SELECT – разрешает чтение данных из заданных таблиц, представлений

§  UPDATE – разрешает изменение данных в заданных таблицах, представлениях

Пользователь может получить привилегию двумя различными способами:

§  Привилегия пользователю может быть предоставлена явно. Например, привилегия вставлять строки в таблицу EMP может быть явно предоставлена пользователю scott

§  Привилегия может быть предоставлена роли, а роль, затем, может быть предоставлена одному или более пользователей. Например, привилегия вставлять строки в таблицу EMP может быть предоставлена роли clerk, которая, в свою очередь, может быть предоставлена пользователям scott и brian

Предоставление привилегий

Для предоставления привилегий используется SQL команда языка управления данными GRANT.

Предоставление системных привилегий:

GRANT {привилегия[, привилегия …] | ALL}
TO {пользователь[, пользователь …] | роль | PUBLIC}
[WITH ADMIN OPTION]