【发布时间】:2012-06-01 05:08:26
【问题描述】:
在 postgres 中,如何将现有用户更改为超级用户?由于各种原因,我不想删除现有用户。
# alter user myuser ...?
【问题讨论】:
标签: sql postgresql
在 postgres 中,如何将现有用户更改为超级用户?由于各种原因,我不想删除现有用户。
# alter user myuser ...?
【问题讨论】:
标签: sql postgresql
ALTER USER myuser WITH SUPERUSER;
您可以在Documentation阅读更多内容
【讨论】:
ALTER USER myuser WITH NOSUPERUSER
SELECT rolname, rolsuper FROM pg_roles; 到 @masterweily
\du 列出所有用户/角色。
扩展上述内容并快速参考:
ALTER USER username WITH SUPERUSER;
ALTER USER username WITH NOSUPERUSER; ALTER USER username CREATEDB;
您还可以使用CREATEROLE 和CREATEUSER 来授予用户权限,而无需将其设为超级用户。
【讨论】:
CREATE ROLE dba WITH SUPERUSER; GRANT dba TO username; 用户 username 只能按需使用 SET ROLE dba; 成为超级用户。在日志文件中仍然记录在username 下的命令。
$su - postgres
$psql
$ \du; 用于查看 db 上的用户
选择您希望成为超级用户的用户,然后:
$ALTER USER "user" with superuser;
【讨论】:
ALTER USER "user" WITH SUPERUSER;
user是保留字,是的。
有时升级到超级用户可能不是一个好的选择。 因此,除了超级用户之外,您还可以使用许多其他选项。 打开终端并输入以下内容:
$ sudo su - postgres
[sudo] password for user: (type your password here)
$ psql
postgres@user:~$ psql
psql (10.5 (Ubuntu 10.5-1.pgdg18.04+1))
Type "help" for help.
postgres=# ALTER USER my_user WITH option
同时列出选项列表
SUPERUSER | NOSUPERUSER | CREATEDB | NOCREATEDB | CREATEROLE | NOCREATEROLE |
CREATEUSER | NOCREATEUSER | INHERIT | NOINHERIT | LOGIN | NOLOGIN | REPLICATION|
NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMIT connlimit |
[ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password' | VALID UNTIL 'timestamp'
所以在命令行中它看起来像
postgres=# ALTER USER my_user WITH LOGIN
或使用加密密码。
postgres=# ALTER USER my_user WITH ENCRYPTED PASSWORD '5d41402abc4b2a76b9719d911017c592';
或在特定时间后撤销权限。
postgres=# ALTER USER my_user WITH VALID UNTIL '2019-12-29 19:09:00';
【讨论】:
运行此命令
alter user myuser with superuser;
如果您想查看用户的权限,请运行以下命令
\du
【讨论】:
您可以创建SUPERUSER 或推广USER,所以适合您的情况
$ sudo -u postgres psql -c "ALTER USER myuser WITH SUPERUSER;"
或回滚
$ sudo -u postgres psql -c "ALTER USER myuser WITH NOSUPERUSER;"
为防止在您设置密码时记录命令,请在其前面插入一个空格,但请检查您的系统是否支持此选项。
$ sudo -u postgres psql -c "CREATE USER my_user WITH PASSWORD 'my_pass';"
$ sudo -u postgres psql -c "CREATE USER my_user WITH SUPERUSER PASSWORD 'my_pass';"
【讨论】:
alter user username superuser;
【讨论】:
如果您因为使用 Amazon Redshift 而达到此目标,则无法分配 SUPERUSER
ALTER USER <username> SUPERUSER;
改为分配CREATEUSER:
ALTER USER <username> CREATEUSER;
显然,SUPERUSER 在 Amazon Redshift 集群中不是可用的用户分配。我对此感到非常困惑。
https://docs.aws.amazon.com/redshift/latest/dg/r_superusers.html
截图显示:
【讨论】: