PostgreSQL限制用户的审核表权限

时间:2018-08-15 14:59:04

标签: sql postgresql

我正在创建一个审计跟踪表,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可以访问itemsaudit_tb时,一切正常。问题是power_user也可以修改audit_tb

因此,我创建了some_user,它可以更改items,并且只能select audit_tb。 问题在于此audit_function()无法插入,因为用户some_user仅限于Select

ERROR: permission denied for relation audit_tb

2 个答案:

答案 0 :(得分:0)

您需要获得用户的许可

GRANT ALL PRIVILEGES ON DATABASE mydb TO admin_user;

答案 1 :(得分:0)

使用选项audit_function()创建security definer作为超级用户。如果这样做,该功能将以超级用户(=所有者)的特权而不是触发该功能的用户的特权运行。