

PostgreSQL 12です。  
PostgreSQLサーバーは、AWS RDSを利用しております。

凡例）  
ユーザー：SQL実行者  
グループ：アクセスできる範囲を意味しています。  
グループ配下には、DB、スキーマ、テーブルが存在するとします。

グループA：ユーザー１、ユーザー２  
グループB：ユーザー３、ユーザー４

グループA配下のテーブルは、ユーザー１、ユーザー２がSQLコマンドを実行でき、ユーザー３、ユーザー４SQLコマンドを実行できない。  
グループB配下のテーブルは、ユーザー３、ユーザー４がSQLコマンドを実行でき、ユーザー１、ユーザー２SQLコマンドを実行できない。

この時、PostgreSQLの考え方として、グループを

  * 複数のDBで分ける
  * １つのDBで複数のスキーマで分ける

の２つの方法があるかと思います。

各ユーザーは、グループごとの DB or スキーマ
の設定をGRANTで行うことで制御できるかと思いますが、DBで分ける場合とスキーマで分ける場合について、メリットデメリットをご教授いただきたいです。

一つのDATABASEに対して、複数のスキーマ（この場合グループA、グループBの計2つ）を作成し、アクセス制御を行う方法と、複数のDATABASE（この場合グループA、グループBの計2つ）を作成し、アクセス制御を行う方法は、どちらを選択するべきでしょうかといったご質問となります。

基本的には、「１つのDBで複数のスキーマで分ける」の方が運用が楽という意味で、メリットがあるかと思いますが、それくらいしか思いつかないため、何かそれ以外の根拠となる明確なご回答をいただきたいです。


CC BY-SA 4.0
2021-07-03T12:46:49.493
77939
2021-07-04T08:00:12.443
2021-07-03T16:52:55.380
3060
37263
question
postgresql
PostgreSQL によるアクセス制御を「DBで分ける」と「スキーマで分ける」違いは？


DBによる分割とスキーマによる分割について普通は「どちらでも要件は満たせる」ということはあまりないので、例えば

  * 「ユーザー5」は両方の「グループ」をJOINしたSQLを実行しないといけない
  * 両方の「グループ」を整合性のあるかたちで統合したバックアップをとらないといけない
  * 逆に、「グループ」ごとに独立してバックアップ・レストアできないといけない
  * 他のRDBMSとの互換性を考慮しないといけない

など、考慮しないといけない要件が検討されていないだけでないでしょうか。

なお、権限はテーブルに対しても設定できるので、その点も含めて見直されるとよいと思います。

* * *

> バックアップなどの観点は全てAWS RDSの機能により、考慮不要となります。

グループAのデータをリストアしないといけないときに、グループBも使えなくなってよいのか、だめなのか、データが一緒に巻き戻ってよいのかいけないのか巻き戻らないといけないのか、RDSだからといってあなたの都合のよいように動くわけではありません。

この点だけ見ても考慮不足だと思います。

また、本当に質問に書いてある条件以外を考慮しなくてよいという前提なら、メリットデメリットを論じる意味もないのでどちらでもよい、という話にしかなりません。


CC BY-SA 4.0
2021-07-04T04:32:31.457
77950
2021-07-04T08:00:12.443
2021-07-04T08:00:12.443
5793
5793
77939
answer