2012-06-13 2 views
2

PostgreSQL의 버전 9.1,PostgreSQL의 사용자

내가 기본 사용자로 데이터베이스에 로그인하고 특정 데이터베이스에 대한 권한 "그레스"내 데이터베이스 "공개"내가 가지고있는 데이터베이스의

목록 기본 역할을 포함,

1.database1

2.database2

3.database3

지금은 "database2"에 대한 권한 만 가진 사용자 "newuser"를 만들어야합니다. 다른 데이터베이스에 로그인해서는 안됩니다.

내가 다른 데이터베이스 (database1/database3)에 로그인 할 수 있습니다이 구문

create role newuser with login nosuperuser nocreatedb nocreaterole noinherit password 'newpassword'; 
revoke all privileges on database database1, database3 from newuser; 

여전히 "NEWUSER"을 사용하여 시도하고 다른 스키마의에서 테이블을 선택할 수 있습니다. (공개 스키마의 표는 나와 있지 않습니다.)

제발, 나에게 사용자를 생성하고 권한을 부여하는 올바른 절차를 알려주십시오. 나는 그것이 있어야 생각하지만

내가 만, 그는 다른 데이터베이스 :

답변

0

그럼 난 항상이이 pg_hba.conf 경유 할 방법에 로그인하지 않아야 특정 데이터베이스에 대한 모든 권한을 가지고 할 수있는 사용자가 필요합니다 당신이하려고하는 방식에서도 가능합니다.

모든 권한을 취소하면 나열된 엔터티가 거부 될 수 있습니다. 따라서 아무 연결도 실제로 선택하지 않습니다. 우리가 여기서 잊어 버리고있는 명백한 것이있을 수 있습니다.

어쨌든, 이것은 구성 파일을 사용하여 쉽게 해결할 수 있습니다. newuser을 추가하고 허용 할 데이터베이스 만 나열하십시오. 해당 사용자로부터 다른 데이터베이스로의 연결을 효과적으로 거부합니다. 분명히 이미 가지고있는 권한 셋업 외에도 이것을 사용하십시오.

+0

감사하는 것은, 그렇게하려면이 옵션 만, ..... 모든 새 사용자에 대해 내가 할 – MAHI

+0

를 구성하기 어려울 것입니다 몰라, 나는 그것이 유일한 선택 일 것이라고 기대하지 않을 것이다.오늘 밤 여유 시간이되면 로컬 Postgres 서버에서 테스트 상황을 구축 할 것입니다. pg_hba.conf가 변경된 상태에서 작동하게되면 알려 드리겠습니다. :) – pyrocumulus

+0

그래, 고마워, 나 또한 약간의 옵션을 찾을거야 – MAHI

4

데이터베이스에 privilege to connect을 취소하려고 시도 했습니까? 이것은 데이터베이스에 대한 더 이상의 조작을 허용하지 않아야합니다.

REVOKE CONNECT ON DATABASE your_db FROM user; 

조금 파고 후, 왜 위가 작동하지 않는, 명백한되었다. 어쩌면 nswer by Tom Lane을 사용하면 더 나은 해결책을 얻을 수 있습니다.

+0

그래, 사용하지 않았어, 아직도 내가 연결할 수있어. 데이터베이스 .. – MAHI

+0

@MAHI는 약간의 연구를했지만, 메일 링리스트에서 대답과의 링크를 확인하십시오. – DrColossos

+0

나는 이것이 논리적 인 설명 인 @DrColossos라고 생각한다. 어쨌든 한번 시도해 볼 가치가 있습니다. – pyrocumulus

3

실행하면 데이터베이스에있는 사용자의 권한을 제거 할 수 있습니다.

REVOKE ALL PRIVILEGES ON DATABASE "database_name" from username;

+0

매우 편리한 명령이었습니다. – bonitzenator

1

기본적으로 모든 public scemas 일반 (비 수퍼 유저) 사용자가 사용할 수 있습니다. 수퍼 유저로이 로그인을 방지하고 명령을 실행하려면 답장을 보내

REVOKE ALL ON DATABASE somedatabase FROM PUBLIC;