Таблицы каталога безопасности#

Данные каталога безопасности представляют собой таблицы:

  • pr_action - справочник действий над защищаемыми типами объектов, регулируемых механизмом защиты;

  • pr_grant - реестр политик, назначенных пользователям;

  • pr_object - реестр защищаемых объектов;

  • pr_object_attr - реестр хранения признаков объектов под защитой;

  • pr_object_kind - справочник типов защищаемых объектов;

  • pr_policy - реестр политик механизма защиты;

  • pr_policy_attr - реестр хранения признаков политик;

  • pr_rule - реестр разрешений, включенных в политики.

В приведенных выше таблицах хранится информация для ограничения доступа.

Типы разрешений для объектов БД, находящихся под защитой#

Схема#

Разрешение

Команда

alter

SELECT pm_grant_to_policy(„policy_name“, „schema“, „myschema“, array[„alter“]::name[]);

drop

SELECT pm_grant_to_policy(„policy_name“, „schema“, „myschema“, array[„drop“]::name[]);

ALL

SELECT pm_grant_to_policy(„policy_name“, „schema“, „myschema“, array[„alter“,“drop“]::name[]);
или
SELECT pm_grant_to_policy(„policy_name“, „schema“, „myschema“, array[„all“]::name[]);

Таблица#

Разрешение

Команда

select

SELECT pm_grant_to_policy(„policy_name“, „table“, „mytable“, array[„select“]::name[]);

insert

SELECT pm_grant_to_policy(„policy_name“, „table“, „mytable“, array[„insert“]::name[]);

update

SELECT pm_grant_to_policy(„policy_name“, „table“, „mytable“, array[„update“]::name[]);

delete

SELECT pm_grant_to_policy(„policy_name“, „table“, „mytable“, array[„delete“]::name[]);

alter

SELECT pm_grant_to_policy(„policy_name“, „table“, „mytable“, array[„alter“]::name[]);

drop

SELECT pm_grant_to_policy(„policy_name“, „table“, „mytable“, array[„drop“]::name[]);

move

SELECT pm_grant_to_policy(„policy_name“, „table“, „mytable“, array[„move“]::name[]);

create_trigger

SELECT pm_grant_to_policy(„policy_name“, „table“, „mytable“, array[„create_trigger“]::name[]);

alter_trigger

SELECT pm_grant_to_policy(„policy_name“, „table“, „mytable“, array[„alter_trigger“]::name[]);

drop_trigger

SELECT pm_grant_to_policy(„policy_name“, „table“, „mytable“, array[„drop_trigger“]::name[]);

create_rule

SELECT pm_grant_to_policy(„policy_name“, „table“, „mytable“, array[„create_rule“]::name[]);

alter_rule

SELECT pm_grant_to_policy(„policy_name“, „table“, „mytable“, array[„alter_rule“]::name[]);

drop_rule

SELECT pm_grant_to_policy(„policy_name“, „table“, „mytable“, array[„drop_rule“]::name[]);

ALL

SELECT pm_grant_to_policy(„policy_name“, „table“, „mytable“, array[„select“,“insert“,“update“,“delete“,“alter“,“drop“, „move“,“create_trigger“,“alter_trigger“,“drop_trigger“,“create_rule“,“alter_rule“,“drop_rule“]::name[]);
или
SELECT pm_grant_to_policy(„policy_name“, „table“, „mytable“, array[„all“]::name[]);

Партиционированная таблица#

Разрешение

Команда

select

SELECT pm_grant_to_policy(„policy_name“, „partitioned“, „mypart“, array[„select“]::name[]);

insert

SELECT pm_grant_to_policy(„policy_name“, „partitioned“, „mypart“, array[„insert“]::name[]);

update

SELECT pm_grant_to_policy(„policy_name“, „partitioned“, „mypart“, array[„update“]::name[]);

delete

SELECT pm_grant_to_policy(„policy_name“, „partitioned“, „mypart“, array[„delete“]::name[]);

alter

SELECT pm_grant_to_policy(„policy_name“, „partitioned“, „mypart“, array[„alter“]::name[]);

drop

