gpt4 book ai didi

postgresql - 更改 rdsadmin 用户创建的架构的权限

转载 作者:行者123 更新时间:2023-11-29 12:09:20 26 4
gpt4 key购买 nike

我添加了 postgis_topology 扩展,它将拓扑架构添加到我的数据库中。但是,我的根用户没有足够的权限在 AWS RDS 实例中使用该架构中的函数。拓扑架构是使用以下内容创建的(如 pgAdmin 中所示):

CREATE SCHEMA topology
AUTHORIZATION rdsadmin;

当我尝试运行语句 SELECT topology.CreateTopology('element_topo', 4326); 时,我收到错误“模式拓扑的权限被拒绝”。当我尝试删除模式并重新开始时,错误是“必须是模式拓扑的所有者”。

我也试过只向我的根用户授予权限

GRANT ALL ON ALL FUNCTIONS IN SCHEMA topology TO my_root_user;

但这只是给出“模式拓扑的权限被拒绝”。

如何将此架构的权限授予我的根用户?

最佳答案

我还没有找到 CREATE EXTENSION postgis_topology; 语句使用 rds admin 用户创建拓扑模式及其所有函数和表的原因。但是,这会阻止其他用户执行功能。

以下 DO 语句通过将表和函数的所有者更新为赋予数据库根用户的角色来解决问题。

DO
$BODY$
DECLARE
_sql text;

BEGIN

EXECUTE 'SET search_path = topology,public;';

EXECUTE 'ALTER SCHEMA topology OWNER TO rds_superuser;';

EXECUTE 'ALTER TABLE topology.topology OWNER TO rds_superuser;';

EXECUTE 'ALTER TABLE topology.topology_id_seq OWNER TO rds_superuser;';

EXECUTE 'ALTER SEQUENCE topology.topology_id_seq OWNER TO rds_superuser;';

EXECUTE 'ALTER TABLE topology.layer OWNER TO rds_superuser;';

SELECT INTO _sql
string_agg('ALTER FUNCTION '
|| nsp.nspname || '.'
|| p.proname || '('
|| pg_get_function_identity_arguments(p.oid)
|| ') OWNER TO rds_superuser;', E'\n'
)
FROM pg_catalog.pg_proc p
JOIN pg_catalog.pg_namespace nsp ON p.pronamespace = nsp.oid
WHERE nsp.nspname = 'topology';

EXECUTE _sql;

END
$BODY$;

关于postgresql - 更改 rdsadmin 用户创建的架构的权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45078346/

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