首页 > 解决方案 > 在 postgres 中创建新用户并授予权限

问题描述

我通过将 .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/

脚本.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=#

为什么特权没有反映?

标签: postgresqldocker

解决方案


正如@a_horse_with_no_name 建议的那样,在提及架构名称、表名或列名时避免使用“”。还有很多噪音,所以我刚刚删除了。

CREATE TABLE MYAPP.SYSTEM_CONFIG_MASTER
(
    CONFIG_ITEM_ID character varying(100) NOT NULL,
    CONFIG_GROUP_NAME character varying(100),
    CONFIG_NAME character varying(100),
    CONFIG_VALUE character varying(2000),
    CONSTRAINT SYSTEM_CONFIG_MASTER_pkey PRIMARY KEY (CONFIG_ITEM_ID)
);

从您运行的以下语句中:-

CREATE USER MYAPP WITH LOGIN  SUPERUSER  INHERIT  CREATEDB   CREATEROLE   NOREPLICATION;

它似乎已经是一个超级用户。但是,如果 myapp 用户不是所有者,那么

您可以从该架构/超级用户的所有者运行以下语句

句法: Alter schema schema_name owner to user_name;

代码:alter schema myapp owner to myapp;


推荐阅读