Быстрая версия:
Какую команду следует выполнить, чтобы позволить владельцу базы данных разрешить ему доступ к таблицам в этой базе данных, и это можно сделать из учетной записи этого владельца?
Более длинная версия:
Я создаю базу данных на RDS. У меня есть пользователь root, который я настроил с помощью Amazon.
Amazon автоматически создает групповую роль «rds_superuser», которая очень привилегирована, но на самом деле не является суперпользователем.
Я создаю базу данных и пользователя для приложения следующим образом:
create database master_integration;
CREATE ROLE master_application LOGIN ENCRYPTED PASSWORD '...' VALID UNTIL 'infinity';
GRANT ALL ON DATABASE master_integration TO GROUP rds_superuser WITH GRANT OPTION;
GRANT ALL ON DATABASE master_integration TO GROUP master_application;
\c master_integration;
ALTER DEFAULT PRIVILEGES GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES TO rds_superuser;
Я обновил этот сценарий, чтобы отразить предложения Крейга Рингера относительно того, как мне следует с этим справляться.
Когда приложение подключается (с учетными данными master_application), оно создает (и, следовательно, владеет) таблицы.
Моя проблема в том, что я не могу использовать свой административный (rootish) вход в систему для выполнения запросов, потому что у этого пользователя нет прав доступа к таблице.
Я мог решить эту проблему раньше, запустив следующее из учетной записи приложения:
GRANT ALL privileges ON ALL TABLES IN SCHEMA public to rds_superuser;
Но это кажется хакерским, чтобы подчиненный пользователь предоставлял привилегии обратно администратору.
Итак ... Есть ли команда, которую я могу выполнить до или после создания таблиц из приложения, которая обеспечит доступ владельца базы данных к таблицам в базе данных?
обновить после повторной попытки изменить привилегии по умолчанию ...
Это все еще не предоставляет доступ к таблицам; Я вижу, что это предлагается в другом месте, и это имеет полный смысл, но это не работает для меня. Из оболочки psql:
master_integration=> \ddp
Default access privileges
Owner | Schema | Type | Access privileges
------------------+--------+-------+-------------------------------------------
integration_root | | table | integration_root=arwdDxt/integration_root+
| | | rds_superuser=arwdDxt/integration_root
(1 row)
master_integration=> \dp users
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
--------+-------+-------+-------------------+--------------------------
public | users | table | |
(1 row)
мой пользователь с правами суперпользователя - мой_интерфейс, а пользователи - это таблица в моей базе данных.
Обновить
Я получил довольно бесполезный ответ от кого-то из Amazon.
Они попросили меня позвонить в ALTER DEFAULT PRIVILEGES из логина master_application. Хотя это, вероятно, сработает, оно не ответит на мой вопрос (как я могу сделать это исключительно из учетной записи rds_superuser).
Я попросил их уточнить это, и они ушли.