如何在PostgreSQL中为非当前连接数据库的Schema授予权限?
PostgreSQL跨数据库Schema权限授予问题解答
不行,你尝试的GRANT ALL ON SCHEMA <other>.public TO someuser;这种语法在PostgreSQL里是不支持的。
PostgreSQL中,每个数据库都是独立的命名空间,当你连接到某个数据库时,所有DDL、DCL命令(包括GRANT)只能作用于当前连接的数据库对象,无法直接跨数据库操作其他库的Schema、表等对象。
可行的替代方案(无需手动执行\c切换)
使用dblink扩展远程执行授权
先确保dblink扩展已安装(可通过CREATE EXTENSION IF NOT EXISTS dblink;安装),然后执行以下语句在目标库中完成授权:-- 一次性执行授权 SELECT dblink_exec('dbname=other', 'GRANT ALL ON SCHEMA public TO someuser;');注意:执行该命令的用户需要具备
other数据库的连接权限,以及在other库中对publicSchema执行GRANT的权限。利用psql的\gexec自动切换执行
如果是在psql客户端中,可以通过生成切换命令并自动执行的方式,避免手动输入\c:SELECT format('\c other; GRANT ALL ON SCHEMA public TO someuser; \c postgres;') \gexec这条命令会自动完成:切换到
other库、执行授权、切回原postgres库的流程。
内容的提问来源于stack exchange,提问作者dokaspar
相关产品推荐
相关产品推荐

