Несколько вещей для рассмотрения.
Объясните, что могут делать user_role и readonlyuser_role
Начните с отмены всех привилегий для обеих этих ролей, затем добавьте их только обратно по мере необходимости. Это делает ваши намерения более понятными в отношении того, что должны делать роли, и более безопасными на практике, поскольку более высокие привилегии, чем предполагалось, случайно не проникнут.
REVOKE ALL ON SCHEMA public FROM public; --only authorized roles can do anything here.
REVOKE ALL ON SCHEMA public FROM user_role;
REVOKE ALL ON SCHEMA public FROM readonlyuser_role;
GRANT ...
Владельцем базы данных является локальный суперпользователь
Мы обычно делаем владельца БД дополнительной ролью; тот, кто только входит в систему, чтобы создать или изменить схему, а затем грациозно выходит. Если ваш admin_role
делает больше, чем это, рассмотрите возможность добавления owner_role
.
Требуется ли подключение роли publi c?
Рассмотрите возможность добавления
REVOKE CONNECT ON DATABASE yourdb FROM public;
Это блокирует лазейку, в которой любая роль , созданная на том же сервере БД, может войти в эту базу данных.
Сделать все это в блоке транзакции
Остановить назначение привилегий наполовину. Выполнение этой работы может привести к всевозможным неприятностям, очень похожим на запирание ключей в автомобиле. По возможности делайте назначения привилегий в одной транзакции, чтобы пропущенная точка с запятой не блокировала вас.