在postgres中创建新用户并授予权限

时间:2020-08-19 06:08:11

标签: postgresql docker

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

为什么特权没有体现出来?

1 个答案:

答案 0 :(得分:0)

由于@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;