postgres 不允许更改角色超级用户,我的默认用户不是超级用户
postgres will not allow alter role superuser and my default user isnt superuser
我无法使用 elixir 连接到 postgres:
** (Mix) The database for PhoenixChat.Repo couldn't be created: FATAL 28P01 (invalid_password): password authentication failed for user "postgres"
00:08:59.053 [error] GenServer #PID<0.3214.0> terminating
** (Postgrex.Error) FATAL 28P01 (invalid_password): password authentication failed for user "postgres"
(db_connection) lib/db_connection/connection.ex:148: DBConnection.Connection.connect/2
(connection) lib/connection.ex:622: Connection.enter_connect/5
(stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3
Last message: nil
State: Postgrex.Protocol
我无法理解数据库如何允许在没有超级用户的情况下创建用户。从我的普通用户那里,它不允许授予超级用户角色:
$ psql -U thisone --password
Password for user thisone:
psql: FATAL: Peer authentication failed for user "thisone"
$ psql -U fakeuser
psql: FATAL: Peer authentication failed for user "fakeuser"
cchilders=> alter user postgres superuser;
ERROR: must be superuser to alter superusers
cchilders=> select rolname from pg_roles;
rolname
-----------
postgres
cchilders
fakeuser
thisone
(4 rows)
$ psql -U postgres --password
Password for user postgres:
psql: FATAL: Peer authentication failed for user "postgres"
如果没有超级用户,如何在 postgres 中给用户超级用户?
psql: FATAL: Peer authentication failed for user "thisone"
和其他用户的相同错误意味着,您尝试在套接字上连接不同的 os 用户(例如 os 用户是 cchilders
然后您尝试psql -U postgres
),而 peer
means you have to be logged in same OS user。例如,要在 psql -U thisone
中取得成功,您应该在 sudo su - thisone
之前取得成功。如果您没有这样的 OS 用户,则无法使用 peer
身份验证进行连接。因此,要么将 hba_file peer
更改为无密码的 trust
,要么将密码验证的 md5
更改为 postgres not是同一个 os 用户...
为你 sudo -u postgres psql
工作,因为你有 os 用户 postgres(例如 osx 不是这种情况)..
最后,您列出用户,而不是检查他们是否是超级用户。您应该 \du
metacommand with psql, or add
rolsuper` column,所以它将是:
select rolname from pg_roles where rolsuper;
我无法使用 elixir 连接到 postgres:
** (Mix) The database for PhoenixChat.Repo couldn't be created: FATAL 28P01 (invalid_password): password authentication failed for user "postgres"
00:08:59.053 [error] GenServer #PID<0.3214.0> terminating
** (Postgrex.Error) FATAL 28P01 (invalid_password): password authentication failed for user "postgres"
(db_connection) lib/db_connection/connection.ex:148: DBConnection.Connection.connect/2
(connection) lib/connection.ex:622: Connection.enter_connect/5
(stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3
Last message: nil
State: Postgrex.Protocol
我无法理解数据库如何允许在没有超级用户的情况下创建用户。从我的普通用户那里,它不允许授予超级用户角色:
$ psql -U thisone --password
Password for user thisone:
psql: FATAL: Peer authentication failed for user "thisone"
$ psql -U fakeuser
psql: FATAL: Peer authentication failed for user "fakeuser"
cchilders=> alter user postgres superuser;
ERROR: must be superuser to alter superusers
cchilders=> select rolname from pg_roles;
rolname
-----------
postgres
cchilders
fakeuser
thisone
(4 rows)
$ psql -U postgres --password
Password for user postgres:
psql: FATAL: Peer authentication failed for user "postgres"
如果没有超级用户,如何在 postgres 中给用户超级用户?
psql: FATAL: Peer authentication failed for user "thisone"
和其他用户的相同错误意味着,您尝试在套接字上连接不同的 os 用户(例如 os 用户是 cchilders
然后您尝试psql -U postgres
),而 peer
means you have to be logged in same OS user。例如,要在 psql -U thisone
中取得成功,您应该在 sudo su - thisone
之前取得成功。如果您没有这样的 OS 用户,则无法使用 peer
身份验证进行连接。因此,要么将 hba_file peer
更改为无密码的 trust
,要么将密码验证的 md5
更改为 postgres not是同一个 os 用户...
为你 sudo -u postgres psql
工作,因为你有 os 用户 postgres(例如 osx 不是这种情况)..
最后,您列出用户,而不是检查他们是否是超级用户。您应该 \du
metacommand with psql, or add
rolsuper` column,所以它将是:
select rolname from pg_roles where rolsuper;