我有 (2) 个 postgresql 数据库。我基本上使用相同的 pg_dump 导出文件在不同的机器上创建 (2) db。DDL 是相同的,但是,我收到了no relations其中之一的消息。search_path 设置正确。我相信我错过了让我的(2)个用户看到这个模式的授权。Host2 上的设置是正确的。我只是不知道使用哪个赠款。
信息:
mra_prd_99999=> \dt
No relations found.
Run Code Online (Sandbox Code Playgroud)
主机 1:
mra_prd_99999=> \z
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
-------------------+---------------------------+-------+-------------------------------------+--------------------------
mra_dev_schm_99999 | abc_bounce_category | table | mra_prd_99999=arwdDxt/mra_prd_99999 |
Run Code Online (Sandbox Code Playgroud)
主机 2:
mra_prd_99999=> \z
Access privileges
Schema | Name | Type | Access privileges | Column access privileges
-------------------+---------------------------+-------+----------------------------------------------+--------------------------
mra_dev_schm_99999 | abc_bounce_category | table | mra_prd_99999=arwdDxt/mra_prd_99999 +|
| | | mra_prd_99999_user1=arwdDxt/mra_prd_99999+|
| | | mra_prd_99999_user2=r/mra_prd_99999 |
Run Code Online (Sandbox Code Playgroud)
我的角色名和设置在两个 (1,2) 上都是相同的:
mra_prd_99999 | Create DB | {}
mra_prd_99999_user1 | | {}
mra_prd_99999_user2 | | {}
Run Code Online (Sandbox Code Playgroud)
所有用户都将 search_path 设置为相同的架构:
mra_prd_99999=> show search_path;
search_path
-------------------
mra_dev_schm_99999
(1 row)
mra_prd_99999=> \dn
List of schemas
Name | Owner
-------------------+---------------
public | mra
mra_dev_schm_99999 | mra_prd_99999
(2 rows)
Run Code Online (Sandbox Code Playgroud)
我需要运行哪些授权才能使 HOST1 的用户拥有与 HOST2 相同的访问权限?
你收到消息
未发现任何关系。
因为用户没有USAGE架构的特权(既不是直接授予的,也不是通过public伪角色授予的)。您可以通过比较\dn+ mra_dev_schm_99999两个数据库来检查这一点。
这是文档对此的说明:
对于模式,允许访问包含在指定模式中的对象(假设还满足对象自己的权限要求)。本质上,这允许受让人在模式中“查找”对象。没有此权限,仍然可以查看对象名称,例如通过查询系统表。此外,在撤销此权限后,现有后端可能具有之前执行过此查找的语句,因此这不是防止对象访问的完全安全的方法。
此外,这两个mra_prd_99999_users似乎没有表级权限abc_bounce_category- 你必须这样做
GRANT ALL ON TABLE mra_dev_schm_99999.abc_bounce_category
TO mra_prd_99999_user1;
GRANT SELECT ON TABLE mra_dev_schm_99999.abc_bounce_category
TO mra_prd_99999_user2;
Run Code Online (Sandbox Code Playgroud)
如果您有更多的表有同样的问题,请执行
GRANT ALL ON ALL TABLES IN SCHEMA mra_dev_schm_99999
TO mra_prd_99999_user1;
-- then for future tables:
ALTER DEFAULT PRIVILEGES FOR ROLE mra_prd_99999
IN SCHEMA mra_dev_schm_99999 GRANT ALL ON TABLES
TO mra_prd_99999_user1;
-- and similarly to the other user
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
182 次 |
| 最近记录: |