빠른 버전 :
데이터베이스 소유자가이 데이터베이스의 테이블에 액세스 할 수 있도록하려면 어떤 명령을 실행해야하며 해당 소유자의 계정에서 수행 할 수 있습니까?
더 긴 버전 :
RDS에서 데이터베이스를 작성 중입니다. 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;
Craig Ringer가이 문제를 어떻게 처리해야하는지 제안하기 위해이 스크립트를 업데이트했습니다.
앱이 master_application 자격 증명으로 연결되면 테이블이 만들어 지므로 소유합니다.
내 문제는 사용자에게 테이블에 대한 권한이 없기 때문에 관리 (루트) 로그인을 사용하여 쿼리를 실행할 수 없다는 것입니다.
응용 프로그램 계정에서 다음을 실행 하여이 문제를 해결할 수있었습니다.
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)
integration_root는 수퍼 유저 사용자이며 users는 내 데이터베이스 내의 테이블입니다.
최신 정보
아마존의 누군가로부터 상당히 쓸모없는 답변을 받았습니다.
그들은 master_application 로그인에서 ALTER DEFAULT PRIVILEGES를 호출하도록 요청했습니다. 이것은 아마도 효과가 있지만 내 질문에 대답하지는 않습니다 (rds_superuser 계정에서만이 작업을 수행하는 방법입니다).
나는 이것을 명확히 해달라고 요청했다.