我正在创建一个审计跟踪表,some_user
可以在其中编辑表,Autid表记录该表。但是some_user
无法编辑审核表
我有下表items
。看起来像这样
| date | id | s_px | c_px | fee |
+------------+-----+----------+----------+-----+
| 2015-01-01 | 001 | 5355.00 | 5355.00 | 2 |
| 2015-01-01 | 002 | 13240.00 | 13240.00 | 3 |
| 2015-01-01 | 003 | 5840.00 | 5840.00 | 1 |
| 2015-01-01 | 004 | 20.55 | 20.59 | 5 |
| 2015-01-01 | 005 | 64.42 | 64.42 | 6 |
我创建了一个audit_tb
来跟踪带有触发器的表items
的任何更改,该触发器调用函数audit_function()
进行插入,更新和删除操作。
audit_function()
将items
表中的所有更改插入到audit_tb
中。
https://wiki.postgresql.org/wiki/Audit_trigger
当我power user
可以访问items
和audit_tb
时,一切正常。问题是power_user
也可以修改audit_tb
。
因此,我创建了some_user
,它可以更改items
,并且只能select
audit_tb
。
问题在于此audit_function()
无法插入,因为用户some_user
仅限于Select
。
ERROR: permission denied for relation audit_tb
答案 0 :(得分:0)
您需要获得用户的许可
GRANT ALL PRIVILEGES ON DATABASE mydb TO admin_user;
答案 1 :(得分:0)
使用选项audit_function()
创建security definer
作为超级用户。如果这样做,该功能将以超级用户(=所有者)的特权而不是触发该功能的用户的特权运行。