在新的 Postgresql 15 服务器上设置新用户和数据库,但无权在公共模式中创建表?

2024-04-02

我刚刚在 Debian 11 上安装了新的 Postgresql 15 服务器并进行了配置postgresql.conf通过取消注释以下行来允许远程连接。

listen_addresses = '*' 

我还使用以下命令创建了一个新用户和数据库

su postgres psql
postgres=# create database exampledomain;
postgres=# create user exampledomain with encrypted password 'mypassword';
postgres=# grant all privileges on database exampledomain to exampledomain;

我还将以下行添加到 pg_hba.conf 中,以便新用户可以从远程连接进行连接

host    exampledomain     exampledomain     0.0.0.0/0               md5

我可以使用用户名“exampledomain”连接到 exampledomain 数据库。但是,当尝试使用 DBeaver 在公共模式下创建新表时

CREATE TABLE public.newtable (
    id varchar NULL
);

我收到以下消息

ERROR: permission denied for schema public
  Position: 14

对于旧版本的 Postgresql,这就是我创建表所必须执行的所有步骤。对于 Postgresql 15,我需要执行任何其他步骤吗?


对于 Postgresql 15,我需要执行任何其他步骤吗?

是的。出于安全原因,Postgres 15 更改了公共模式的权限:

引用自发行说明 https://www.postgresql.org/docs/release/15.0/

删除公共模式上的 PUBLIC 创建权限 (Noah Misch)

新的默认值是自 CVE-2018-1058 安全版本发布以来第 5.9.6 节推荐的安全架构使用模式之一。此更改适用于新的数据库集群以及现有集群中新创建的数据库。升级集群或恢复数据库转储将保留 public 的现有权限。

对于现有数据库,尤其是具有多个用户的数据库,请考虑撤销公共架构上的 CREATE 权限以采用此新默认值。对于不需要防御内部威胁的新数据库,授予 CREATE 权限将产生先前版本的行为。

因此,如果您希望用户能够在公共模式中创建表,您需要授予这些权限:

grant usage,create on schema public to exampledomain
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在新的 Postgresql 15 服务器上设置新用户和数据库,但无权在公共模式中创建表? 的相关文章

随机推荐