如何获得更改运行时参数的权限?

时间:2018-06-09 15:30:38

标签: postgresql postgresql-9.5

在这个精彩的answer中提出了GUC模式,使用运行时参数来检测当前用户内部触发器(作为一个解决方案)。它似乎也适合我。但问题是:当我在postgresql.conf中声明变量时,它在触发器中是可用的,我可以从查询中访问它,但不能更改它:

# SET rkdb.current_user = 'xyzaaa';
ERROR:  syntax error at or near "current_user"
LINE 1: SET rkdb.current_user = 'xyzaaa';

错误消息具有误导性,所以我没有挖掘它一段时间,但现在看来这个用户(数据库所有者)没有权限更改全局配置中设置的参数。

我可以设置任何其他参数:

# SET jumala.kama = 24;
SET

并回读:

# SHOW jumala.kama;
 jumala.kama 
-------------
 24
(1 row)

我无法SHOW全局设置参数:

# SHOW rkdb.current_user;
ERROR:  syntax error at or near "current_user"
LINE 1: SHOW rkdb.current_user;
                  ^

但是我可以使用current_setting()函数:

来实现它
# select current_setting('rkdb.current_user');
 current_setting 
-----------------
 www
(1 row)

所以我的猜测是,我的数据库所有者没有访问此参数的权限。我怎么能:

  1. 设置所需的权限?
  2. 甚至更好

    1. 设置具有数据库所有者权限的运行时参数?

1 个答案:

答案 0 :(得分:1)

current_user是一个SQL标准函数,因此您对该名称的使用会混淆解析器。

使用不同的名称或用双引号括起来,如下所示:

rkdb."current_user"