web-dev-qa-db-ja.com

PostgreSQLでの読み取り専用の単一テーブルアクセスに対する最小限の権限

以下は、新しいユーザー(ログイン)を作成し、PostgreSQLの指定された1つのテーブルに読み取り専用アクセスを許可するように機能するように見えるコマンドのリストです。

これらのコマンドは、ログイン時に十分な権限で実行されると想定します(デフォルトのインストールではpostgres login)。

CREATE ROLE user_name NOSUPERUSER NOCREATEDB 
NOCREATEROLE NOINHERIT LOGIN PASSWORD 'pwd' VALID UNTIL 'infinity';

ここで、データベースtab_abcのテーブルdb_xyzselectを付与したいので、ここに移動します(データベースdb_xyzは、PgAdminなどで現在のデータベースとして選択されています)。

grant select on tab_abc to user_name;

問題は次のとおりです。これで十分ですか、それとも追加の付与が必要ですか(データベースconnectusageたぶん)?

これらのコマンドは機能するようですが、デフォルトのインストールにはデフォルトのセキュリティ設定があります。サーバー管理者がより強力なセキュリティを構成した場合、追加でどのような許可を追加する必要がありますか?

connectusageも付与する必要がないようです-selectを付与する際にそれは暗黙的ですか?いつもそうですか?

10
WildWezyr

問題は次のとおりです。これで十分ですか、それとも追加の許可(データベース接続、多分使用)が必要ですか?

セキュリティは、主に次の点でデフォルトから強化されます。

  • pg_hba.confファイル。データベース権限が考慮される前に接続をフィルタリングします。デフォルトはローカル接続に対して比較的オープンですが、データベース、ユーザー名、およびネットワークオリジンの明示的なリストに制限される場合があります。

  • publicの権限、誰でも持つ疑似ロール。ユーザーは、接続権限がPUBLICに付与されている場合にのみ、暗黙的に接続できます。 作成されたユーザーは、権限なしでPostgreSQLのすべてのデータベースにアクセスできます を参照してください。データベースは、パブリックから取り消されたすべての特権を持つ場合があります。使用しているPostgreSQLのメジャーバージョンについては、ドキュメントの [〜#〜] revoke [〜#〜] を参照してください。

  • publicスキーマの存在。便宜上、デフォルトでデータベースを使用して作成されますが、必須ではありません。 publicスキーマからパブリックアクセス許可を削除する代わりに、新しいユーザーに暗黙のアクセス許可をまったく与えない場合は、DBAがpublicスキーマを削除することは理にかなっています。

これらのデフォルトが削除されている場合、1つのテーブルを読み取るには、新しいユーザーを許可する必要があります。

GRANT CONNECT ON DATABASE dbname TO username;

データベースレベル:

GRANT USAGE ON SCHEMA schemaname TO username;
GRANT SELECT ON schemaname.tablename TO username;
12
Daniel Vérité