【问题标题】:Issue with permissions after restoring Postgres DB to new server将 Postgres DB 恢复到新服务器后出现权限问题
【发布时间】:2019-06-09 17:59:51
【问题描述】:

我使用以下命令备份源服务器上的数据库:

pg_dump --no-acl  -h "server" --port "1234"  -U "admin"  --no-owner dbname > dbname_dump.sql

然后在新服务器上创建空数据库 newdb 并使用此命令恢复数据库

psql -U postgres -d newdb  -f dbname_dump.sql

创建新用户,将所有权限分配给新数据库。当我与那个新用户连接到恢复的数据库时,当我想在公共模式内的任何表上进行选择时,我被拒绝访问。为什么?

【问题讨论】:

  • 您可能没有授予表的权限。数据库不够用。很难说更多,因为您提供的信息很少。
  • 可能,我使用了 GUI,这是 pgadmin 将在 DB 上运行以设置权限的查询 GRANT ALL ON DATABASE "newdb" TO "app-user"; 我希望这就是我所需要的。
  • 谢谢劳伦兹!!您为我指明了正确的方向,我是 PG 新手,只使用 MSSQL,所以我希望事情会以同样的方式发生 :) 我错过了这个:GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA "public" TO "app-user"; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA "public" TO "app-user"; GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA "migrations" TO "app-user"; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA "migrations" TO "app-user";
  • 这对仍然遇到权限和所有权问题没有帮助。

标签: postgresql psql


【解决方案1】:

所以我设法解决了这个问题,简而言之,问题是用于恢复的管理员用户是所有恢复的所有者,创建新的数据库用户以供应用程序使用并将所有内容转移给新用户是一场噩梦。因此,以下是正确执行此操作的步骤:

  1. 作为管理员备份源数据库,带有 --no-acl 和 --no-owner 开关
  2. 在新服务器上创建新的空数据库
  3. 在新服务器上创建 db 用户,该用户将用于应用程序连接到新创建的数据库
  4. 在新创建的数据库上授予已创建用户的所有权限
  5. 将该新用户的数据库恢复到新创建的数据库中

现在应用程序正在运行,我可以运行数据库迁移脚本,因此一切都按预期运行。由于我是 PGSQL 新手,我不知道只有所有者才能对表进行删除或更改,但在我阅读手册后,事情变得更加清晰。

【讨论】:

  • 还有REASSIGN OWNED。您还可以临时授予潜在对象所有者超级用户以进行还原。
猜你喜欢
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 2010-10-07
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 2020-09-14
  • 1970-01-01
相关资源
最近更新 更多