postgresql - 在 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=#
为什么特权没有反映?
解决方案
正如@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;
推荐阅读
- java - Eclipse Maven 项目点抛出 File.not.Found 错误
- authentication - 如何使用 istio ingress 启用基于 cookie 的身份验证
- python - 查询从 Logistic 回归得到的概率
- swift - 快速的 EXC_BAD_ACCESS
- python-3.x - matplotlib.pyplot 的维护?指定向量时丢失“:”
- python - Django,环境变量。错误:SMTPRecipientsRefused at /password_reset/
- javascript - 我收到此错误:“TypeError:回调不是函数”,但该函数仍在执行
- android - 在华为 P40 Lite 中,TextToSpeech onInit() 以 ERROR 状态被调用
- html - 如何从 Firebase 实时获取 ID 或密钥
- javascript - 如何在导航中恢复Angular中组件(不是窗口)的滚动位置?