我们使用 liquibase 来管理和执行我们的数据库更改。在我们的 DEV 环境中(尤其是在本地机器上),我们经常重新创建表以保持清白。我们刚刚从 MySQL 迁移到 Postgres,并面临与这些表重新创建相关的问题。
最初,我们已授予我们的 DB 用户:
GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN SCHEMA public TO mydbuser;
GRANT SELECT, USAGE ON ALL SEQUENCES IN SCHEMA public TO mydbuser;
这是在连接到我们自己的数据库后通过psql执行的(其中 public 是默认/唯一模式)。
一切都很好,直到我们要求 liquibase 重新创建表,在这种情况下它将删除所有表并重新创建它们。
之后,mydbuser似乎失去了对表的所有授权。
根据几个资源(像这样)我们需要改变默认权限,所以我们服从:
GRANT SELECT,INSERT,UPDATE,DELETE ON ALL TABLES IN SCHEMA public TO mydbuser;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT,INSERT,UPDATE,DELETE ON TABLES TO mydbuser;
GRANT SELECT, USAGE ON ALL SEQUENCES IN SCHEMA public TO mydbuser;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, USAGE ON SEQUENCES TO mydbuser;
然而,尽管这看起来很合乎逻辑,但它并没有改变什么。重新创建表后,所有授权(甚至选择)仍然丢失。
我们做错了什么或者我们还需要做什么?
更新
\ddp 显示:默认访问权限
所有者 | 架构 | 类型 | 访问权限
----------+--------+----------+------ ---
postgres | 公共 | 序列 | mydb=rU/postgres
postgres | 公共 | 表| mydb=arwd/postgres