Joh*_*han 8 postgresql security permissions
我正在尝试在 Postgres 中设置一个角色,它可以 a) 创建一个新角色 b) 创建一个新数据库 c) 使该新角色成为数据库的所有者 d) 没有其他权限(尽可能!)
我试过这个:
sc_1=# CREATE ROLE tenant_admin CREATEDB CREATEROLE;
CREATE ROLE
sc_1=# CREATE ROLE user1 IN ROLE tenant_admin LOGIN NOINHERIT ENCRYPTED PASSWORD 'xyz';
CREATE ROLE
sc_1=#
Run Code Online (Sandbox Code Playgroud)
其次是(在另一个会话中)
tahaan@Komputer:~/projects/acme-project$ psql -U user1 -h localhost -d postgres
Password for user user1:
psql (9.3.6)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
postgres=> SET ROLE tenant_admin;
SET
postgres=> CREATE DATABASE "Tenant1" TEMPLATE "tenant_template";
CREATE DATABASE
postgres=> CREATE ROLE "owner1";
CREATE ROLE
postgres=> ALTER DATABASE "Tenant1" OWNER TO "owner1";
ERROR: must be member of role "owner1"
postgres=>
Run Code Online (Sandbox Code Playgroud)
背景:要求具有可以在多租户系统中设置单独数据库的自动化功能。我希望这个功能可以由一个没有太多权限的角色来执行。
Joh*_*han 11
我找到了一个涉及一些额外步骤的解决方案。“tenant_admin”角色的创建方式仍然相同,但现在使用如下:
postgres=> SET ROLE tenant_admin;
SET
postgres=> CREATE ROLE "owner3";
CREATE ROLE
postgres=> GRANT "owner3" TO "tenant_admin";
GRANT ROLE
postgres=> CREATE DATABASE "Tenant3" OWNER "owner3";
CREATE DATABASE
postgres=> REVOKE "owner3" from "tenant_admin";
REVOKE ROLE
Run Code Online (Sandbox Code Playgroud)
小智 7
尝试创建新数据库时,RDS 遇到了这个问题。
以超级用户身份登录
psql --host=xxxxxxx --port=5432 --username=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 --port=5432 --username=newuser --password --dbname=postgres
Run Code Online (Sandbox Code Playgroud)
创建您的数据库
CREATE DATABASE ....
Run Code Online (Sandbox Code Playgroud)