我们使用外部数据包装器在单个 PostgreSQL RDS 上跨数据库进行查询。外部数据包装服务器需要为每个将查询远程服务器的用户映射一个用户。但是,为每个用户添加用户映射可能被证明容易出错。
我们所有需要查询外部数据服务器的用户都有一个共享角色,例如role_name
,在我们的 PostgreSQL 服务器上。
我们如何在用户之间共享外部数据包装服务器用户映射?
我们使用外部数据包装器在单个 PostgreSQL RDS 上跨数据库进行查询。外部数据包装服务器需要为每个将查询远程服务器的用户映射一个用户。但是,为每个用户添加用户映射可能被证明容易出错。
我们所有需要查询外部数据服务器的用户都有一个共享角色,例如role_name
,在我们的 PostgreSQL 服务器上。
我们如何在用户之间共享外部数据包装服务器用户映射?
共享用户映射的唯一方法是为 定义它
PUBLIC
,但它适用于所有用户。组在这种情况下不起作用,可能是因为如果多个用户映射通过继承应用于单个用户,则会导致歧义。如果您不想为每个用户使用用户映射,您可以选择创建一个,
PUBLIC
但限制对外部表的访问权限为role_name
通过权限。我知道这也不是一个很好的解决方案,因为它将允许所有用户查看其中的用户映射和密码(如果有的话)。但至少它很容易
GRANT SELECT ON ALL TABLES IN SCHEMA ... TO role_name
。我首选的解决方案是创建外部表,然后在该外部表上创建一个视图,并将视图的选择权限授予需要它们的任何人。只有表的所有者需要映射,视图用户将继承映射的使用(无法看到映射的详细信息,以防您希望将其保密,尽管过去存在暴露的错误这个,所以不要使用古老的次要版本)。