【发布时间】:2021-08-16 01:01:12
【问题描述】:
亲爱的:我正在使用 Postgres13.4,并尝试在模式中创建表。不幸的是,在定义数据库和模式对象时,我似乎无法找到正确的组合。我需要创建一个数据库和一个模式作为 postgres - 我不希望用户拥有数据库或模式 - 只有模式中的对象。我尝试了以下几种变体,但仍然遇到麻烦: (作为用户 postgres) ...
CREATE DATABASE new1;
CREATE USER user1 WITH LOGIN PASSWORD 'password';
CREATE ROLE role1;
GRANT TEMPORARY ON DATABASE new1 TO role1;
GRANT CONNECT ON DATABASE new1 TO user1;
GRANT role1 TO user1;
\connect new1
CREATE SCHEMA schema1;
GRANT USAGE ON SCHEMA schema1 TO ROLE1;
-- *** ALTER PRIVILEGES - TABLES
ALTER DEFAULT PRIVILEGES IN SCHEMA schema1 GRANT ALL PRIVILEGES ON TABLES TO role1;
-- *** ALTER PRIVILEGES - SEQUENCES
ALTER DEFAULT PRIVILEGES IN SCHEMA schema1 GRANT ALL PRIVILEGES ON SEQUENCES TO role1;
-- *** ALTER PRIVILEGES - FUNCTIONS
ALTER DEFAULT PRIVILEGES IN SCHEMA schema1 GRANT ALL PRIVILEGES ON FUNCTIONS TO role1;
-- *** ALTER PRIVILEGES - TYPES
ALTER DEFAULT PRIVILEGES IN SCHEMA schema1 GRANT ALL PRIVILEGES ON TYPES TO role1;
... 创建此数据库后,我以 user1 身份注销/登录。
-
我确认 schema1 存在并且归 postgres 所有:
从 INFORMATION_SCHEMA.SCHEMATA 中选择 CATALOG_NAME、SCHEMA_NAME、SCHEMA_OWNER;
-
确认 user1 确实拥有架构的权限: SELECT rolname, has_schema_privilege(rolname, 'public', 'usage') from pg_roles where rolname='user1';
-
架构列表确实表明 role1 具有特权 (\dn+):role1=U/postgres
-
但是,作为用户user1,执行显示权限(\dp)表示user1没有权限:(0行)
-
如果 user1 尝试创建表,则会显示以下错误:schema schema1 的权限被拒绝
我在这里错过了什么明显的东西吗?如何使 user1 在架构中创建表(和其他对象)?谢谢你
【问题讨论】:
标签: postgresql