createdb:数据库创建失败:错误:拒绝创建数据库的权限

时间:2017-05-02 09:39:49

标签: postgresql root permission-denied role

我对 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

请有人澄清我的疑惑并告诉我应该写些什么!

4 个答案:

答案 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身份登录,该用户现在是超级用户。

bloglink一样有用。

答案 1 :(得分:6)

root用户是系统上独立于Postgres的帐户。只有一个root用户。

超级用户是Postgres中可以访问所有内容的帐户。可能有很多超级用户。

系统帐户和Postgres帐户是不同的,除非您在连接到数据库时指定Postgres用户名(通过psqlcreatedbdropdb或其他方式实用程序,它将使用当前系统用户的名称,希望有一个相同名称的Postgres帐户。默认情况下, root用户在Postgres中没有相应的帐户。

在* nix上安装Postgres时,它会同时创建名为postgres超级用户和名为postgres的系统用户。

因此,当您需要使用Postgres作为内置超级用户时,您有两种选择:

  1. 您可以sudo su - postgres成为postgres 系统用户并执行您的命令(createdbpsql等)。由于系统用户与数据库超级用户具有相同的名称,因此您的命令将作为相应的帐户进行连接。
  2. 您可以像-U开关一样指定要执行的用户名,例如psql -U postgres ...
  3. 根据您的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