PostgreSQL에서 백업용 읽기 전용 사용자를 어떻게 만들 수 있습니까?


15

PostgreSQL에서 읽기 전용 백업 사용자를 생성하는 것이 불가능하다는 것이 사실입니까?

IRC 채널에서 소유 권한이없는 백업 전용 사용자를 가질 수 없다는 조언을 받았습니다. 나는 그것이 매우 이상하다는 것을 알기 때문에 뭔가 빠진 것이 아닌지 확인하고 싶습니다.

아래는 내가 시도한 결과이지만 원하는 결과를 얻지 못합니다. pg_dump주어진 테이블에서 할 때 나는 얻는다 Permission denied for relation...:

GRANT SELECT ON ALL TABLES IN SCHEMA public TO backup; 
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO backup; 
GRANT SELECT, USAGE ON ALL SEQUENCES IN SCHEMA public TO backup;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, USAGE ON SEQUENCES TO backup;

어떤 도움이라도 대단히 감사하겠습니다!


답변:


9

아니, 쉬워 (지금은 어쨌든).

  1. 새 사용자에게 연결 권한 부여

    GRANT CONNECT ON DATABASE mydb TO myReadolyUser;
  2. 모든 현재 데이터베이스 오브젝트 에 대한 권한을 부여하십시오 . 이것은 스키마에 따라 다르며 사용자가 사용하기를 원하는 모든 스키마에 대해 하나의 사본을 실행해야합니다.

    GRANT SELECT ON ALL TABLES IN SCHEMA mySchema TO myReadonlyUser;

    에서 워드 프로세서 , ALL TABLES당신이 원하는 것 모든 것을 포함.

    하나 이상의 스키마 내에서 동일한 유형의 모든 개체에 대한 권한을 부여하는 옵션도 있습니다. 이 기능은 현재 테이블, 시퀀스 및 함수에 대해서만 지원됩니다. 그러나 ALL TABLES에는 뷰 및 외부 테이블이 포함되는 것으로 간주됩니다.

  3. 그런 다음 아직 작성되지 않은 오브젝트에 대한 향후 권한 ALTER DEFAULT PRIVLEGES을 부여하십시오 . SELECT

    ALTER DEFAULT PRIVILEGES IN SCHEMA mySchema
    GRANT SELECT ON TABLES TO myReadonlyUser;

을 실행할 때 ALTER DEFAULT PRIVILEGES ... myReadonlyUser덤프에 2 개의 추가 행이 추가됨을 알았습니다 ALTER DEFAULT PRIVILEGES FOR ROLE root IN SCHEMA public REVOKE ALL ON TABLES FROM PUBLIC; ALTER DEFAULT PRIVILEGES FOR ROLE root IN SCHEMA public REVOKE ALL ON TABLES FROM root;. 이 소리는 루트가 새로운 테이블에서 아무것도 할 수 없다는 것을 의미합니다. 이것이 사실입니까?
dthor

또한 테이블 bigint이 읽기 전용 사용자를 사용한다면 아마도 필요할 것입니다GRANT SELECT ON ALL SEQUENCES
dthor

6

간단하고 좋은 방법은 읽기 전용 권한을 가진 수퍼 유저를 만드는 것입니다.

  • 로그인 psql포스트 그레스 또는 다른 수퍼 유저로.
  • 새 수퍼 유저 역할을 작성하고 읽기 전용으로 설정하십시오.

    CREATE USER backadm SUPERUSER  password '<PASS>';
    ALTER USER backadm set default_transaction_read_only = on;
    • <PASS>선택한 비밀번호로 교체하십시오 .
    • backadm선택한 사용자 이름으로 바꿀 수 있습니다 . (I 넣어 backadm위해 Backup Administrator).
    • 비밀번호에 대한 작은 따옴표를 잊지 마십시오.

이제이 역할을 사용하여 백업 할 수 있습니다.


6
Ewww. 백업 할 수퍼 유저? 그는 특별히 읽기 전용을 요청했습니다. 즉, 사용자는 하나 SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE또는 ALTER USER backadm set default_transaction_read_only = off;멀리 데이터베이스에 제한없이 액세스 할 수있는에서.
Evan Carroll

이 사용자는 트랜잭션이 읽기 전용인지에 관계없이 테이블 / 스키마 / 데이터베이스를 삭제할 수 있습니다.
Igor Mukhin

4

@Gyre제공 한 답변 에서 참조 된 블로그 는 "응용 프로그램"읽기 전용 사용자 (예 : 웹 응용 프로그램이 데이터베이스에 연결하기위한 읽기 전용 역할 생성)를 만드는 데에는 작동하지 않으며 심각한 문제가 발생할 수 있습니다. 이 postgresql 목록 응답에 설명 대로 쉽게 우회 할 수있는 보안 취약점 . 참고로 클라이언트가 세션 설정을 재정의하면 다음과 같습니다.

SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE

질문에 게시 된 것과 유사한 자세한 방법 은 postgres 위키링크 된 'postgresql의 권한 관리'프리젠 테이션을 참조하십시오 .


이것은 실제로 답변이 아니며, 내가 의견으로 복사 한 안전하지 않은 다른 답변에 대한 비판입니다. 나는이 질문에 올바르게 대답했습니다.
Evan Carroll

3

Evan Caroll의 솔루션으로 백업 한 후이 오류가 발생했습니다.

오류 : 'table'관계에 대한 권한이 거부되었습니다.

다른 권한이 없습니다.

GRANT SELECT ON ALL SEQUENCES IN SCHEMA mySchema TO myReadonlyUser

이 권한을 추가하면 읽기 전용 사용자로 백업 할 수있었습니다.


2

나는 적절한 연구를 해왔으며 거기에 대한 해결책이있는 것 같습니다. 수행해야 할 작업을 완벽하게 설명하는 이 블로그 게시물 을 보았습니다 . 나는 이것이 전과 같은 대답을 찾는 사람들에게 도움이되기를 바랍니다. 분명히 이런 식으로 백업을 복원하는 것은 다른 질문입니다.


블로그 게시물에 단순히 링크하는 대신 블로그 게시물에 링크 로트가 발생하는 경우 답변에 세부 정보를 추가해야합니다 ( en.wikipedia.org/wiki/Link_rot 참조 )
Max Vernon

블로그 게시물의 기본 아이디어 ALTER USER set default_transaction_read_only = on;는 사용자가 블로그 게시물 을 변경하지 못하게하는 것입니다.
blueyed

Ewww. 백업 할 수퍼 유저? 그는 특별히 읽기 전용을 요청했습니다. 해당 사용자는 하나의 SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE 또는 ALTER USER backadm set default_transaction_read_only = off입니다. 데이터베이스에 제한없이 액세스 할 수 없습니다.
Evan Carroll
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.