Таблицы каталога безопасности
Данные каталога безопасности представляют собой таблицы:
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[]); | Разрешения на выполнение любых известных действий над защищенной ролью |