2016-07-26 2 views
-1

현재 연결이 db1 인 반면, 에 대한 권한을 변경하고 싶습니다. Like :GRANT 명령에서 데이터베이스 이름을 지정하는 방법은 무엇입니까?

GRANT ALL PRIVILEGES ON SCHEMA "db2"."public" TO "user"; 

그러나 오류가 발생하고 PostgreSQL이 데이터베이스 규정자를 인식하지 못합니다! db1을 연결 해제하고 db2에 다시 연결하지 않고이 작업을 수행 할 수있는 방법이 있습니까?

나는 프로그래밍 언어로이 명령을 시작하지만 psql이 아닙니다. 나는이 의견에 말을 들었다으로

[업데이트]

는,이 기능을 의도적으로 차단 된 것으로 보인다 (때문에 구현 문제 나 보안상의 이유로 - 나는 확실하지 않다).

어쨌든, 나는 그것에 대한 좋은 이유가 보이지 않으며 그것이 내 개인 의견입니다. 구현하기가 어렵다면 설계상의 결함입니다. 그리고 보안 인수가 이미 인증되고 권한이 부여 된 사용자에 대한 프로세스에 단계를 추가하면 더 쉽게 보안에 영향을 미칠 수 있다고 생각합니다.

또 다시 내 의견.

언제나 PostgreSQL 프로젝트에 항상 감사하고 있습니다. 고마워.

+3

다른 데이터베이스에 대한 권한을 부여 할 수 없습니다. 먼저 해당 데이터베이스에 연결해야합니다. –

+0

@a_horse_with_no_name 그건 터무니 없는가? – Mehran

+0

왜 그게 터무니 없는가? 그것은 Postgres가 작동하는 방법입니다. –

답변

1

우선 이것이 의도적인지 또는 구현 부족인지는 모르겠지만 PostgreSQL에서는 오랫동안 지속되는 동작입니다. 데이터베이스 간 참조는 없습니다. 현재 시스템 카탈로그를 올바르게 작동시키는 것과 같은 일을하는 데 어려움이있는 이유는 여러 가지가 있습니다. 기본적으로, 데이터베이스 A은 데이터베이스 B에있는 구조에 대한 지식이 전혀 없습니다.

둘째, 데이터베이스 간 정보 공유 또한 PostgreSQL에서 약간 일치하지 않습니다. pg_locks (이상한 이유로) 모든 데이터베이스에 걸쳐 모든 것을 보여줍니다. 그래서 저는 이것이 아마도 사람들이 앉아서 이것에 관한 정책을 생각해내는 것보다는 유기적 인 개발이라고 생각하고 있습니다. 마찬가지로, 알고 계시 겠지만 역할과 사용자는 클러스터 전역입니다. 그래서 나는 이것이 왜 조금 모순 된 것처럼 보일지 알 수 있습니다.

PostgreSQL에서 올바른 방법은 사용 권한을 관리 할 DB에 연결하는 것입니다. 현재 PostgreSQL이 적절한 카탈로그 항목에 액세스하여 수정하고 다른 방법으로는 그렇게 깨어서 그런 일이 일어나지 않을 것 같아요.