Защита строк в PostgreSQL на уровне отдельных команд и ролей работает следующим образом: postgrespro.ru www.postgresql.org
- По умолчанию таблицы не имеют политик, и если система прав SQL разрешает пользователю доступ к таблице, все строки в ней одинаково доступны для чтения или изменения. postgrespro.ru
- Когда для таблицы включается защита строк (с помощью команды ALTER TABLE … ENABLE ROW LEVEL SECURITY), все обычные запросы к таблице на выборку или модификацию строк должны разрешаться политикой защиты строк. postgrespro.ru Если политика для таблицы не определена, применяется политика запрета по умолчанию, так что никакие строки в этой таблице нельзя увидеть или модифицировать. postgrespro.ru
- Политики защиты строк могут применяться к определённым командам и/или ролям. postgrespro.ru Политику можно определить как применяемую к командам ALL (всем) либо SELECT, INSERT, UPDATE и DELETE. postgrespro.ru Кроме того, политику можно связать с несколькими ролями, при этом действуют обычные правила членства и наследования. postgrespro.ru
- Чтобы определить, какие строки будут видимыми или могут изменяться в таблице, для политики задаётся выражение, возвращающее логический результат. postgrespro.ru Это выражение будет вычисляться для каждой строки перед другими условиями или функциями, поступающими из запроса пользователя. postgrespro.ru Строки, для которых это выражение возвращает не true, обрабатываться не будут. postgrespro.ru
- Выражения политик обрабатываются в составе запроса с правами исполняющего его пользователя, но для обращения к данным, недоступным этому пользователю, в этих выражениях могут применяться функции, определяющие контекст безопасности. postgrespro.ru
Суперпользователи и роли с атрибутом BYPASSRLS всегда обращаются к таблице, минуя систему защиты строк. postgrespro.ru На владельца таблицы защита строк тоже не действует, хотя он может включить её для себя принудительно, выполнив команду ALTER TABLE … FORCE ROW LEVEL SECURITY. postgrespro.ru
Неотъемлемое право включать или отключать защиту строк, а также определять политики для таблицы, имеет только её владелец. postgrespro.ru