2016-04-28 15 views
0

私のデータベースには、ビジネスとブランドという2つのモデルがあります。各事業には、読書、更新、削除など、複数のブランドへのアクセスが1つ以上あります。PostgreSQLでACLを実装する方法

アクセス制御を実装する最良の方法がわかりません。今のところ、私はいくつかのフィールドを持つ結合テーブルを作成しました:business_idbrand_idcan_readcan_updatecan_delete、何らかのアクションがとられるときはいつでも、私はこの表をチェックします。

しかし、私は、このようなアプローチがデータベースレベルではなく、アプリケーションレベルにあることに気付きました。

私の質問は、データベースレベルでそのようなアクセス制御を実装する方法はありますか?

私は「PostgreSQLのACL」をGoogleで探そうとしましたが、その結果はすべて、データベース自体のアカウントに関するものであり、格納されるデータに関するものではありません。

助けてください!

+1

どのバージョンのPG? –

答えて

-1

開始点は、Postgresのgrantコマンドである必要があります。
私はたいていの場合、各ビジネスが関連するすべてのデータを含む特定のビューにアクセスすることを許可または許可するようアドバイスします。
テーブルは管理者のみがアクセスできるようにする必要があります。

+0

多分私は自分の質問を明確に表現していないかもしれません。 GRANTはデータベースユーザにPRIVILEGESを与えることですが、データベースのレコードへのアクセスを制御したいのです。結局のところ、データベースに格納されている10000件のビジネスレコードに対して10000人のデータベースユーザーを作成することはできません。 – HanXu

+0

1つのデータベースと1つのテーブルセットがあります。 各ビジネスには1つの特定のDBユーザーがおり、それぞれのビジネスに対してフィルタリングされたビューである独自のビューセットにアクセスできます。 – weismat

+0

OPはDBオブジェクトへのアクセスを制限する方法ではなく、ビジネスロジックのアクセス許可をSQLでモデル化する方法を尋ねています。 –

-1

行レベルのセキュリティポリシーを検討することをお勧めします。これはPostgreSQL v9.5の新機能です。

詳細については、Row Security Policiesを参照してください。

+0

これはデータベースユーザー向けです。 OPはSQLレベルでビジネスロジックをモデル化する方法を尋ねています。 –

+0

はい、行レベルのセキュリティポリシーはSQLレベルで定義されています。 OPには、各ユーザーのルール(can_read、can_update、can_delete)を定義したテーブルがすでにあります。アプリケーションロジック内でルールを強制するのではなく、データベース内でルールを実行する方法が必要です。 これは、行レベルのセキュリティポリシーが、データベース内でルールを実行するためのものです。 – korry

関連する問題