SELECT pm_grant_to_policy(„policy_name“, „partitioned“, „mypart“, array[„drop“]::name[]);

move

SELECT pm_grant_to_policy(„policy_name“, „partitioned“, „mypart“, array[„move“]::name[]);

create_trigger

SELECT pm_grant_to_policy(„policy_name“, „partitioned“, „mypart“, array[„create_trigger“]::name[]);

alter_trigger

SELECT pm_grant_to_policy(„policy_name“, „partitioned“, „mypart“, array[„alter_trigger“]::name[]);

drop_trigger

SELECT pm_grant_to_policy(„policy_name“, „partitioned“, „mypart“, array[„drop_trigger“]::name[]);

create_rule

SELECT pm_grant_to_policy(„policy_name“, „partitioned“, „mypart“, array[„create_rule“]::name[]);

alter_rule

SELECT pm_grant_to_policy(„policy_name“, „partitioned“, „mypart“, array[„alter_rule“]::name[]);

drop_rule

SELECT pm_grant_to_policy(„policy_name“, „partitioned“, „mypart“, array[„drop_rule“]::name[]);

ALL

SELECT pm_grant_to_policy(„policy_name“, „partitioned“, „mypart“, array[„select“,“insert“,“update“,“delete“,“alter“,“drop“,“move“,“create_trigger“,“alter_trigger“,“drop_trigger“,“create_rule“,“alter_rule“,“drop_rule“]::name[]);
или
SELECT pm_grant_to_policy(„policy_name“, „partitioned“, „mypart“, array[„all“]::name[]);

Представление#

Разрешение

Команда

select

SELECT pm_grant_to_policy(„policy_name“, „view“, „myview“, array[„select“]::name[]);

insert

SELECT pm_grant_to_policy(„policy_name“, „view“, „myview“, array[„insert“]::name[]);

update

SELECT pm_grant_to_policy(„policy_name“, „view“, „myview“, array[„update“]::name[]);

delete

SELECT pm_grant_to_policy(„policy_name“, „view“, „myview“, array[„delete“]::name[]);

alter

SELECT pm_grant_to_policy(„policy_name“, „view“, „myview“, array[„alter“]::name[]);

drop

SELECT pm_grant_to_policy(„policy_name“, „view“, „myview“, array[„drop“]::name[]);

create_trigger

SELECT pm_grant_to_policy(„policy_name“, „view“, „myview“, array[„create_trigger“]::name[]);

alter_trigger

SELECT pm_grant_to_policy(„policy_name“, „view“, „myview“, array[„alter_trigger“]::name[]);

drop_trigger

SELECT pm_grant_to_policy(„policy_name“, „view“, „myview“, array[„drop_trigger“]::name[]);

create_rule

SELECT pm_grant_to_policy(„policy_name“, „view“, „myview“, array[„create_rule“]::name[]);

alter_rule

SELECT pm_grant_to_policy(„policy_name“, „view“, „myview“, array[„alter_rule“]::name[]);

drop_rule

SELECT pm_grant_to_policy(„policy_name“, „view“, „myview“, array[„drop_rule“]::name[]);

ALL

SELECT pm_grant_to_policy(„policy_name“, „view“, „myview“, array[„select“,“insert“,“update“,“delete“,“alter“,“drop“,“create_trigger“,“alter_trigger“,“drop_trigger“,“create_rule“,“alter_rule“,“drop_rule“]::name[]);
или
SELECT pm_grant_to_policy(„policy_name“, „view“, „myview“, array[„all“]::name[]);

Материализованное представление#

Разрешение

Команда

select

SELECT pm_grant_to_policy(„policy_name“, „matview“, „mymatview“, array[„select“]::name[]);

alter

SELECT pm_grant_to_policy(„policy_name“, „matview“, „mymatview“, array[„alter“]::name[]);

drop

SELECT pm_grant_to_policy(„policy_name“, „matview“, „mymatview“, array[„drop“]::name[]);

move

SELECT pm_grant_to_policy(„policy_name“, „matview“, „mymatview“, array[„move“]::name[]);

ALL

