新しいユーザーがPostgreSQLでテーブルを作成できるのはなぜですか?


13

次の2つのチュートリアルに従って、DBを作成しました。

  1. 完全な特権を持つユーザーリンク
  2. 読み取り専用のユーザーリンク

その後、CJ Estelのチュートリアルから、「新しいユーザーに明示的にテーブルを提供しなかったとしても、テーブル作成する機能を継承している可能性がある」というヒントを受け取りました。案の定、読み取り専用ユーザーはテーブルを作成して所有することができます!

CJ Estelは根本原因、つまりテンプレートデータベースを非常によく指摘しています。しかし、テーブルを作成する機能は、postgresql.orgでホストされているものを含む「読み取り専用ユーザーpostgres」をグーグルで取得するほとんどのチュートリアルを損ないます。ユーザーには読み取り専用以上の権限があります!

新しいユーザーにこの機能があるのはなぜですか?この特権を取り消した後、データベースはそのユーザーに対して本当に読み取り専用ですか?

回答:


13

TL; DR:新しいユーザーはpublicスキーマでテーブルを作成できます。人々は、それができなかったのは難しすぎると不平を言ったからです。

デフォルトが気に入らない場合は、おそらく、必要な初期構成で新しいテンプレートデータベースを作成する必要があります。たとえば、次のことができます。

DROP SCHEMA public;

または

REVOKE ALL ON SCHEMA public FROM public;
GRANT USAGE ON SCHEMA public TO public;

テンプレートで。

必要に応じてpublicデータベースに何の権限を持たないようにユーザーに、あなたは、さらにすべき:

REVOKE ALL ON DATABASE mydbname FROM public;
GRANT CONNECT ON DATABASE mydbname TO public;

publicユーザーがスキーマを作成したり、一時テーブルを使用したりできないようにします。


個人的に、これを設計TEMPしている場合、デフォルトでユーザーにデータベースに対する権限を与えますが、CREATE(データベースCREATE内のpublicスキーマ)または(スキーマ内のテーブル)には与えません。所有者のためにそれらを予約します。

しかし、それらはずっと前に行われた選択であり、それらを今変更することはかなり難しいです。


現状では、ユーザーアカウントを作成する必要があり、多くの場合データベースも作成する必要があるため、PostgreSQLを使い始めるのが難しいという不満が定期的にあります。なぜそれらを自動作成し、それを簡単にするために認証モードとして「trust」にデフォルト設定しないのですか?postgresユーザーがデフォルトでパスワードを持たないのはなぜpostgresですか?OSにユーザーが存在する場合、ユーザーを自動作成しないのはなぜですか?等

新しいユーザーにとっては、真の使いやすさの問題がいくつかあります。特に、ほとんどの人はpeerauthが何であるかわかりpsqlません。

またpg_hba.conf、設定ファイルは面倒ですが、ユーザーはSQLレベルで作成されます。この分割はユーザーを混乱させます。

しかし、多くのことは、安全なデフォルトと簡単なデフォルトとの間の妥協であり、プロジェクトがすべての人を幸せにすることはありません。


したがって、実行するrevoke create on database [databasename] from [username];と、DBは[username]に対して本当に読み取り専用になります。正しい?私は良いPostgresのブック:)読ん持っているとき、私は再びこの回答に戻ってくる
Jesvinホセ

2
前のコメントへの返信で、そのいいえ。
ジェスビンホセ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.