【问题标题】:creating new user in postgres and granting permissions在 postgres 中创建新用户并授予权限
【发布时间】: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


【解决方案1】:

正如@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;

【讨论】:

  • 嘿@Nik,你对 ALter 的提示很有帮助。但特权并没有体现出来。编辑了上面的日志。你可以检查一下吗?
  • 通过哪个用户运行此语句 GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA myapp TO myapp; (这不是)它给出了什么错误?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
  • 2021-12-24
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2015-12-07
相关资源
最近更新 更多