更改rdsadmin用户创建的模式的权限

时间:2017-07-13 10:43:05

标签: postgresql postgis amazon-rds

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

CREATE SCHEMA topology
  AUTHORIZATION rdsadmin;

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

我还尝试使用

向root用户授予权限
GRANT ALL ON ALL FUNCTIONS IN SCHEMA topology TO my_root_user;

但是这只是给出了#34;架构拓扑的权限被拒绝"。

如何向我的root用户授予此架构的权限?

1 个答案:

答案 0 :(得分:1)

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

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

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$;