无法将Postgres用户添加到现有的只读角色

时间:2018-01-12 07:16:48

标签: postgresql

我试图添加新用户" svcUatOlapEdw"到运行PSQL 9.4的现有RHEL 7服务器。

使用inet身份验证(su-postgres之后)并在PSQL提示符下工作,如下所示:

-bash-4.2$ psql
psql (9.4.6)
Type "help" for help.
postgres=# 

我成功执行的命令是:

CREATE USER svcUatOlapEdw
GRANT readonly to svcUatOlapEdw

但是,在尝试从客户端进行连接时,我得到了:

-bash-4.1$ psql -h myserver -d postgres -U svcUatOlapEdw -W
Password for user svcUatOlapEdw:
psql: FATAL:  role "svcUatOlapEdw" does not exist

我不确定我在这里做错了什么 - 我们将不胜感激。

此外,我也尝试过:

CREATE ROLE svcUatOlapEdw

也没有解决问题。

由于

1 个答案:

答案 0 :(得分:2)

Postgres中的不带引号的标识符为folded to lower case。因此,CREATE USER svcUatOlapEdw会创建名为svcuatolapedw的用户。您通过SQL语句传递的任何标识符也会折叠为小写,这就是GRANT readonly to svcUatOlapEdw工作的原因(它被执行为GRANT readonly to svcuatolapedw)。

但是,psql会按“原样”传递用户名,并尝试使用名为"svcUatOlapEdw"的用户登录。您需要以小写字母传递用户名:

psql -h myserver -d postgres -U svcuatolapedw -W

修改

如果要创建具有大写/小写名称的用户,则必须使用带引号的标识符:

CREATE USER "svcUatOlapEdw";
GRANT readonly to "svcUatOlapEdw";

enter image description here