0

    PostgreSQL 错误:架构 PUBLIC 的权限被拒绝

    2023.07.22 | admin | 124次围观

    在 PostgreSQL 15 中,发生了一个与碰巧使用权限的每个用户相关的根本性变化:公共模式的默认权限已被修改。这是相关的,因为它可能会在应用程序部署期间伤害您。您需要了解它对您的影响。

    目录

    创建用户

    许多人只作为超级用户工作。不建议这样做运行时错误没有权限,可能会导致严重的安全问题。建议创建单独的用户来运行您的应用程序。在 PostgreSQL 中运行时错误没有权限,您可以使用或命令创建新用户。这两个选项之间的区别在于直接设置权限而将此属性设置为。在此示例中,您将创建一个“演示”用户,如下清单所示:CREATE USER``CREATE ROLE``CREATE USER``LOGIN``CREATE ROLE``NOLOGIN

    security=# CREATE USER demo LOGIN;
    CREATE ROLE
    

    完成后,您可以重新连接到数据库。\c如果您碰巧使用 psql,该命令是执行此操作的好方法。如果您正在运行其他工具,请使用新用户重新连接:

    security=# \c security demo
    You are now connected to database "security" as user "demo".
    security=> SELECT current_user;
    current_user
    --------------
    demo
    (1 row)
    

    “current_user” 将返回当前使用的用户。

    在 PostgreSQL 15 中使用 PUBLIC 模式

    在 PostgreSQL 14 和之前的版本中,创建表是可能的。新表将简单地以公共模式结束,一切都会很好。这种方法的问题在于,公共模式会很快变成一个包含各种已用和未用表的垃圾桶——这既不可取也不推荐。因此 PostgreSQL 取得了重大飞跃并改变了这种行为。

    查看以下清单

    ecurity=> CREATE TABLE foo (id int);
    ERROR: permission denied for schema public
    LINE 1: CREATE TABLE foo (id int);
    

    PostgreSQL 会出错并告诉您您没有权限在公共模式中创建某些内容,而无需事先明确指定允许谁这样做。现在有必要明确地向用户授予权限。它是这样工作的:

    security=> \c security postgres
    You are now connected to database "security" as user "postgres".
    security=# GRANT ALL ON SCHEMA public TO demo;
    GRANT
    

    让我们以超级用户身份连接到 PostgreSQL 并设置USAGE + CREATE = ALL对公共模式的权限。完成后,您可以继续在此模式中创建对象:

    security=# \c security demo
    You're now connected to database "security" as user "demo".
    security=> CREATE TABLE foo (id int);
    CREATE TABLE
    

    该表将属于创建该表的“demo”用户:

    security=> \d
    List of relations
    Schema | Name | Type  | Owner
    -------+------+-------+-------
    public | foo  | table | demo
    (1 row)
    

    最后

    如果您想了解有关 PostgreSQL 的更多信息,并且您碰巧对一般安全性感兴趣,那么在 PostgreSQL 中使用 SSL 加密客户端/服务器连接是没有办法的。我创建了一篇关于这个重要主题的博文并邀请您阅读()。

    原文标题:POSTGRESQL ERROR: PERMISSION DENIED FOR SCHEMA PUBLIC

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    标签: postgresql
    发表评论