我对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
请有人澄清我的疑问并告诉我应该写什么!
嘿我已经解决了这个问题。您要做的就是首先以 postgres 用户身份登录,如下所示:
$ su postgres
$ psql
postgres=# alter user athleticu createdb;
ALTER ROLE
希望对你有帮助:)
在 psql 中输入
\du
,您将看到所有注册用户的列表以及每个用户拥有的权限类型。
为了向登录的用户(例如“user1”)授予权限,我必须使用该列表中的超级用户角色之一(例如“user2”)注销并登录,使用以下命令:
psql -U 'user2' -h localhost 'database2'
其中“database2”是特定超级用户“user2”有权访问的数据库的名称。 以超级用户身份登录后,您可以通过以下方式向“user1”授予权限:
ALTER ROLE user1 WITH CREATEDB
或
ALTER ROLE user1 WITH SUPERUSER
然后以 user1 身份再次登录,该用户现在是超级用户。
root 用户 是系统上独立于 Postgres 的帐户。只有一个 root 用户。
超级用户是 Postgres 中的一个帐户,可以访问所有内容。可能有很多超级用户。
系统帐户和 Postgres 帐户是不同的东西,尽管除非您在连接到数据库时指定 Postgres 用户名(通过psql
、
createdb
、
dropdb
等实用程序),否则它将使用当前系统用户的帐户name 希望有一个对应的同名 Postgres 帐户。默认情况下,root 用户在 Postgres 中没有相应的帐户。 当您在 *nix 上安装 Postgres 时,它会创建一个名为
postgres
的 超级用户
和名为
postgres
的系统用户。因此,当您需要使用 Postgres 作为内置超级用户执行某些操作时,您有两个选择:
sudo su - postgres
成为
postgres
系统用户并执行您的命令(
createdb
、
psql
等)。由于系统用户与数据库超级用户同名,因此您的命令将作为适当的帐户进行连接。
-U
开关指定要执行的用户名,例如
psql -U postgres ...
。
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"
psql
之外创建一个数据库。我发现了这个问题并通过以下步骤解决了它:
postgres
以 sudo -u postgres psql
用户身份登录(postgresql 默认为 root 用户)
psql
中,我输入
\du
以查看所有用户及其权限。我发现我只有一个用户(postgres ),我必须创建另一个超级用户,它的用户名与我的 Linux 用户(george)相同
psql
内)
CREATE USER george SUPERUSER;
,这样我创建了一个名为george的新超级用户。
psql
(通过输入
\q
),现在我可以从外部
psql
(即从我的终端)运行
created db <database name>
,没有任何问题。
错误? 您正在尝试使用没有您尝试执行的操作类型权限的用户来执行数据库操作(创建数据库、创建角色)。
解决方案? 只需在命令行上登录数据库,即对于 PostgreSQL,将使用“sudo -u postgres psql”,然后使用命令“\du”确认用户特定分配的角色,最有可能的是他/她没有执行您想要的操作所需的权限。然后只需分配您希望用户执行的角色,即创建数据库或简单地按照以下步骤使用户成为“超级用户”(https://chartio.com/resources/tutorials/how-to-change-a-user-to -postgresql 中的超级用户/)
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;