Перейти к основному содержимому

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

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

  • pr_action - справочник действий над защищаемыми типами объектов, регулируемых механизмом защиты;
  • pr_grant - реестр политик, назначенных пользователям;
  • pr_object - реестр защищаемых объектов;
  • pr_object_attr - реестр хранения признаков объектов под защитой;
  • pr_object_kind - справочник типов защищаемых объектов;
  • pr_policy - реестр политик механизма защиты;
  • pr_policy_attr - реестр хранения признаков политик;
  • pr_rule - реестр разрешений, включенных в политики.

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

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

Схема

РазрешениеКоманда
alterSELECT pm_grant_to_policy('policy_name', 'schema', 'myschema', array['alter']::name[]);
dropSELECT pm_grant_to_policy('policy_name', 'schema', 'myschema', array['drop']::name[]);
ALLSELECT pm_grant_to_policy('policy_name', 'schema', 'myschema', array['alter','drop']::name[]);
или
SELECT pm_grant_to_policy('policy_name', 'schema', 'myschema', array['all']::name[]);

Таблица

РазрешениеКоманда
selectSELECT pm_grant_to_policy('policy_name', 'table', 'mytable', array['select']::name[]);
insertSELECT pm_grant_to_policy('policy_name', 'table', 'mytable', array['insert']::name[]);
updateSELECT pm_grant_to_policy('policy_name', 'table', 'mytable', array['update']::name[]);
deleteSELECT pm_grant_to_policy('policy_name', 'table', 'mytable', array['delete']::name[]);
alterSELECT pm_grant_to_policy('policy_name', 'table', 'mytable', array['alter']::name[]);
dropSELECT pm_grant_to_policy('policy_name', 'table', 'mytable', array['drop']::name[]);
moveSELECT pm_grant_to_policy('policy_name', 'table', 'mytable', array['move']::name[]);
create_triggerSELECT pm_grant_to_policy('policy_name', 'table', 'mytable', array['create_trigger']::name[]);
alter_triggerSELECT pm_grant_to_policy('policy_name', 'table', 'mytable', array['alter_trigger']::name[]);
drop_triggerSELECT pm_grant_to_policy('policy_name', 'table', 'mytable', array['drop_trigger']::name[]);
create_ruleSELECT pm_grant_to_policy('policy_name', 'table', 'mytable', array['create_rule']::name[]);
alter_ruleSELECT pm_grant_to_policy('policy_name', 'table', 'mytable', array['alter_rule']::name[]);
drop_ruleSELECT pm_grant_to_policy('policy_name', 'table', 'mytable', array['drop_rule']::name[]);
ALLSELECT 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[]);

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

РазрешениеКоманда
selectSELECT pm_grant_to_policy('policy_name', 'partitioned', 'mypart', array['select']::name[]);
insertSELECT pm_grant_to_policy('policy_name', 'partitioned', 'mypart', array['insert']::name[]);
updateSELECT pm_grant_to_policy('policy_name', 'partitioned', 'mypart', array['update']::name[]);
deleteSELECT pm_grant_to_policy('policy_name', 'partitioned', 'mypart', array['delete']::name[]);
alterSELECT pm_grant_to_policy('policy_name', 'partitioned', 'mypart', array['alter']::name[]);
dropSELECT pm_grant_to_policy('policy_name', 'partitioned', 'mypart', array['drop']::name[]);
moveSELECT pm_grant_to_policy('policy_name', 'partitioned', 'mypart', array['move']::name[]);
create_triggerSELECT pm_grant_to_policy('policy_name', 'partitioned', 'mypart', array['create_trigger']::name[]);
alter_triggerSELECT pm_grant_to_policy('policy_name', 'partitioned', 'mypart', array['alter_trigger']::name[]);
drop_triggerSELECT pm_grant_to_policy('policy_name', 'partitioned', 'mypart', array['drop_trigger']::name[]);
create_ruleSELECT pm_grant_to_policy('policy_name', 'partitioned', 'mypart', array['create_rule']::name[]);
alter_ruleSELECT pm_grant_to_policy('policy_name', 'partitioned', 'mypart', array['alter_rule']::name[]);
drop_ruleSELECT pm_grant_to_policy('policy_name', 'partitioned', 'mypart', array['drop_rule']::name[]);
ALLSELECT 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[]);

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

