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


10

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

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

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

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

grant select on tab_abc to user_name;

問題は次のとおりです。これで十分ですか、それとも追加の助成金(データベースconnectなどusage)が必要ですか?

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

私が許可する必要がないと思われconnectたりusageしているという暗示を付与しながら、 - select?いつもそうですか?

回答:


12

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

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

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

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

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

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

GRANT CONNECT ON DATABASE dbname TO username;

データベースレベル:

GRANT USAGE ON SCHEMA schemaname TO username;
GRANT SELECT ON schemaname.tablename TO username;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.