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