РазрешениеКоманда
selectSELECT pm_grant_to_policy('policy_name', 'view', 'myview', array['select']::name[]);
insertSELECT pm_grant_to_policy('policy_name', 'view', 'myview', array['insert']::name[]);
updateSELECT pm_grant_to_policy('policy_name', 'view', 'myview', array['update']::name[]);
deleteSELECT pm_grant_to_policy('policy_name', 'view', 'myview', array['delete']::name[]);
alterSELECT pm_grant_to_policy('policy_name', 'view', 'myview', array['alter']::name[]);
dropSELECT pm_grant_to_policy('policy_name', 'view', 'myview', array['drop']::name[]);
create_triggerSELECT pm_grant_to_policy('policy_name', 'view', 'myview', array['create_trigger']::name[]);
alter_triggerSELECT pm_grant_to_policy('policy_name', 'view', 'myview', array['alter_trigger']::name[]);
drop_triggerSELECT pm_grant_to_policy('policy_name', 'view', 'myview', array['drop_trigger']::name[]);
create_ruleSELECT pm_grant_to_policy('policy_name', 'view', 'myview', array['create_rule']::name[]);
alter_ruleSELECT pm_grant_to_policy('policy_name', 'view', 'myview', array['alter_rule']::name[]);
drop_ruleSELECT pm_grant_to_policy('policy_name', 'view', 'myview', array['drop_rule']::name[]);
ALLSELECT 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[]);

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

РазрешениеКоманда
selectSELECT pm_grant_to_policy('policy_name', 'matview', 'mymatview', array['select']::name[]);
alterSELECT pm_grant_to_policy('policy_name', 'matview', 'mymatview', array['alter']::name[]);
dropSELECT pm_grant_to_policy('policy_name', 'matview', 'mymatview', array['drop']::name[]);
moveSELECT pm_grant_to_policy('policy_name', 'matview', 'mymatview', array['move']::name[]);
ALLSELECT 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[]);

Функция

РазрешениеКоманда
alterSELECT pm_grant_to_policy('policy_name', 'function', 'myfunction', array['alter']::name[]);
dropSELECT pm_grant_to_policy('policy_name', 'function', 'myfunction', array['drop']::name[]);
callSELECT pm_grant_to_policy('policy_name', 'function', 'myfunction', array['call']::name[]);
ALLSELECT 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[]);

Роль

РазрешениеКомандаОписание
alterSELECT 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_renameSELECT pm_grant_to_policy('policy_name', 'role', 'user_name', array['alter_rename']::name[]);Разрешения на выполнение команд вида: ALTER ROLE ... RENAME TO ..
alter_passwordSELECT pm_grant_to_policy('policy_name', 'role', 'user_name', array['alter_password']::name[]);Разрешения на выполнение команд вида:
ALTER ROLE ... WITH PASSWORD ...
alter_loginSELECT pm_grant_to_policy('policy_name', 'role', 'user_name', array['alter_login']::name[]);Разрешения на выполнение команд вида:
ALTER ROLE ...
WITH LOGIN ...
ALTER ROLE ...
WITH NOLOGIN ...
alter_safeSELECT pm_grant_to_policy('policy_name', 'role', 'user_name', array['alter_safe']::name[]);Разрешения на выполнение всех других (кроме alter_login, alter_password, alter_rename) видов команд ALTER
dropSELECT pm_grant_to_policy('policy_name', 'role', 'user_name', array['drop']::name[]);Разрешения на удаление защищенной роли
set_roleSELECT pm_grant_to_policy('policy_name', 'role', 'user_name', array['set_role']::name[]);Разрешения на изменение идентификатора текущего пользователя в активном сеансе для защищенной роли
grant_toSELECT pm_grant_to_policy('policy_name', 'role', 'user_name', array['grant_to']::name[]);Разрешения на предоставление прав доступа, выполнение команд вида: GRANT ... TO user_name
revoke_fromSELECT pm_grant_to_policy('policy_name', 'role', 'user_name', array['revoke_from']::name[]);Разрешения на отзыв прав доступа, выполнение команд вида: REVOKE ... FROM user_name
be_grantedSELECT pm_grant_to_policy('policy_name', 'role', 'user_name', array['be_granted']::name[]);Разрешения на выполнение команд включения в защищенную роль, как групповую: GRANT user_name TO ..
be_revokedSELECT pm_grant_to_policy('policy_name', 'role', 'user_name', array['be_revoked']::name[]);Разрешения на выполнение команд исключения из защищенной роли, как групповой: REVOKE user_name FROM
ALLSELECT 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[]);
Разрешения на выполнение любых известных действий над защищенной ролью