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

问题描述 投票:0回答:8

我对root用户超级用户用户权限很困惑!我无法在用户“athleticu”内创建数据库。以下是我使用的命令:-

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

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

database postgresql root roles permission-denied
8个回答
97
投票

嘿我已经解决了这个问题。您要做的就是首先以 postgres 用户身份登录,如下所示:

$ su postgres

$ psql

postgres=# alter user athleticu createdb;
ALTER ROLE

希望对你有帮助:)


46
投票

在 psql 中输入

\du
,您将看到所有注册用户的列表以及每个用户拥有的权限类型。 为了向登录的用户(例如“user1”)授予权限,我必须使用该列表中的超级用户角色之一(例如“user2”)注销并登录,使用以下命令:

    psql -U 'user2' -h localhost 'database2'

其中“database2”是特定超级用户“user2”有权访问的数据库的名称。 以超级用户身份登录后,您可以通过以下方式向“user1”授予权限:

    ALTER ROLE user1 WITH CREATEDB 

    ALTER ROLE user1 WITH SUPERUSER

然后以 user1 身份再次登录,该用户现在是超级用户。

这个博客和这个链接都有帮助。


18
投票

目前,这对我有用:

sudo su postgres
psql

ALTER USER username WITH CREATEDB;
\q

exit

来源:更改角色更改用户


11
投票

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

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

系统帐户和 Postgres 帐户是不同的东西,尽管除非您在连接到数据库时指定 Postgres 用户名(通过

psql

createdb
dropdb
 等实用程序),否则它将使用当前系统用户的帐户name 希望有一个对应的同名 Postgres 帐户。默认情况下,
root 用户在 Postgres 中没有相应的帐户。

当您在 *nix 上安装 Postgres 时,它会创建一个名为

postgres超级用户

 和名为 
postgres
 的系统用户。

因此,当您需要使用 Postgres 作为内置超级用户执行某些操作时,您有两个选择:

    您可以
  1. sudo su - postgres
     成为 
    postgres
     
    系统用户并执行您的命令(createdb
    psql
    等)。由于系统用户与数据库超级用户同名,因此您的命令将作为适当的帐户进行连接。
  2. 您可以使用
  3. -U
     开关指定要执行的用户名,例如 
    psql -U postgres ...
根据您的 Postgres 服务器的身份验证设置,您可能需要使用任一或两种连接方法输入密码。


3
投票
全新安装 PostgreSQL 后,您可以做的是创建具有某些权限的用户(请参阅

createuser 文档):

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"
    

0
投票
我遇到了同样的错误,我发现原因是我试图以 postgresql 不存在的用户身份在

psql

 之外创建一个数据库。我发现了这个问题并通过以下步骤解决了它:

    在我的终端中,我通过输入
  1. postgres
    sudo -u postgres psql 用户身份登录(
    postgresql 默认为 root 用户
  2. psql
     中,我输入 
    \du
     以查看所有用户及其权限。我发现我只有一个用户(
    postgres ),我必须创建另一个超级用户,它的用户名与我的 Linux 用户(george)相同
  3. 我输入(仍在
  4. psql
    内)
    CREATE USER george SUPERUSER;
    ,这样我创建了一个名为george的新超级用户。
  5. 我退出了
  6. psql
    (通过输入
    \q
    ),现在我可以从外部
    psql
    (即从我的终端)运行
    created db <database name>
    ,没有任何问题。

0
投票

错误? 您正在尝试使用没有您尝试执行的操作类型权限的用户来执行数据库操作(创建数据库、创建角色)。

解决方案? 只需在命令行上登录数据库,即对于 PostgreSQL,将使用“sudo -u postgres psql”,然后使用命令“\du”确认用户特定分配的角色,最有可能的是他/她没有执行您想要的操作所需的权限。然后只需分配您希望用户执行的角色,即创建数据库或简单地按照以下步骤使用户成为“超级用户”(https://chartio.com/resources/tutorials/how-to-change-a-user-to -postgresql 中的超级用户/


0
投票
例如,您可以创建具有

john

 权限的用户(角色)
CREATEDB
,或者为用户(角色)
CREATEROLE
添加 
john
 权限,如下所示。 *您可能需要使用任何超级用户登录,例如 
postgres
,您可以省略 
WITH
,这是可选的:

CREATE ROLE john WITH LOGIN PASSWORD 'apple' CREATEDB;
或者:

ALTER ROLE john WITH CREATEDB;
然后,您可以通过使用 

orange

 登录来创建和删除 
john
 数据库,如下所示。 *注意,添加一些权限是有限制的:

CREATE DATABASE orange;
DROP DATABASE orange;
    
© www.soinside.com 2019 - 2024. All rights reserved.