"错误:必须是角色的成员"在PostgreSQL中创建模式时

Ult*_*uke 66 postgresql roles

我使用超级用户帐户登录,这是我正在做的过程:

1-> CREATE ROLE test WITH IN ROLE testroles PASSWORD 'testpasswd'
2-> CREATE SCHEMA AUTHORIZATION test
Run Code Online (Sandbox Code Playgroud)

该角色已正确创建,但我在尝试创建架构时遇到此错误:

ERROR:  must be member of role "test"
Run Code Online (Sandbox Code Playgroud)

提前致谢!

Dav*_*nes 96

CREATE DATABASE在Amazon RDS上使用时遇到了这个问题.我认为它与使用基本相同CREATE SCHEMA.

使用Amazon RDS时,发出该用户的用户CREATE DATABASE必须是将成为数据库所有者的角色的成员.就我而言,我正在使用的超级用户帐户被调用root,我将创建一个o将拥有数据库的角色d:

postgres=> CREATE ROLE o;
CREATE ROLE

postgres=> CREATE DATABASE d OWNER = o;
ERROR:  must be member of role "o"

postgres=> GRANT o TO root;
GRANT ROLE

postgres=> CREATE DATABASE d OWNER = o;
CREATE DATABASE
Run Code Online (Sandbox Code Playgroud)

  • 我在 Google Cloud SQL for PostgreSQL 上遇到了同样的错误,这个答案是解决方案,除了我在创建数据库之前运行了“GRANT o TO postgres;”。 (4认同)
  • 同样的事情,但我发现新用户不需要CREATEDB权限.我创建了一个普通用户,将该用户角色授予我的管理员用户,然后使用admin用户创建数据库,并将所有者设置为普通用户. (3认同)
  • **警告** 在为该用户启用 IAM 身份验证之前,请不要忘记使用“REVOKE”从“postgres”用户中删除角色。否则,您将无法再使用用户“postgres”连接到数据库,除非您在 RDS 中禁用 IAM 身份验证。 (3认同)
  • 这里有一篇简短的文章描述了 RDS 上这种影响的原因。 https://blog.2ndquadrant.com/the-rds_superuser-role-isnt-that-super (2认同)

小智 26

我遇到了同样的问题,它抱怨您登录的当前(主)用户不是您尝试为其创建架构的用户组的成员.您应该授予对主用户的角色访问权限,这样您就可以创建SCHEMA而不会出现错误:

GRANT <role> TO <master_user>;
Run Code Online (Sandbox Code Playgroud)


bio*_*aph 21

你在使用RDS吗?因为当我以他们为您创建的"超级用户"登录时,我遇到了同样的问题.我能够解决这个问题的方法是创建一个新的组角色,其中包括我的超级用户和拥有该模式的用户.因此,对您而言,这意味着将您的超级用户和测试用户添加到新角色组:

CREATE ROLE users NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
GRANT megausers TO testroles;
GRANT test TO testroles;
Run Code Online (Sandbox Code Playgroud)

现在你应该能够创建你的schmea了


Raf*_*ira 16

这也是RDS的问题.

解决它:

以超级用户身份登录

psql --host=xxxxxxx.rds.amazonaws.com --port=5432 --username=RDS_SUPERUSER_NAME --password --dbname=postgres
Run Code Online (Sandbox Code Playgroud)

创建用户

CREATE USER newuser WITH CREATEDB PASSWORD 'password';
Run Code Online (Sandbox Code Playgroud)

登出

\q
Run Code Online (Sandbox Code Playgroud)

登录为 newuser

psql --host=xxxxxxx.rds.amazonaws.com --port=5432 --username=newuser --password --dbname=postgres
Run Code Online (Sandbox Code Playgroud)

创建数据库/架构

CREATE SCHEMA/DATABASE ....
Run Code Online (Sandbox Code Playgroud)


jor*_*fus 8

我们不是必须将管理员用户成员资格授予服务角色吗?

create role service_role with password 'some_password';
create database service_db with owner service_role;
ERROR:  must be member of role "service_role"
grant admin_user service_role;
GRANT ROLE
create database service_db with owner service_role;
CREATE DATABASE
Run Code Online (Sandbox Code Playgroud)

  • 在Postgres 9.0及以上版本中,授予包括"TO":`GRANT service_role TO admin_user;` (4认同)

Kry*_*ski 5

我也在RDS上遇到过这个问题.我以root用户身份登录,创建了一个名为的角色myappuser,然后尝试创建一个名为superduper其所有者的架构myappuser.

我找到了一个有效的解决方案.创建myappuser角色,并确保此角色至少具有创建数据库的权限(调用该权限CREATEDB).创建myappuser角色后,我登录数据库myappuser并创建superduper用户所在的模式myappuser.这没有任何问题.