Аннулирование привилегий и ролей

Оператор SET ROLE

 

Для смены текущего имени роли SQL-сессии можно использовать оператор

 

SET ROLE { value_specification | NONE }

 

Ограничения на выполнения операции SET ROLE почти совпадают с определенными в стандарте ограничениями на выполнение операции SET SESSION AUTHORIZATION. Наиболее важные отличия состоят в том, что эту операцию от имени текущего authID сессии всегда разрешается выполнять для ролей, которые переданы “пользователю” PUBLIC или данному текущему authID, а также в том, что всегда разрешается использование конструкции SET ROLE NONE. Выполнение последней конструкции приводит к тому, что значение текущего имени роли сессии становится неопределенным.

 

Заметим, что при смене текущего имени роли SQL-сессии значение текущего пользовательского идентификатора сессии не меняется, так что вполне вероятно, что после выполнения операции и текущий идентификатор, и текущее имя роли будут иметь значения, отличные от неопределенного значения. И конечно, операция SET ROLE NONE будет выполнена успешно только в том случае, когда значение текущего пользовательского идентификатора не является неопределенным*.

 

Если от имени некоторого authID некоторые привилегия или роли были переданы одному или нескольким другим authID, то впоследствии первый authID (в сессии, где этот authID является текущим) может изъять, или аннулировать переданные привилегии или роли путем применения оператора REVOKE. Как и в случае передачи привилегий и ролей, способы аннулирования привилегий и ролей похожи, но между ними имеются важные отличия. Поэтому мы снова обсудим эти способы в отдельности.