SELECT pm_grant_to_policy(„policy_name“, „matview“, „mymatview“, array[„select“,“alter“,“drop“,“move“]::name[]);
или
SELECT pm_grant_to_policy(„policy_name“, „matview“, „mymatview“, array[„all“]::name[]);

Функция#

Разрешение

Команда

alter

SELECT pm_grant_to_policy(„policy_name“, „function“, „myfunction“, array[„alter“]::name[]);

drop

SELECT pm_grant_to_policy(„policy_name“, „function“, „myfunction“, array[„drop“]::name[]);

call

SELECT pm_grant_to_policy(„policy_name“, „function“, „myfunction“, array[„call“]::name[]);

ALL

SELECT pm_grant_to_policy(„policy_name“, „function“, „myfunction“, array[„alter“,“drop“,“call“]::name[]);
или
SELECT pm_grant_to_policy(„policy_name“, „function“, „myfunction“, array[„all“]::name[]);

Роль#

Разрешение

Команда

Описание

alter

SELECT pm_grant_to_policy(„policy_name“, „role“, „user_name“, array[„alter“]::name[]);

Разрешения на изменение атрибутов защищенной роли.
Ранее выданные действия alter (до в.5.4.0) продолжат функционировать в обычном режиме, пока не будут отозваны. Повторно выдать отозванное действие ALTER невозможно, взамен необходимо выдать одно или несколько действий, добавленных в в.5.4.0:
- alter_login;
- a;ter_password;
- alter_rename
или alter_safe

alter_rename

SELECT pm_grant_to_policy(„policy_name“, „role“, „user_name“, array[„alter_rename“]::name[]);

Разрешения на выполнение команд вида: ALTER ROLE ... RENAME TO ..

alter_password

SELECT pm_grant_to_policy(„policy_name“, „role“, „user_name“, array[„alter_password“]::name[]);

Разрешения на выполнение команд вида:
ALTER ROLE ... WITH PASSWORD ...

alter_login

SELECT pm_grant_to_policy(„policy_name“, „role“, „user_name“, array[„alter_login“]::name[]);

Разрешения на выполнение команд вида:
ALTER ROLE ...
WITH LOGIN ...
ALTER ROLE ...
WITH NOLOGIN ...

alter_safe

SELECT pm_grant_to_policy(„policy_name“, „role“, „user_name“, array[„alter_safe“]::name[]);

Разрешения на выполнение всех других (кроме alter_login, alter_password, alter_rename) видов команд ALTER

drop

SELECT pm_grant_to_policy(„policy_name“, „role“, „user_name“, array[„drop“]::name[]);

Разрешения на удаление защищенной роли

set_role

SELECT pm_grant_to_policy(„policy_name“, „role“, „user_name“, array[„set_role“]::name[]);

Разрешения на изменение идентификатора текущего пользователя в активном сеансе для защищенной роли

grant_to

SELECT pm_grant_to_policy(„policy_name“, „role“, „user_name“, array[„grant_to“]::name[]);

Разрешения на предоставление прав доступа, выполнение команд вида: GRANT ... TO user_name

revoke_from

SELECT pm_grant_to_policy(„policy_name“, „role“, „user_name“, array[„revoke_from“]::name[]);

Разрешения на отзыв прав доступа, выполнение команд вида: REVOKE ... FROM user_name

be_granted

SELECT pm_grant_to_policy(„policy_name“, „role“, „user_name“, array[„be_granted“]::name[]);

Разрешения на выполнение команд включения в защищенную роль, как групповую: GRANT user_name TO ..

be_revoked

SELECT pm_grant_to_policy(„policy_name“, „role“, „user_name“, array[„be_revoked“]::name[]);

Разрешения на выполнение команд исключения из защищенной роли, как групповой: REVOKE user_name FROM

ALL

SELECT pm_grant_to_policy(„policy_name“, „role“, „user_name“, array[„alter“,“alter_rename“,“alter_password“,“alter_login“,“drop“,“set_role“,“grant_to“,“revoke_from“,“be_granted“,“be_revoked“]::name[]);
или
SELECT pm_grant_to_policy(„policy_name“, „role“, „user_name“, array[„all“]::name[]);

Разрешения на выполнение любых известных действий над защищенной ролью