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