ProgramingTip

DB의 특정 스키마에 대한 모든 권한을 PostgreSQL의 그룹 역할에 부여합니다.

bestdevel 2020. 10. 14. 08:07
반응형

DB의 특정 스키마에 대한 모든 권한을 PostgreSQL의 그룹 역할에 부여합니다.


PostgreSQL 9.0을 사용하여 "staff"라는 그룹 역할이 특정 스키마의 테이블 에서이 역할에 모든 (또는 특정) 권한을 부여하고 있습니다. 다음 작업 없음

GRANT ALL ON SCHEMA foo TO staff;
GRANT ALL ON DATABASE mydb TO staff;

"staff"의 구성원은 특정 테이블에 대해 모두 권한을 부여 하지 않는 한 "foo"스키마의 인 코드 테이블 또는 (두 번째 명령의 경우) 데이터베이스의 테이블에 대해 SELECT 또는 UPDATE 할 수 없습니다 .

나와 내 사용자의 삶을 더 쉽게 만들 수있는 방법은 무엇입니까?

업데이트 : serverfault.com에서 질문을 통해 알아 .

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA foo TO staff;

주어진 스키마의 모든 기존 테이블에 대한 권한을 설정하는 속기를 찾았습니다 . 설명서는 다음을 우선합니다 .

(그러나 외부 테이블ALL TABLES 을 포함 하는 것으로 간주됩니다 ).

대담하게 강조합니다. 열은 열 연속으로 시퀀스에서 구현 및 설명서를 인용합니다 .serialnextval()

시퀀스의 경우이 권한을 통해 currvalnextval함수를 사용할 수 있습니다.

따라서 serial이있는 경우 시퀀스 에 대해 부여 (또는 ) 할 수도 있습니다.USAGEALL PRIVILEGES

GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;

참고 : Postgres 10 이상의 ID 열 은 추가 권한이 필요하지 않은 암시 적 시퀀스를 사용합니다. ( serial업그레이드를 고려하십시오 .)

무엇 에 대한 새로운 객체?

DEFAULT PRIVILEGES사용자 또는 스키마 에도 관심이 있습니다 .

ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT ALL PRIVILEGES ON TABLES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT USAGE          ON SEQUENCES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo REVOKE ...;

이렇게하면 권한이 자동으로 생성되는 개체에 대한 개체에 대한 권한은 설정 개체에 대한 권한이 생성됩니다.

기본 권한은 대상 사용자 ( )가 생성 한 객체에 적용 FOR ROLE my_creating_role됩니다. 해당 절이 널 널 호출은 실행하는 현재 사용자 ALTER DEFAULT PRIVILEGES입니다. 명시 적으로 :

ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo GRANT ...;
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo REVOKE ...;

또한 pgAdmin III 모든 버전에는의 미묘한 버그 가 있으며 현재 역할에 적용되지 않더라도 SQL에 기본 권한 창이 -display 됩니다. FOR ROLESQL 펼쳐보기를 복사 할 때 절을 수동으로 조정해야합니다 .


내 대답은 ServerFault.com의 대답과 대응합니다 .

보수적

"모든 권한"을 더 보수적으로 부여하는 것보다 더 보수적으로 부여하는 것보다 시도해 볼 수 있습니다.

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO some_user_;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO some_user_;

public거기 의 사용은 모든 새 데이터베이스 / 카탈로그에 대해 생성 된 기본 스키마의 이름을 나타냅니다 . 스키마를 생성 한 경우 자신의 이름으로 바꿉니다.

스키마에 대한 액세스

스키마에 액세스하려는 모든 작업에 대해 "사용"권한이 부여됩니다. 사용자가 선택, 삽입, 업데이트 또는 삭제 먼저 사용자에게 스키마에 대한 "사용"권한이 부여됩니다.

Postgres를 처음 사용할 수 없습니다. 기본적으로 모든 데이터베이스에는이라는 첫 번째 스키마가 public있습니다. 그리고 기본적으로 모든 사용자는 특정 스키마에 대한 "사용"권한이 자동으로 부여됩니다. 추가 스키마를 추가 할 때 명시 적으로 사용 권한을 부여해야합니다.

GRANT USAGE ON SCHEMA some_schema_ TO some_user_ ;

Postgres 문서 에서 발췌 :

스키마의 경우 지정된 스키마에 포함 된 개체에 대한 액세스를 허용합니다 (개체의 한 권한 요구 사항도 있고 가정). 기본적으로 피부 여자는 스키마 내에서 개체를 "조회"할 수 있습니다. 이 권한이 없어도 예를 들어 시스템 테이블을 쿼리하여 개체 이름을 볼 수 있습니다. 또한이 권한을 취소 한 후 기존 백엔드에 이전 에이 조회를 수행 한 명령문이 있습니다.

자세한 내용은 질문, GRANT USAGE ON SCHEMA가 수행하는 작업을 참조하십시오 . . 포스트 그레스 전문가 크레이그 벨소리 의 답변특별한주의를 기울이 십시오 .

기존 개체와 미래

기존에 기존 개체에만 영향을 미칩니다. 나중에 생성하는 테이블 등은 위의 행을 다시 말 때까지 기본 권한을 갖습니다. Erwin Brandstetter다른 답변을 참조하여 주소를 변경하여 개체에 영향을 미칩니다.

참고 URL : https://stackoverflow.com/questions/10352695/grant-all-on-a-specific-schema-in-the-db-to-a-group-role-in-postgresql

반응형