Задание 1: Управление функциональностью
Управление функциональностью делится на два аспекта:
- управление параметрами осуществляется путем изменения значений
loading_control.check_allow_listиloading_control.check_hash. - управление списком разрешенных модулей и хешами.
Список разрешенных модулей и их характеристики (включая хеш-сумму) хранятся в специальном конфигурационном файле в директории $PGDATA/pg_integrity.
Поскольку эта функциональность тесно интегрирована с общим механизмом контроля целостности конфигурации и объектов БД, управление списком разрешенных объектов (файлов, каталогов) и генерацией для них хеш-сумм осуществляется административными функциями.
Например, для добавления файлов под контроль (в рамках механизма контроля целостности) используется функция pg_integrity_add_file.
При обновлении конфигурационного файла этот список считается эталонным, и система ожидает, что администратор СУБД при необходимости будет принудительно обновлять контрольные суммы объектов.
По умолчанию запрещается создание процедур (программного кода), хранимых в базах данных, пользователям баз данных (пользователям информационной системы).
Для этого необходимо для каждой созданной БД, каждой схемы, находящихся в ней запретить использование всех доверенных процедурных языков для роли пользователей БД: REVOKE USAGE ON LANGUAGE plpgsql FROM public;. Не доверенные языки может использовать только superuser.
При добавлении нового доверенного языка, администратор должен отозвать права на использование этого языка у роли public, разрешить роли public использование существующих объектов:
GRANT USAGE ON SCHEMA <schema> TO public;
GRANT ALL ON ALL TABLES IN SCHEMA <schema> TO public;
GRANT ALL ON ALL ROUTINES IN SCHEMA <schema> TO public;
GRANT ALL ON ALL SEQUENCES IN SCHEMA <schema> TO public;
Изменить привилегии по умолчанию:
ALTER DEFAULT PRIVILEGES REVOKE ALL ON SCHEMAS FROM public;
ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON TABLES TO public;
ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON SEQUENCES TO public;
ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON ROUTINES TO public;
ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON TYPES TO public;