我正在使用超级用户账户登录,并执行以下过程:
1-> CREATE ROLE test WITH IN ROLE testroles PASSWORD 'testpasswd'
2-> CREATE SCHEMA AUTHORIZATION test
角色已正确创建,但在尝试创建模式时出现了此错误:
ERROR: must be member of role "test"
我正在使用超级用户账户登录,并执行以下过程:
1-> CREATE ROLE test WITH IN ROLE testroles PASSWORD 'testpasswd'
2-> CREATE SCHEMA AUTHORIZATION test
角色已正确创建,但在尝试创建模式时出现了此错误:
ERROR: must be member of role "test"
在使用Amazon RDS时,我在使用CREATE DATABASE
时遇到了这个问题。我认为它本质上与使用CREATE SCHEMA
相同。
在使用Amazon RDS时,发出CREATE DATABASE
命令的用户必须是将成为数据库所有者的角色的成员。在我的情况下,我正在使用名为root
的超级用户帐户,并将创建一个名为d
的数据库所有者角色o
:
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
GRANT o TO postgres;
。 - Simon WatsonREVOKE
从postgres
用户中删除角色。否则,在RDS中禁用IAM身份验证之前,您将无法使用用户postgres
连接到数据库。 - UltimaWeapon我遇到过同样的问题,它抱怨当前(主)用户您登录的用户不是您正在尝试创建模式的用户组的成员。您应该授予该角色对您的主用户的访问权限,这将允许您无误地创建模式:
GRANT <role> TO <master_user>;
您是否正在使用RDS?因为当我登录作为他们为您创建的“超级用户”时,我也遇到了同样的问题。我能够解决这个问题的方式是创建一个新的组角色,该组角色包括我的超级用户和拥有模式的用户。因此,对于您来说,这意味着将您的超级用户和测试用户添加到一个新的角色组中:
CREATE ROLE users NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
GRANT megausers TO testroles;
GRANT test TO testroles;
现在您应该能够创建您的模式
我也遇到了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
创建你的数据库/模式
CREATE SCHEMA/DATABASE ....
我们难道不只是需要授予管理员用户服务角色的成员资格吗?
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
GRANT service_role TO admin_user;
- Grengasroot
用户身份登录,创建了一个名为myappuser
的角色,然后尝试创建一个名为superduper
的模式,其所有者是myappuser
。myappuser
角色,并确保该角色至少具有创建数据库的权限(该特权称为CREATEDB
)。创建myappuser
角色后,我以myappuser
用户身份登录数据库,并创建了superduper
模式,其用户为myappuser
。这样做没有任何问题。我通过使用postgres
用户登录(然后应用我的更改,即在我的情况下更改所有权)来解决了这个问题:
sudo -u postgres psql
ALTER DATABASE my_database OWNER TO new_user;
psql -h ${PGHOST} -p ${PGPORT:-5432} -U ${PGUSER:-postgres} -c "ALTER USER renderer WITH CREATEDB PASSWORD '$RENDERPASSWORD'"
因此,在更改密码的同时,我还将CREATEDB角色权限添加到了该角色。我曾经遇到过同样的问题。为了解决这个问题,我使用新创建的角色登录并创建了数据库。 不知何故,在RDS Postgres中授权无法正常工作。