以下は、新しいユーザー(ログイン)を作成し、PostgreSQLの指定された1つのテーブルに読み取り専用アクセスを許可するように機能するように見えるコマンドのリストです。
これらのコマンドは、ログイン時に十分な権限で実行されると想定します(デフォルトのインストールではpostgres
login)。
CREATE ROLE user_name NOSUPERUSER NOCREATEDB
NOCREATEROLE NOINHERIT LOGIN PASSWORD 'pwd' VALID UNTIL 'infinity';
ここで、データベースtab_abc
のテーブルdb_xyz
にselect
を付与したいので、ここに移動します(データベースdb_xyz
は、PgAdminなどで現在のデータベースとして選択されています)。
grant select on tab_abc to user_name;
問題は次のとおりです。これで十分ですか、それとも追加の付与が必要ですか(データベースconnect
、usage
たぶん)?
これらのコマンドは機能するようですが、デフォルトのインストールにはデフォルトのセキュリティ設定があります。サーバー管理者がより強力なセキュリティを構成した場合、追加でどのような許可を追加する必要がありますか?
connect
もusage
も付与する必要がないようです-select
を付与する際にそれは暗黙的ですか?いつもそうですか?
問題は次のとおりです。これで十分ですか、それとも追加の許可(データベース接続、多分使用)が必要ですか?
セキュリティは、主に次の点でデフォルトから強化されます。
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;