Обзор определенными политиками безопасности на уровне строк в PostgreSQL 9.5
Я построил совершенно новый PostgreSQL-9.5 (alpha), и я очень рад новой функции безопасность на уровне строк. Это обещает сделать управление доступом с несколькими ролями более простым.
в качестве примера я до сих пор использовал модель, где NOLOGIN
роль является владельцем базы данных и всех таблиц, представлений, функций и т. д.; а затем создайте представления, чтобы предоставить соответствующий доступ к определенным ролям. Все хорошо и прекрасно, но виды множатся. Этот новый CREATE POLICY
команда на таблицах с ENABLE ROW LEVEL SECURITY
выглядеть чистой альтернативы для достижения той же цели.
однако до сих пор мне не удалось определить, какие таблицы включены RLS и какие политики определены на них. (Все это после того, как таблицы и политики были определены, очевидно.) Существует ли простой способ определить установленные политики в таблицах с поддержкой RLS?
(есть также долгожданный UPSERT
и многое другое jsonb
функции для тех из вас, кто заинтересован, а также многие улучшения производительности.)
1 ответов
Ок, понял. (Боже, никто еще не использует 9.5???)
Вопрос 1: какие таблицы имеют уровень безопасности строк?
на pg_class
отношение имеет новый столбец relrowsecurity boolean
что так же просто, как выглядит:
SELECT oid, relname FROM pg_class WHERE relrowsecurity = 'true';
Вопрос 2: Какие политики определены в таблицах с поддержкой RLS?
системный каталог имеет новое отношение pg_policy
который хранит всю информацию о политике, в частности название политики,oid
таблицы, команды, роли (oid[]
) к которому применяется политика и USING
и WITH CHECK
положения.
интересно, что последние два хранятся как pg_node_tree
который объединяется с планом выполнения запроса, подлежащего политике, поэтому условия политики не переоцениваются при каждом вызове. Это делает этот подход потенциально более быстрым, чем использование представлений, разработанных в вопросе, потому что меньше предложений анализ и оценка для каждого вызова.