2011-07-30 2 views
6

PostgreSQL 9 데이터베이스 (Oracle10g에서 마이그레이션)를 설치했는데 사용자/역할 관리에 의해 혼란스러워졌습니다. CREATE USER 또는 CREATE ROLE과 같은 SQL 명령을 사용하여 새 사용자를 만들거나 Navicat 도구를 사용하여 만든 사용자는 모든 데이터베이스를 볼 수 있습니다. 그는 진짜로 그들을 연결할 수 있습니다! 테이블에서 데이터를 선택할 수는 없지만 테이블 개체와 시퀀스 등을 볼 수 있습니다. 연결 권한 부여를 취소하려했지만 아무런 효과가 없었습니다. 나는 새로운 사용자가 아무런 특권도없고 어떤 것도 볼 수 없다고 예상했다. 나는 그가 왜 할 수 있는지 정말로 모른다.왜 PostgreSQL의 새로운 사용자가 모든 데이터베이스에 연결할 수 있습니까?

+2

CONNECT 특권을 어떻게 취소하려 했습니까? –

+0

pgAdmin을 사용하는 경우 사용자의 로그인 역할과 권한을 볼 수 있습니다. 서버에서 로그인 역할을 확장하고 해당 로그인 역할을 마우스 오른쪽 버튼으로 클릭하고 역할 권한 및 역할 구성원을 선택하십시오. 그런 다음 해당 권한과 구성원 자격을 해당 DB 및 DB 개체와 대조하십시오. DB 또는 객체에 부여 된 역할이 있고 사용자의 로그인에 해당 역할이있는 경우 액세스가 설명됩니다. 사용자에게 "역할 권한"탭을 클릭 한 확인란이 있으면 다른 권한을 설명합니다. – atrain

+0

그래서 pgAdmin을 시작하고 내 데이터베이스에서 역할 탭을 보았습니다 (데이터베이스를 마우스 오른쪽 단추로 클릭 한 다음 권한을 부여한 것). 내 모든 데이터베이스에 "공용"역할이 결합되었습니다. 그래서 나는 그것을 제거합니다. 그리고 지금 그것은 작동합니다! 내가 무서워서 고마워 .-) – veselej

답변

0

사용자 또는 역할에 대한 권한을 정의하려면 GRANT 및/또는 REVOKE을 사용해야합니다. 다음 link 함수를 사용하여 사용자가 테이블, 데이터베이스 등에 대해 특정 권한이 있는지 확인할 수도 있습니다.

+0

예. U PostgreSQL 매뉴얼에서 SQL 명령을 사용했습니다. - 데이터베이스에 dbname 연결을 거부합니다. 그리고 아무 효과가 없습니다 -> Aaron Sheffey의 코멘트 글을보십시오. 하지만 고마워. – veselej

1

pg_hba.conf 파일을 수정해야 할 수도 있습니다. 기본적으로 로컬 설치는 권한 점검을 수행하지 않습니다.

11

http://www.postgresql.org/docs/9.2/static/sql-grant.html#SQL-GRANT-DESCRIPTION-OBJECTS (강조 광산)에서 :

PostgreSQL을 부여 기본 권한 일부 개체 유형에 대한 PUBLIC합니다. 표, 열, 스키마 또는 테이블 공간에는 기본적으로 PUBLIC에 대한 권한이 부여되지 않습니다. 다른 유형의 경우 PUBLIC에 부여 된 기본 권한은 데이터베이스의 경우 CONNECTCREATE TEMP TABLE이며, 함수에 대한 EXECUTE 특권; 및 언어에 대한 USAGE 특권. 개체 소유자는 물론 REVOKE 기본 권한과 명시 적으로 부여 된 권한을 모두 가질 수 있습니다. 보안을 최대화하려면 개체를 만드는 동일한 트랜잭션에서 REVOKE을 실행하고 다른 사용자가 개체를 사용할 수있는 창이 없습니다. 또한 초기 기본값 권한 설정은 ALTER DEFAULT PRIVILEGES 명령을 사용하여 변경할 수 있습니다. 데이터베이스에있는 모든 지정되지 않은 사용자를 위해 (CONNECT 포함) 모든 권한을 제거하기 위해

는 사용도

REVOKE ALL PRIVILEGES ON DATABASE <database> FROM public; 

참조 :

+0

고맙습니다. "보안을 극대화하기 위해 개체를 만드는 동일한 트랜잭션에서 REVOKE를 실행하십시오. 다른 사용자가이 객체를 사용할 수있는 창은 없습니다 "- 좋은 조언처럼 들리지만 (인용문 오류 메시지)"CREATE DATABASE를 트랜잭션 블록 내에서 실행할 수 없기 때문에 데이터베이스에서 작동하지 않습니다. " 따라서 누군가가 새 데이터베이스를 사용할 수있는 창을 닫을 방법이 없습니까? – njlarsson

관련 문제