복제 연결에 사용되는 역할에는 다음이 있어야 합니다.복제속성(또는 수퍼유저여야 함). 역할이 부족한 경우슈퍼유저그리고BYPASSRLS, 게시자 행 보안 정책을 실행할 수 있습니다. 역할이 모든 테이블 소유자를 신뢰하지 않는 경우 다음을 포함합니다.options=-crow_security=off연결 문자열에서; 테이블 소유자가 행 보안 정책을 추가하면 해당 설정으로 인해 정책이 실행되지 않고 복제가 중단됩니다. 역할에 대한 액세스는 다음에서 구성되어야 합니다.pg_hba.conf그리고 다음이 있어야 합니다로그인속성.
초기 테이블 데이터를 복사하려면 복제 연결에 사용되는 역할에 다음이 있어야 합니다.선택게시된 테이블에 대한 권한(또는 수퍼유저여야 함).
게시물을 생성하려면 사용자는 다음을 가지고 있어야 합니다.만들기데이터베이스에 대한 권한.
출판에 테이블을 추가하려면, 사용자는 테이블에 대한 소유권을 가지고 있어야 합니다. 스키마의 모든 테이블을 게시에 추가하려면 사용자가 슈퍼유저여야 합니다. 모든 테이블 또는 스키마의 모든 테이블을 자동으로 게시하는 게시를 생성하려면 사용자가 슈퍼유저여야 합니다.
현재 출판물에 대한 권한이 없습니다. 연결 가능한 모든 구독은 모든 발행물에 액세스할 수 있습니다. 따라서 행 필터나 열 목록을 사용하거나 전체 테이블을 게시에 추가하지 않는 등 특정 구독자로부터 일부 정보를 숨기려는 경우 동일한 데이터베이스의 다른 게시가 동일한 정보를 노출할 수 있다는 점에 유의하세요. 출판 권한이 다음에 추가될 수 있습니다.PostgreSQL향후에는 더욱 세분화된 액세스 제어가 가능해집니다.
구독을 생성하려면 사용자는 다음의 권한이 있어야 합니다.pg_create_subscription역할 뿐만 아니라만들기데이터베이스에 대한 권한.
구독 적용 프로세스는 세션 수준에서 구독 소유자의 권한으로 실행됩니다. 그러나 특정 테이블에 대해 insert, update, delete, truncate 작업을 수행할 경우에는 테이블 소유자로 역할을 전환하고 테이블 소유자의 권한으로 작업을 수행하게 된다. 이는 구독 소유자가 다음을 수행할 수 있어야 함을 의미합니다.역할 설정복제된 테이블을 소유한 각 역할에.
구독이 구성된 경우run_as_owner = true, 그러면 사용자 전환이 발생하지 않습니다. 대신 모든 작업은 구독 소유자의 권한으로 수행됩니다. 이 경우 구독 소유자에게는 다음 권한만 필요합니다.선택, 삽입, 업데이트및삭제대상 테이블에서, 권한이 필요하지 않습니다.역할 설정테이블 소유자에게. 그러나 이는 복제가 발생하는 테이블을 소유한 모든 사용자가 구독 소유자의 권한으로 임의 코드를 실행할 수 있음을 의미하기도 합니다. 예를 들어, 자신이 소유한 테이블 중 하나에 트리거를 연결하기만 하면 이를 수행할 수 있습니다. 한 역할이 다른 역할의 권한을 자유롭게 취하도록 허용하는 것은 일반적으로 바람직하지 않기 때문에 데이터베이스 내의 사용자 보안이 문제가 되지 않는 한 이 옵션은 피해야 합니다.
게시자에서는 복제 연결 시작 시 권한이 한 번만 확인되며 각 변경 기록을 읽을 때 다시 확인되지 않습니다.
구독자에서는 적용 시 각 거래에 대해 구독 소유자의 권한이 다시 확인됩니다. 동시 트랜잭션에 의해 구독의 소유권이 변경되었을 때 작업자가 트랜잭션을 적용하는 중이라면 현재 트랜잭션의 적용은 이전 소유자의 권한으로 계속됩니다.