【问题标题】:Postgres13.4: Unable to Create Tables in SchemaPostgres13.4:无法在架构中创建表
【发布时间】: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


    【解决方案1】:

    您只在架构上授予了 USAGE,而不是 CREATE。

    【讨论】:

      【解决方案2】:

      除了 Jeff 的回答之外,ALTER DEFAULT PRIVILEGES 仅适用于作为运行语句的用户创建的对象。要自动授予user1 创建的对象的权限,您必须运行

      ALTER DEFAULT PRIVILEGES FOR ROLE user1 ...
      

      【讨论】:

      • 各位:非常感谢。我已经为此工作了几天以使其正常工作。您提供了我解决问题所需的确切信息。谢谢你。一个有趣的旁注:一些命令仍然没有返回任何内容。示例:在我创建表后,显示权限 (\dp) 仍然显示(0 行)。显示表 (\dt) 返回“未找到任何关系”。任何想法为什么?谢谢你
      • 他们不在search_path 上。但这无关紧要。
      • 感谢您的帮助。再次感谢您!
      猜你喜欢
      • 2021-02-10
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 2013-07-23
      相关资源
      最近更新 更多