在PostgreSQL中创建模式时出现“错误:必须是角色的成员”

dz6r00yl  于 2023-04-05  发布在  PostgreSQL
关注(0)|答案(9)|浏览(534)

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

1-> CREATE ROLE test WITH IN ROLE testroles PASSWORD 'testpasswd'
2-> CREATE SCHEMA AUTHORIZATION test

角色已正确创建,但在尝试创建Schema时出现此错误:

ERROR:  must be member of role "test"
u3r8eeie

u3r8eeie1#

您正在使用RDS吗?因为当我以他们为您创建的“超级用户”身份登录时,我也遇到了同样的问题。我能够解决这个问题的方法是创建一个新的组角色,其中包括我的超级用户和拥有架构的用户。因此,对于您来说,这意味着将您的超级用户和测试用户添加到新的角色组:

CREATE ROLE users NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
GRANT megausers TO testroles;
GRANT test TO testroles;

现在你应该可以创建你的schmea

z5btuh9x

z5btuh9x2#

RDS也有这个问题。

解决方法:

以超级用户身份登录

psql --host=xxxxxxx.rds.amazonaws.com --port=5432 --username=RDS_SUPERUSER_NAME --password --dbname=postgres

创建用户

CREATE USER newuser WITH CREATEDB PASSWORD 'password';

退出

\q

newuser身份登录

psql --host=xxxxxxx.rds.amazonaws.com --port=5432 --username=newuser --password --dbname=postgres

创建您的DB/Schema

CREATE SCHEMA/DATABASE ....
x0fgdtte

x0fgdtte3#

难道我们不需要将管理员用户成员资格授予服务角色吗?

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
j8yoct9x

j8yoct9x4#

我在RDS上也遇到过这个问题。我以root用户身份登录,创建了一个名为myappuser的角色,然后尝试创建一个名为superduper的架构,其所有者是myappuser
我找到了一个可行的解决方案。创建myappuser角色,并确保该角色至少具有创建数据库的权限(该权限称为CREATEDB)。在创建myappuser角色后,我以myappuser登录数据库,并创建用户为myappusersuperduper模式。这可以正常工作。

kdfy810k

kdfy810k5#

我通过使用postgres用户登录来修复它(然后应用我的更改,在我的情况下更改所有权):

sudo -u postgres psql
ALTER DATABASE my_database OWNER TO new_user;
xnifntxz

xnifntxz6#

我刚刚使用Amazon RDS遇到了这个问题。
很多答案都是正确的,但你也可以改变角色。
下面是我的实现
psql -h ${PGHOST} -p ${PGPORT:-5432} -U ${PGUSER:-postgres} -c "ALTER USER renderer WITH CREATEDB PASSWORD '$RENDERPASSWORD'"
因此,在更改密码的同时,我还向角色添加了CREATEDB角色权限。

6yoyoihd

6yoyoihd7#

我也遇到了同样的问题。为了解决这个问题,我用新创建的角色登录并创建了数据库。不知何故,grant在RDS Postgres中不起作用。

gdx19jrr

gdx19jrr8#

我在Amazon RDS上使用CREATE DATABASE时遇到了这个问题。我认为它本质上与使用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
wvmv3b1j

wvmv3b1j9#

我遇到了同样的问题,它抱怨您登录的当前(主)用户不是您试图为其创建架构的用户组的成员。您应该将角色访问权限授予您的主用户,它将允许您创建SCHEMA而不会出错:

GRANT <role> TO <master_user>;

相关问题