Select 当前角色作为非超级用户的数据库

Select databases for current role as non superuser

PostgreSQL 9.1

我有一个多租户解决方案,其中一个或多个数据库由一个角色(租户)拥有。

以超级用户身份登录时有效:

SELECT datname FROM pg_database
JOIN pg_authid ON pg_database.datdba = pg_authid.oid
WHERE rolname = current_user

但是以租户身份登录时出现错误:pg_autid

的权限被拒绝

租户是这样创建的:

CREATE ROLE 'tenant1' WITH PASSWORD '12345' LOGIN

奇怪的是 tenant1 可以看到所有其他数据库:

SELECT datname FROM pg_database

我的问题是:

  1. 如何以安全的方式列出属于某个租户的所有数据库?
  2. 有没有更好的方法让这个多租户解决方案更安全?

我知道我可以以超级用户身份登录,列出租户的数据库,然后以租户身份登录。但我正在寻找一个更简单的解决方案。某些数据显然可以作为受限租户访问,因为我可以列出所有 pg_database.

我搜索了所有档案,但没有找到任何适用的解决方案。

提前感谢您提供任何线索!

功能 pg_get_userbyid() 应该可供每个用户访问:

SELECT datname 
FROM pg_database
WHERE pg_get_userbyid(datdba) = current_user