2016-07-26 2 views
-1

現在の接続はdb1ですが、db2の権限を変更したいとします。 Like:GRANTコマンドでデータベース名を指定する方法は?

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

これはエラーとなり、PostgreSQLはステートメントのデータベース修飾子を認識しません! db1から切断してdb2に再接続することなくこれを行うことができる方法はありますか?

ところで、私はこれらのコマンドをプログラミング言語から始めており、psqlではありません。

[UPDATE]

私はコメントで言われたとおり、(による実装上の課題やセキュリティ上の理由に - 私はわからない)この機能が意図的にブロックされているようです。

いずれにしても、私はそれには正当な理由はなく、私の個人的な意見です。実装が難しい場合は、設計上の欠陥です。また、セキュリティの議論は、すでに認証され許可されているユーザーのプロセスにステップを追加することで簡単に傷つけることができると考えています。

もう一度、私の意見です。

いずれにしても、私はいつもPostgreSQLプロジェクトに取り組んでくれて本当に感謝しています。みんなありがとう。

+3

他のデータベースに権限を付与することはできません。まずそのデータベースに接続する必要があります。 –

+0

@a_horse_with_no_nameそれは不合理ではありません! – Mehran

+0

なぜそれはばかばかしいのでしょうか?これがPostgresの仕組みです。 –

答えて

1

まず、これがインテントかインプリメンテーション不足かどうかはわかりませんが、これはPostgreSQLの長年の動作です。データベース間の参照はありません。現在、システムカタログを適切に動作させるような作業を行うことが困難な理由は、現在存在しない可能性があります。基本的にデータベースはデータベースBの構造を認識していません。

第2に、データベース間の情報共有もPostgreSQLでは少し矛盾しています。 pg_locks(いくつかの奇妙な理由で)すべてのデータベースにすべてのデータが表示されます。だから私はこれがおそらく人々が座ってこれに関する方針を思いつくのではなく、むしろ有機的な発展であると考えています。同様に、あなたが気付いているように、役割とユーザーはクラスタ全体です。だから私はこれが少し矛盾しているように見える理由を知ることができます。

PostgreSQLでこれを行う正しい方法は、アクセス権を管理するDBに接続することです。現在のところ、PostgreSQLが適切なカタログエントリにアクセスして変更することはできません。そのように壊れていると私には起こりそうにないようです。

関連する問題