Postgresql
在不同的所有者下創建數據庫
我正在嘗試在 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=#
隨後(在另一個會話中)
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=>
背景:要求具有自動化功能,可以在多租戶系統中設置單獨的數據庫。我希望這個功能可以由一個沒有太多權限的角色來執行。
我找到了一個涉及一些額外步驟的解決方案。“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
嘗試創建新數據庫時,RDS 出現此問題。
要解決它:
以超級使用者身份登錄
psql --host=xxxxxxx --port=5432 --username=SUPERUSER_NAME --password --dbname=postgres
創建使用者
CREATE USER newuser WITH CREATEDB PASSWORD 'password';
登出
\q
登錄為
newuser
psql --host=xxxxxxx --port=5432 --username=newuser --password --dbname=postgres
創建你的數據庫
CREATE DATABASE ....