1

管理者用と公開用の 2 つの Web アプリケーションがあります。どちらにもかなりの量の個別のデータがありますが、特定の部分 (アイテムと呼びましょう) は両方で使用されます。より正確には、アイテムは管理アプリケーションで作成および編集され、公開アプリケーションで表示されます。

どちらも PostgreSQL をデータベース バックエンドとして使用しているため、データベース レベルで結合できると考えました。dblink を介して管理データベースにデータを取得するビューをパブリック データベースに作成します。

次の制約を考えると、これは良い解決策ですか?

  • かなりの数のアイテムがあり、
  • パブリック アプリケーションは、データ セットに対して広範な検索を行います。
  • 公開側でデータが少し古くなっても問題ありません。
  • 現在、アプリケーションは同じ物理データベース サーバーを使用していますが、将来的に分割される可能性があります。

そうでない場合、何を提案しますか?

4

2 に答える 2

4

データが別々のデータベースにあるのではなく、すべてを 1 つのデータベースに入れ、スキーマアクセス許可を使用してデータを分離します。

具体的には:

  • 公開サイトと管理サイトは、異なる「ログイン ロール」(ユーザー) を使用して接続する必要があります。
  • 管理サイトのみが使用するテーブルがスキーマに含まれている可能性があり、パブリック ユーザーはそのスキーマを許可してadminいません。USAGE
  • データの他のセクションは名前付きスキーマに入れることができ、その一部は両方のサイトから完全にアクセス可能であり、一部は混在しています。(スキーマをうまく分割すればGRANT ... ON ALL TABLES IN SCHEMAandを使用できます。)ALTER DEFAULT PRIVILEGES
  • あなたが言うように、パブリックが読み取り専用アクセスを持つ必要があるテーブルは、ビューで参照できます。パブリック ユーザーはGRANT、基になるテーブルではなく、これらのビューにアクセスできます。ビューは、管理に役立つ場合、別のスキーマ内のテーブルを参照したり、複数のスキーマ間でテーブルを参照したりすることもできます。
  • または、そのテーブルに対するパブリック ユーザーINSERTUPDATE権限を与えないだけで、テーブル全体への読み取り専用アクセスを許可できます。

public と admin を別個のアプリケーションではなく、同じアプリケーションに対する異なるフロントエンド インターフェイスと考えると便利な場合もあります。たとえば、コピー アンド ペーストするのではなく、それらの間でコードを共有する必要がある場合があります。

于 2013-04-10T12:33:18.747 に答える