39. Установка привилегий доступа

Привилегия доступа - возможность определенного пользователя выполнять определенный вид действий над определенными таблицами базы данных. Привилегии доступа могут устанавливаться как системным администратором (пользователем с именем SYSDBA), так и пользователем, которому системный администратор предоставил такое право.

Установка привилегий производится оператором GRANT. Его формат:

GRANT{

{ALL [PRIVILEGES] I SELECT | DELETE I INSERT

I UPDATE [(столбец [.столбец ...])]}

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

TO {<объект> I <список_пользователей>}

I EXECUTE ON PROCEDURE procname

TO {<объект > < список_пользователей>}

};

<объект > = PROCEDURE ИмяПРоцедуры | TRIGGER ИмяТриггера |

VIEW ИмяПросмотра | [USER] ИмяПользователя |

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

< список пользователей > = [USER] ИмяПользователя[, [USER]

ИмяПользователя...] [WITH GRANT OPTION]

39.1. Привилегии доступа по умолчанию

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

39.2. Виды привилегий

Ниже перечислены виды привилегий и ключевые слова в операторе GRANT, соответствующие этим привилегиям.

Ключевое слово

Вид привилегии доступа

ALL

Выполнение операторов SELECT, DELETE, INSERT, UPDATE. EXECUTE

SELECT

Выполнение оператора SELECT

DELETE

Выполнение оператора DELETE

INSERT

Выполнение оператора INSERT

UPDATE

Выполнение оператора UPDATE

EXECUTE

Выполнение оператора EXECUTE (обращение к хранимой процедуре)

39.3. Минимальный состав параметров при предоставлении привилегий доступа к таблице БД

Для предоставления пользователю привилегии доступа к таблице в операторе GRANT необходимо указать как минимум следующие параметры:

ключевое слово, обозначающее вид привилегии доступа;

имя таблицы;

имя пользователя.

Например, предоставить пользователю PASHA привилегию на выполнение поиска данных в таблице ТО VARY:

GRANT SELECT ON TOVARY TO PASHA

39.4. Предоставление нескольких привилегий

Чтобы в одном операторе GRANT предоставить пользователю не одну, а несколько привилегий, следует привести список этих привилегий: GRANT SELECT, INSERT ON TOVARY TO DIMA

Словом ALL обозначается предоставление пользователю всех привилегий, то есть права считывания, добавления, изменения и удаления: GRANT ALL ON RASHOD TO PASHA

39.5. Предоставление привилегий нескольким пользователям

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

GRANT SELECT, INSERT, UPDATE ON RASHOD TO PASHA, DIMA

39.6. Назначение привилегий всем пользователям

В случае, если определенный вид привилегий по доступу к таблице должен быть назначен всем пользователям, в операторе GRANT указывают ключевое слово PUBLIC вместо списка имен пользователей:

GRANT SELECT, INSERT, UPDATE ON RASHOD TO PUBLIC

39.7. Установка привилегий доступа к отдельным столбцам таблицы

Привилегия на изменения определенных (не всех) столбцов таблицы также может быть указана в операторе GRANT для отдельных пользователей. В этом случае имена столбцов перечисляются в скобках после ключевого слова UPDATE: GRANT UPDATE (DAT_RASH, TOVAR, KOLVO) ON RASHOD TO DIMA

 

39.8. Предоставление пользователю права назначать привилегии другим пользователям

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

GRANT DELETE ON RASHOD TO PASHA WITH GRANT OPTION

пользователь PASHA получит право предоставлять привилегию удаления из таблицы RASHOD другим пользователям.

39.9. Назначение привилегий вызова хранимых процедур

При назначении привилегии вызова хранимой процедуры оператор GRANT имеет следующий формат:

GRANT EXECUTE ON PROCEDURE ИмяПроцедуры ТО <список_пользователей>

Например, следующий оператор GRANT предоставляет право вызова процедуры MAX_VALUE:

GRANT EXECUTE ON PROCEDURE MAX_VALUE TO PASHA

39.10. Назначение процедуре прав доступа к таблице

Если хранимая процедура выполняет какие-либо действия над таблицей SOMETABLE, а пользователь, имеющий право вызывать эту процедуру, не имеет прав доступа к этой таблице, следует указать права доступа к ней для самой процедуры:

GRANT SELECT ON SOMETABLE TO PROCEDURE SOMEPROC

39.11. Ликвидация привилегий

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

REVOKE [GRANT OPTION FOR]{

{ALL [PRIVILEGES] | SELECT | DELETE | INSERT

I UPDATE [(столбец [.столбец ...])]}

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

FROM {<объект> | <список пользователей>}

I EXECUTE ON PROCEDURE ИмяПроцедуры

FROM {<объект> | < список_пользователей >}

};

где все параметры идентичны по содержанию параметрам оператора GRANT, за исключением параметра

GRANT OPTION FOR - удаляет право выдачи привилегий у пользователей из <списка_пользователей>. При этом <объект> не указывается.

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

GRANT ALL ON RASHOD TO DIMA

REVOKE INSERT ON RASHOD FROM DIMA

После выполнения REVOKE пользователь DIMA будет обладать правами изменения (UPDATE), удаления (DELETE) и выборки данных (SELECT) из таблицы RASHOD.

Лишение пользователя права назначать привилегии другим пользователям ведет к утрате данной привилегии всеми пользователями, которым он успел ее назначить. Привилегии, установленные для всех пользователей (PUBLIC), отнимаются также у всех пользователей (PUBLIC).