我对 root用户,超级用户,用户和权限感到困惑!我无法在用户" sportu"内创建数据库。以下是我使用的命令: -
athleticu@ip-172-30-4-103:/home/ubuntu$ createdb -T template0 simple_db1
createdb: database creation failed: ERROR: permission denied to create database
athleticu@ip-172-30-4-103:/home/ubuntu$ sudo createdb -T template0 simple_db1
sudo: unable to resolve host ip-172-30-4-103
createdb: could not connect to database template1: FATAL: role "root" does not exist
请有人澄清我的疑惑并告诉我应该写些什么!
答案 0 :(得分:16)
在psql中键入\du
,您将看到所有注册用户的列表以及每个用户拥有的权限类型。
为了向登录的用户授予权限(例如' user1'),我必须使用该列表中的一个超级用户角色注销并登录(例如' user2&# 39;),使用以下命令:
psql -U 'user2' -h localhost 'database2'
其中' database2'是特定超级用户' user2'的名称。有特权。 以超级用户身份登录后,您可以向“用户1”授予权限。通过:
ALTER ROLE user1 WITH CREATEDB
或
ALTER ROLE user1 WITH SUPERUSER
然后再次以user1身份登录,该用户现在是超级用户。
答案 1 :(得分:6)
root用户是系统上独立于Postgres的帐户。只有一个root用户。
超级用户是Postgres中可以访问所有内容的帐户。可能有很多超级用户。
系统帐户和Postgres帐户是不同的,除非您在连接到数据库时指定Postgres用户名(通过psql
,createdb
,dropdb
或其他方式实用程序,它将使用当前系统用户的名称,希望有一个相同名称的Postgres帐户。默认情况下, root用户在Postgres中没有相应的帐户。
在* nix上安装Postgres时,它会同时创建名为postgres
的超级用户和名为postgres
的系统用户。
因此,当您需要使用Postgres作为内置超级用户时,您有两种选择:
sudo su - postgres
成为postgres
系统用户并执行您的命令(createdb
,psql
等)。由于系统用户与数据库超级用户具有相同的名称,因此您的命令将作为相应的帐户进行连接。-U
开关一样指定要执行的用户名,例如psql -U postgres ...
。根据您的Postgres服务器的身份验证设置,您可能需要使用其中一种或两种连接方法输入密码。
答案 2 :(得分:0)
全新安装PostgreSQL时,您可以做的是创建具有某些权限的用户(请参见createuser documentation):
my-user> sudo su - postgres -c "createuser <my-user> --createdb"
这将允许my-user
创建数据库,如下所示:
my-user> createdb <my-db>
如果您希望my-user
能够执行任何操作,请改用--superuser
标志:
my-user> sudo su - postgres -c "createuser <my-user> --superuser"
答案 3 :(得分:0)
目前,这对我有用:
sudo su postgres
psql
ALTER USER username WITH CREATEDB;
\q
exit