2010-07-28 1 views
14

postgres 서버에서 하나의 데이터베이스에만 액세스 할 수있는 postgres 사용자를 만들고 싶습니다.사용자가 다른 데이터베이스와 다른 데이터베이스의 테이블을 볼 수 없게하는 방법은 무엇입니까?

현재 내 흐름은 다음과 같습니다

create database database1; 
create user user1 with password 'pass'; 
grant all privileges on database database1 to user1; 

그러나 사용자 1은 여전히 ​​정보를 볼 수 해당 사용자를 방지 할 수있는 방법이 있나요 등 DBS, 사용자 테이블의 목록을 볼 수 있습니다? 사용자는 해당 db에 쓰고 읽을 수 있어야합니다.

고마워요.

답변

7

각 사용자는 나열된 다른 데이터베이스와 역할을 볼 수 있지만 다른 데이터베이스의 테이블을 볼 수 없어야합니다.

할당 된 데이터베이스를 제외한 모든 데이터베이스에서 CONNECT 권한을 취소하면 사용자는 다른 데이터베이스의 내용에 액세스 할 수 없습니다.

역할 및 데이터베이스 이름은 전역이며 쉽게 차단할 수 없습니다. 시스템 테이블에서 Frank Heikens가 선택적으로 철회 할 것을 제안 할 수는 있지만 위험을 감수해야합니다. 유즈넷 메일 링리스트에 올라있는 PostgreSQL 개발자는 시스템 카탈로그에 대한 액세스를 방해했습니다.

다른 도구 중에서도 Psql은 사용할 수 있고 제대로 작동하지 않는다고 가정합니다.

다른 데이터베이스와 역할의 이름이 인 이유는 무엇입니까?

+3

사용자가 우리 측에서 dbs를 생성하게됩니다. 우리는 사용자가 데이터 프라이버시/보안의 척도로서 서로 다른 데이터베이스, 테이블 이름 등을 볼 수 있기를 원합니다. – Dan

+2

사용자가 자신의 데이터베이스가 아닌 데이터베이스의 테이블을 나열 할 수있는 것은 좋지 않습니다. – harmv

+1

확실하게 원하지 않는 데이터를 제공합니다. 예를 들어 * "cicallc"*라는 데이터베이스는 "Cica Llc"가 고객임을 나타낼 수 있습니다. "cicaalfresco"라는 데이터베이스는 귀하가 무엇을하고 있는지를 나타낼 수 있습니다. 데이터베이스의 수는 시스템에서 몇 명의 사용자 (= 고객)가 있는지 보여 줄 수 있습니다. 등등. PostgreSQL 개발자의 개념상의 실수입니다. 평범한 사용자는 자신이해야 할 일에만 액세스 할 수있는 환경에서 자신을 발견해야합니다. – peterh

1

기본적으로 만드는 모든 개체는 공용 스키마에서 만들어집니다. 또한 작성한 사용자는 공용 스키마에 대해 CREATE 및 USAGE 권한을 갖습니다. CREATE 및 USAGE를이 사용자의 공용 스키마로 취소하거나 기본 액세스 수준을 변경해야합니다. 또한이 사용자가 액세스 할 수있는 데이터베이스를 사용자의 스키마 또는 사용자가 액세스 할 수있는 스키마로 이동해야합니다. Postgres 매뉴얼에서 DDL Schemas을 참조하십시오.

관련 문제