RDS版本:i686-pc-linux-gnu上的PostgreSQL 8.0.2,由GCC gcc (GCC) 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)编译,Redshift 1.0.1161
我已经为这个问题苦苦挣扎了几天,我在此处和 AWS 论坛找到的所有解决方案都不适合我。
基本上我正在尝试删除一个组。该组中没有用户(尽管根据 AWS 文档,这应该不重要)。
我已撤销对数据库、架构、表和函数的所有权限。它们不是 pg_tables、pg_views、pg_namespace 或 pg_database 中 ACL 的所有者或一部分。
它们也不是 pg_default_acl 中 ACL 的一部分。
当我运行时DROP GROUP my_group;
,我收到以下错误:
[Amazon](500310) Invalid operation: group "my_group" cannot be dropped because some objects depend on it Details: privileges for default privileges on new relations belonging to user dwowner in schema changehistory privileges for default privileges on new relations belonging to user dwowner in schema stage privileges for default privileges on new relations belonging to user dwowner in schema public 5 object in database prod;
跑步:
ALTER DEFAULT PRIVILEGES
IN SCHEMA stage, public, changehistory, admin
REVOKE ALL ON TABLEs FROM GROUP my_group;
不会导致 pg_default_acl 表发生更改(因为它们一开始就不存在),并且在尝试删除组时,上述错误仍然存在。
几个问题:
DROP GROUP my_group;
on prod 会导致类似的错误,这次引用的是 dev 数据库。显然我在某处缺少一些对象权限关系,但目前我完全不知道
小智 1
更改默认权限在类似的情况下对我有用
下面的查询应该有助于识别依赖性
SELECT nspname, defaclobjtype, array_to_string(defaclacl, ',')
FROM pg_default_acl a
JOIN pg_namespace b ON a.defaclnamespace=b.oid;
Run Code Online (Sandbox Code Playgroud)
alter defaultprivileges 命令还将授予者信息作为参数。
运行上述查询时,您应该能够识别依赖项以及授予该权限的用户,使用该用户名作为更改默认权限的一部分,如下所示。注意您必须具有超级用户权限才能执行此操作
ALTER DEFAULT PRIVILEGES
FOR <USER>
IN SCHEMA stage, public, changehistory, admin
REVOKE ALL ON TABLEs FROM GROUP my_group;
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你。:-)