gpt4 book ai didi

database - PostgreSQL : noInherit not working?

转载 作者:搜寻专家 更新时间:2023-10-30 22:28:13 24 4
gpt4 key购买 nike

所以,我正在尝试弄清楚如何正确管理 postgresql 数据库。一般来说,我是 postgres 和 DBA 的新手。

我目前正在尝试为特定数据库担任专门角色。我还想让其他用户获得该角色的授权,以便我可以执行 SET ROLE my_db_role 并能够从那里操作这个特定的数据库。但是,我有权限泄漏,这意味着我可以操作我的数据库而无需执行此 SET ROLE my_db_role 命令。

以下是我为获得不成功的结果而执行的命令:

=# CREATE ROLE test NOINHERIT;
=# CREATE USER myuser;
=# CREATE DATABASE test OWNER test;
=# \c test
=# DROP SCHEMA public;
=# CREATE SCHEMA AUTHORIZATION test;
=# GRANT test TO myuser;
=# \c test myuser
=> CREATE TABLE test.mytable(id integer);
CREATE TABLE
Temps : 46,469 ms

为什么最后的命令成功了?

在我看来,myuser 应该没有测试数据库/模式的权限,因为测试角色有 NOINHERIT 标志,所以这个 CREATE 命令应该是不可能的。它应该需要执行 SET ROLE test 才能成功,但这里不是这种情况。

我错过了什么?

附带说明一下,除了官方文档之外,我很难找到有关如何正确管理 postgresql 的良好信息来源。如果您可以分享一些关于它的好 Material ,我们非常欢迎。

最佳答案

恐怕我不知道有任何关于角色管理和管理的特别好的资源。这里的标准显示出必须取悦多个利益相关者的所有迹象,并且灵活但令人困惑。

至于您的直接问题,问题是“NOINHERIT”扮演了错误的角色。但是,此功能并不是真正的安全限制。

test=# ALTER USER myuser NOINHERIT;
test=# \c - myuser
You are now connected to database "test" as user "myuser".
test=> CREATE TABLE test.mytable(id int);
ERROR: permission denied for schema test
LINE 1: CREATE TABLE test.mytable(id int);
^
test=> SET ROLE test;
SET
test=> CREATE TABLE test.mytable(id int);
CREATE TABLE

如您所见,myuser 没有继承 test 的权限,但没有什么可以阻止您直接切换到该角色。

如果您觉得这很繁琐且令人困惑,那么您并不孤单。我发现添加一些 tests 很有用检查我设置的任何配置。

关于database - PostgreSQL : noInherit not working?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48246578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com