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へのアクセスも許可されていません...