【发布时间】:2020-12-08 08:45:36
【问题描述】:
我通过将 .sql 脚本注入 Docker 入口点来在 docker 容器中启动 postgres。
我想创建一个新的登录角色并在我的架构上授予对它的完全访问权限。目前,模式所有权被分配给默认用户 postgres。不过,表正在创建中。
我怎样才能做到这一点?
Dockerfile:
FROM postgres
ENV POSTGRES_USER postgres
ENV POSTGRES_PASSWORD postgres
ENV POSTGRES_DB MYAPP
COPY /script.sql /docker-entrypoint-initdb.d/
script.sql:
CREATE SCHEMA "MYAPP";
CREATE USER MYAPP WITH LOGIN SUPERUSER INHERIT CREATEDB CREATEROLE NOREPLICATION";
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA "MYAPP" TO MYAPP;
CREATE TABLE "MYAPP"."SYSTEM_CONFIG_MASTER"
(
"CONFIG_ITEM_ID" character varying(100) COLLATE pg_catalog."default" NOT NULL,
"CONFIG_GROUP_NAME" character varying(100) COLLATE pg_catalog."default",
"CONFIG_NAME" character varying(100) COLLATE pg_catalog."default",
"CONFIG_VALUE" character varying(2000) COLLATE pg_catalog."default",
CONSTRAINT "SYSTEM_CONFIG_MASTER_pkey" PRIMARY KEY ("CONFIG_ITEM_ID")
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
我想将此 MYAPP 架构(或数据库)的完全所有权分配给用户 MYAPP。
请帮忙。
编辑:
Alter Schema 确实有助于更改所有者。但即使使用后权限也没有得到体现
CREATE SCHEMA myapp;
CREATE USER myapp;
ALTER SCHEMA myapp owner to myapp; ( this is working)
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA myapp TO myapp; ( this is not)
List of schemas
Name | Owner | Access privileges | Description
------------+----------+----------------------+------------------------
myapp | myapp | |
TESTDB | postgres | |
public | postgres | postgres=UC/postgres+| standard public schema
| | =UC/postgres |
(3 rows)
myapp=#
为什么特权没有反映?
【问题讨论】:
-
与你的问题无关,但是:你真的应该避免那些可怕的引用标识符。他们的麻烦比他们的价值要多得多。 wiki.postgresql.org/wiki/…
标签: postgresql docker