2017-11-10 15 views
1

Postgresデータベースを設定して、特定のテーブルがトリガによってのみ更新されるようにすることは可能ですか?私は履歴テーブルを持っています、トリガーによって更新されたので、私はこのテーブルが不正なアクセスから保護されないようにしたいと思います。私は履歴テーブルをトリガからのみ更新したい。postgresqlテーブルがトリガによってのみ更新される

alter table yourschema.yourtable owner to youruser; 

今、あなたが使用して他のすべてのユーザーのためのトリガーを無効にすることができます:あなたは次のクエリでアクセスする必要があるユーザーに、テーブルの所有者を変更することができ、テーブルへの不正アクセスを防止するために

+0

問題は私が演算子に権限を与えて、それらがトリガーで履歴データを変更できるようにすることですが、履歴テーブルで何かを直接変更したくないという問題です。トリガを使用してのみ履歴テーブルと通信する必要があります。 –

答えて

0

履歴表とトリガー付き表は、ログイン権のないユーザーに属します。その後、後者の表の権限をアプリケーション・ユーザーに付与します。

0

クエリ:

alter table yourschema.yourtable disable trigger triggername all; 

ここでallは、すべてのユーザに対してトリガが無効になっていることを示します。これで、所有者だけがトリガを使用してテーブルを更新できます。

+0

一般に、テーブルの所有者を変更するのではなく、制限付き権利を持つ他のユーザーを作成するべきです。 – clemens

+0

問題は私が演算子に特権を与えなければならないということです。トリガーで履歴データを変更できるようにするために、履歴テーブルで何かを直接変更したくないのです。トリガを使用してのみ履歴テーブルと通信する必要があります。 –

0

トリガは、イベントが発生した時点で常に発生します。したがって、更新のために更新トリガが定義されている場合、トリガが有効な場合、更新中にトリガをバイパスすることはできません。

データベースにアクセスする特権の異なるユーザーグループがある場合は、データベースのユーザーについてこれをマップする必要があります。たとえば、ユーザーが表のトリガーを使用禁止にすることを禁止することができます。

関連する問題