5

問題は基本的にこれに帰着します:postgresで新しいデータベースを安全に作成するにはどうすればよいですか?つまり、デフォルトでは誰も新しいデータベースに対する特権を持たず、すべてのアクセスを明示的に定義する必要があります。

インターネットでいろいろな資料を試しましたが、明確な答えが得られません。postgres9.1を使用するfedora17linuxでこれを試しましたが、最終的にはpostgres8.4を使用するredhat6.3で使用します。

プロセス:

  1. postgresをインストールし、initdbを実行し、サーバーを起動します
  2. postgresスーパーユーザーとローカルに接続する
  3. オプションcreatedbおよびcreateroleを使用して新しいユーザーu1を作成します
  4. 切断してu1として再接続します
  5. データベースdb1を作成します
  6. ユーザーu2を作成します
  7. 切断してu2として再接続します
  8. db1にテーブルt1を作成します

私はその最後のステップが成功することを期待していません。u2にはdb1に対する特権が与えられておらず、データベースまたはスキーマを照会するときに特権が表示されません。私の理解では、パブリックスキーマと組み込みのパブリックロールのデフォルトの権限により、u2はdb1にテーブルを作成できます。それらを取り消す場合は、データベースでのみ行うことができますが、スキーマでは行うことができません。これは、postgresが所有しているためです。したがって、最終的には、新しいデータベースを作成するたびに、スーパーユーザーでこれらの特権を取り消す必要があります。データベースの所有者に委任することはできません。また、新しいデータベースごとに委任することを忘れてはなりません。

デフォルトでは、すべてのユーザーが新しいデータベースのパブリックスキーマにスパムを送信できます。他のユーザーはデフォルトでパブリックスキーマで作業し、テーブルがすでに存在することを確認せず、見知らぬ人が所有する既存のテーブルを使用する可能性があるため、これは危険です。

これらの安全でないデフォルトを修正するにはどうすればよいですか?

4

2 に答える 2

5

データベースでパブリックスキーマの「作成」権限を取り消すことができます。template1これは、デフォルトで新しく作成されたデータベースに伝播されます。データベースはコピーによって作成されますtemplate1(またはテンプレートとしてマークされた他のデータベースtemplate1ですが、デフォルトです)。

実際にはpublic、この状況ではスキーマを完全に削除し、作成する場合は(必要に応じて)データベース所有者にジョブを委任することもできます。

于 2012-10-26T13:05:57.600 に答える
5

安全なデータベースが必要な場合に、この記事を活用しました。

PostgreSQLデータベースのトータルセキュリティ

于 2012-10-26T13:46:40.857 に答える