PostgreSQL에서 읽기 전용 단일 테이블 액세스를위한 최소 권한 부여


10

다음은 새로운 사용자 (로그인)를 생성하고 PostgreSQL에서 지정된 하나의 테이블에 대해 읽기 전용 액세스 권한을 부여하는 데 사용되는 명령 목록입니다.

이러한 명령이 로그인 할 때 충분한 권한 (예 : postgres기본 설치의 로그인)으로 실행된다고 가정합니다 .

CREATE ROLE user_name NOSUPERUSER NOCREATEDB 
NOCREATEROLE NOINHERIT LOGIN PASSWORD 'pwd' VALID UNTIL 'infinity';

이제 database의 select테이블 tab_abc에 권한을 부여하고 싶습니다 .PgAdmin을 통해 현재 db_xyz데이터베이스 db_xyz로 선택됩니다.

grant select on tab_abc to user_name;

문제는 이것으로 충분 합니까 아니면 더 많은 보조금이 있어야 합니까 (database connect, usage아마도)?

이 명령은 저에게 효과적이지만 기본 설치에는 기본 보안 설정이 있습니다. 서버 관리자가 더 강력한 보안을 구성한 경우 어떤 추가 부여를 추가해야합니까?

내가 부여 할 필요가없는 것으로 보인다 connect이나 usage되는 implicite을 부여하면서 - select? 항상 그래요?

답변:


12

문제는 이것으로 충분합니까, 아니면 더 많은 보조금이 있어야합니까 (데이터베이스 연결, 사용 가능성)?

다음과 같은 경우에 기본적으로 보안이 강화 될 수 있습니다.

  • pg_hba.conf파일. 데이터베이스 권한이 고려되기 전에 연결을 필터링합니다. 기본값은 로컬 연결에 대해 비교적 열려 있지만 명시적인 데이터베이스, 사용자 이름 및 네트워크 원본 목록으로 제한 될 수 있습니다.

  • 모든 사람이 소유 한 의사 역할 인 public 에 대한 권한 . 연결 권한이 부여 된 경우에만 사용자가 암시 적으로 연결할 수 있습니다 PUBLIC. 생성 된 사용자는 권한 부여없이 PostgreSQL의 모든 데이터베이스에 액세스 할 수 있습니다를 참조하십시오 . 데이터베이스는 모든 권한을 공개적으로 취소 할 수 있습니다. 사용중인 주요 PostgreSQL 버전에 대한 문서에서 REVOKE 를 참조하십시오 .

  • public스키마가 존재합니다 . 편의상 기본적으로 데이터베이스를 사용하여 작성되지만 필수는 아닙니다. public스키마 에서 공용 권한을 제거하는 대신 public새 사용자에게 암시 적 권한이 없어야하는 경우 DBA가 스키마를 삭제하는 것이 좋습니다.

이러한 기본값이 제거 된 경우 하나의 테이블을 읽으려면 새 사용자에게 권한이 부여되어야합니다.

GRANT CONNECT ON DATABASE dbname TO username;

데이터베이스 레벨에서 :

GRANT USAGE ON SCHEMA schemaname TO username;
GRANT SELECT ON schemaname.tablename TO username;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.