亚马逊RDS Postgres -> 授予pg_catalog权限

8
我需要授予主用户(MasterUsername)访问pg_catalog的权限。
GRANT USAGE ON SCHEMA pg_catalog TO <master-user>;

运行此命令后,我得到以下警告: 警告:未授予“pg_catalog”任何权限。
实际上,我有一个自动化脚本,在其中创建数据库、设置搜索路径和其他操作。
SET search_path = <my-schema>, pg_catalog;
CREATE TYPE <type> AS (
id bigint,
name character varying);

我遇到了以下错误:

Caused by: org.postgresql.util.PSQLException: ERROR: permission denied for schema pg_catalog

基本上,由于pg_catalog中存在pg_type表格,不允许我创建类型。如何创建类型?
我不知道授予USAGE权限是否有所帮助?如果有其他的解决办法,请告诉我。
2个回答

1
授予使用权限只能让您能够访问模式中的对象,创建新对象将需要该模式上的创建特权。

是的,我知道,我只想将pg_catalog添加到搜索路径中。问题是当我尝试授予角色时出现了那个错误。有没有办法在AWS RDS中给予访问权限? - Pavanraotk
你是想在pg_catalog模式下创建一个对象,还是只需要访问pg_catalog的某个对象来在其他地方创建对象? - Lohit Gupta
我需要在pg_type中创建类型,并将postgis函数的权限更改为我的数据库用户。 - Pavanraotk
我认为我们无法在pg_type之外创建自定义类型。此外,pg_type存在于pg_catalog中,我无法重命名,因为我没有权限。 - Pavanraotk
您可以在模式中创建自定义类型并使用它。尽管在Postgres中更改默认目录模式不可取,除非您知道自己在做什么及其后果,但如果您想要在pg_catalog中创建/更改任何内容,则需要运行“GRANT ALL ON SCHEMA pg_catalog TO <master-user>;” - Lohit Gupta
显示剩余2条评论

0
我解决这个问题的方法非常简单,我创建了一个名为postgres的角色,使用CREATE ROLE postgres命令,并将其分配给我的用户。
通过SET search_path=public,<database>将公共搜索路径和数据库添加到搜索路径中。
将此分配给我的用户实际上赋予了我创建自定义pg_type、在公共模式中使用pg_catalog架构所需的所有权限。这是如何工作的?我不知道,也许Postgres的开发人员可以回答这个问题?或者AWS RDS的开发人员可以回答这个问题。
其次,我在使用pg_functions和Postgis扩展函数时遇到了另一个问题,但是通过将角色postgres分配给需要访问该函数的用户来解决了这个问题。
我仍然认为这是一种解决方法,而不是直接修复方法,或者可能是一种修复方法,但应该有一些文档说明(我没有找到)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接