Операторы управления привилегиями
Операторы контроля данных, защиты и управления данными
В контексте баз данных термин «безопасность» означает защиту данных от несанкционированного раскрытия, изменения или уничтожения. SQL позволяет индивидуально защищать как целые таблицы, так и отдельные их поля. Для этого имеются две более или менее независимые возможности:
· механизм представлений, рассмотренный ранее и используемый для скрытия засекреченных данных от пользователей, не обладающих правом доступа;
· подсистема санкционирования доступа, позволяющая предоставить указанным пользователям определенные привилегии на доступ к данным и дать им возможность избирательно и динамически передавать часть выделенных привилегий другим пользователям, отменяя впоследствии эти привилегии, если потребуется.
Каждый пользователь в среде SQL , имеет специальное идентификационное имя или номер. Команда, посланная в базе данных, ассоциируется с определенным пользователем, или иначе, специальным идентификатором доступа. Команда интерпретируется и разрешается (или запрещается) на основе информации, связанной с идентификатором (ID) доступа пользователя, подавшего команду.Обычно при установке СУБД в нее вводится какой-то идентификатор, который должен далее рассматриваться как идентификатор наиболее привилегированного пользователя - системного администратора. Каждый, кто может войти в систему с этим ID (и может выдержать тесты на достоверность), будет считаться системным администратором до выхода из системы. Системный администратор может создавать БД и имеет все привилегии на их использование. Эти привилегии или их часть могут предоставляться другим пользователям (пользователям с другими ID). В свою очередь, пользователи, получившие привилегии от системного администратора, могут передать их (или их часть) другим пользователям, которые могут их передать следующим и т.д.
Определение привилегий производится в следующем синтаксисе:
GRANT <привилегии> ON < объект> TO < субъект >
[{,<субъект >}...] [WITH GRANT OPTION];
<привилегии>::= ALL [PRIVILEGES] | <действие> [{,<действие> }...]
<действие>::= SELECT | INSERT | DELETE | UPDATE [(<список столбцов>)]
| REFERENCES [(<список столбцов>)]
[(<список столбцов>)]::= <имя_столбца> [{,<имя_столбца> }...]
<субъект> ::= PUBLIC | <идентификатор_доступа_пользователя>
<привилегии> - список, состоящий из одной или нескольких привилегий, разделенных запятыми, либо фраза ALL PRIVILEGES (все привилегии); <объект> - имя и, если надо, тип объекта (база данных, таблица, представление, индекс и т.п.); <субъекты> - список, включающий один или более идентификаторов доступа, разделенных запятыми, либо специальное ключевое слово PUBLIC (общедоступный).
Замечание. Привилегией REFERENCES по отношению к указанным столбцам таблицы T1 необходимо обладать, чтобы иметь возможность при определении таблицы T определить ограничение по ссылкам между этой таблицей и существующей к этому моменту таблицей T1.
Замечание. Когда вы предоставляете привилегии для публикации, все пользователи автоматически их получают. Наиболее часто, это применяется для привилегии SELECT в определенных базовых таблицах или представлениях, которые вы хотите сделать доступными для любого пользователя.
Пример 4. 57 GRANT SELECT, INSERT ON Порядки TO Адриан, Диана;
Пример 4. 58 GRANT ALL ON Заказчики TO Стефан;Пример 4. 59 GRANT SELECT ON Orders TO PUBLIC; Пользователь должен иметь возможность передать привилегии (или их часть) другим пользователям. Обычно это делается в системах, где один или более пользователей создают несколько (или все) базовые таблицы в БД, а затем передают ответственность за них тем, кто будет фактически с ними работать. SQL позволяет делать это с помощью предложения WITH GRANT OPTION. Пример 4. 60 Если Диана хотела бы, чтобы Адриан имел право предоставлять привилегию SELECT в таблице Заказчики другим пользователям, она дала бы ему привилегию SELECT с использованием предложения WITH GRANT OPTION: GRANT SELECT ON Заказчики TO Адриан WITH GRANT OPTION; После выполнения этой команды Адриан получил право передавать привилегию SELECT третьим лицамЕсли пользователь USER_1 предоставил какие-либо привилегии другому пользователю USER_2, то он может впоследствии отменить все или некоторые из этих привилегий. Отмена осуществляется с помощью предложения REVOKE (отменить), общий формат которого очень похож на формат предложения GRANT:
REVOKE <привилегии> ON < объект> FROM < субъект > [{,<субъект >}...];
Пример 4. 61 REVOKE INSERT, DELETE ON Заказчики FROM Адриан, Стефан.