programing

데이터베이스의 특정 스키마에 대한 모든 권한을 Postgre의 그룹 역할에 부여SQL

linuxpc 2023. 5. 16. 22:14
반응형

데이터베이스의 특정 스키마에 대한 모든 권한을 Postgre의 그룹 역할에 부여SQL

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

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

"직원"의 구성원은 특정 테이블에 대한 모든 권한을 부여하지 않는 한 스키마 "foo"의 개별 테이블 또는 (두 번째 명령의 경우) 데이터베이스의 테이블을 선택하거나 업데이트할 수 없습니다.

어떻게 하면 사용자와 사용자의 삶을 더 쉽게 만들 수 있을까요?

업데이트: serverfault.com 에서 비슷한 질문의 도움을 받아 해결했습니다.

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

지정된 스키마의 모든 기존 테이블에 대한 권한을 설정하는 간단한 방법을 찾았습니다.설명서는 다음과 같이 설명합니다.

하세요:)ALL TABLES뷰 및 외부 테이블을 포함하는 것으로 간주됨).

굵은 강조 내 것. 열은 다음과 같이 구현됩니다.nextval()열 기본값으로 시퀀스에 사용하고 설명서를 인용합니다.

이 을 통해 시스의경사용여하를 할 수 .currval그리고.nextval기능들.

에 그서만약있다면래가 있다면,serial열, 부여(또는)할 수도 있습니다.ALL PRIVILEGES순서대로

GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;

참고: Postgres 10 이상의 열은 추가 권한이 필요 없는 암시적 시퀀스를 사용합니다. (업그레이드 고려)serial에 표시됩니다.

새로운 물건들은?

또한 사용자 또는 스키마에 관심이 있을 것입니다.

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 창에 기본 권한이 표시됩니다.반드시 조정해야 합니다.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 문서에서 발췌:

스키마의 경우 지정된 스키마에 포함된 개체에 대한 액세스를 허용합니다(개체의 권한 요구 사항도 충족된다고 가정).기본적으로 이를 통해 허가받은 사람은 스키마 내의 개체를 "찾아볼" 수 있습니다.이 권한이 없어도 예를 들어 시스템 테이블을 쿼리하여 개체 이름을 볼 수 있습니다.또한 이 사용 권한을 취소한 후 기존 백엔드에 이전에 이 조회를 수행한 문이 있을 수 있으므로 개체 액세스를 방지하는 완전히 안전한 방법은 아닙니다.

자세한 내용은 SCHEMA에서 GRANT Usage가 정확히 수행하는 작업 질문을 참조하십시오.포스트그레스 전문가 크레이그 링거의 답변에 특히 주목하십시오.

기존 객체 대 미래

이러한 명령은 기존 개체에만 영향을 줍니다.위의 행을 다시 실행할 때까지 나중에 작성하는 테이블 등은 기본 권한을 가집니다.기본값을 변경하여 향후 객체에 영향을 미치려면 Erwin Brandstetter의 다른 답변을 참조하십시오.

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

반응형