3

PostgreSQLで読み取り専用ユーザーを作成したい。

その目的は、ユーザーがカスタムSQLクエリを記述できる、公的にアクセス可能なデータエクスプローラーを用意することです。

これを行ってユーザーを作成します。

CREATE USER MyReadOnlyUser WITH ENCRYPTED PASSWORD 'MY_WEAK_PASSWORD';

GRANT ALL PRIVILEGES ON DATABASE "MY_DB_NAME" to MyReadOnlyUser;

GRANT ALL ON SCHEMA public TO MyReadOnlyUser; 
GRANT SELECT ON ALL TABLES IN SCHEMA public TO MyReadOnlyUser; 

ユーザーにすべてのテーブルへのSELECTアクセスを許可し、次に機密テーブルに対するselectアクセスを取り消すと、ユーザーは入力をサニタイズする必要なしに、そのdbユーザーでカスタムクエリを実行できます。

特に、彼はそうしないかもしれません:

挿入、削除、切り捨て、テーブルの削除、データベースの削除、テーブルの作成、関数/プロシージャの作成、ストアドプロシージャ/関数の参照/実行/作成/削除。

すっごく-今私の質問:
なぜこのユーザーはinformation_schemaにアクセスできるのですか?
ビューへのアクセスは許可されておらず、スキーマinformation_schemaへのアクセスも許可されていません...

4

1 に答える 1

2

このユーザーがinformation_schemaにアクセスできるのはなぜですか

information_schemaではデフォルトでPUBLICにselect権限が付与されていると思います。

次のことができるはずです。

revoke all on all tables in schema information_schema from public;

おそらく、pg_catalogスキーマのビュー/テーブルに対するselect特権も取り消す必要があります。しかし、たとえばpsqlや他のクライアントツールがその情報にアクセスできない場合、これが何を壊すのかわかりません。

于 2012-06-26T08:28:05.400 に答える