【问题标题】:Amazon RDS - Postgresql role cannot access tablesAmazon RDS - Postgresql 角色无法访问表
【发布时间】:2019-07-31 11:37:05
【问题描述】:

使用用户名 ziggy 在 AWS 上创建了一个 postgresql 实例。我将数据库恢复到该实例。但是我什至无法选择任何表格

select * FROM mac_childcare_parcels

给我ERROR: permission denied for relation mac_childcare_parcels ********** Error **********

该表的所有者属于 postgres 登录。

所以我尝试运行这个:grant all privileges on all tables in schema public to ziggy,但由于我不是超级用户,我不能给自己特权,这样会引发权限错误。我必须做什么才能访问这些表格?

这也不行

grant select on mac_childcare_parcels to ziggy

此查询返回成功,但不允许登录 ziggy 访问表

GRANT USAGE ON SCHEMA public TO ziggy;

【问题讨论】:

  • 除非您告诉我们您恢复数据库的准确程度(使用哪个数据库用户),否则您不会得到一个好的答案。另外,您应该在psql 中说出\dp mac_childcare_parcels 为您提供的内容。
  • 我使用了 pgadmin -- 指向备份文件并在没有触及任何选项的情况下恢复它
  • 好的,这需要以下信息:SELECT current_user, n.nspname, c.relacl, n.nspacl FROM pg_class AS c JOIN pg_namespace AS n ON c.relnamespace = n.oid WHERE relname = 'mac_childcare_parcels';

标签: postgresql amazon-web-services roles


【解决方案1】:

您还需要在 SCHEMA 上 GRANT USAGE,例如

GRANT USAGE ON SCHEMA public TO ziggy;

【讨论】:

  • 我做了这个查询 - 成功返回,但我仍然无法选择任何表
【解决方案2】:

首先使用超级用户登录,并使用如下命令为新创建的用户提供所有 rds 超级用户访问权限

GRANT rds_superuser TO ziggy;

rds_superuser 替换为您的 rds 超级用户。

【讨论】:

    【解决方案3】:

    需要超级用户访问权限才能运行访问级别查询。但是正如您所说的访问不存在,那么我会说复制您从备份中恢复的数据库的副本并将自己授予超级用户。 然后向任何用户提供所有需要的访问权限。

    【讨论】:

    • 你的意思是在我的本地副本上,创建一个用户名 ziggy 并使其成为超级用户。备份它,然后将其恢复到 AWS 服务器?
    猜你喜欢
    • 1970-01-01
    • 2014-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多