Обзор определенными политиками безопасности на уровне строк в 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 который объединяется с планом выполнения запроса, подлежащего политике, поэтому условия политики не переоцениваются при каждом вызове. Это делает этот подход потенциально более быстрым, чем использование представлений, разработанных в вопросе, потому что меньше предложений анализ и оценка для каждого вызова.