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
奇怪的是,租户1可以看到所有其他数据库:
SELECT datname FROM pg_database
我的问题是:
我知道我可以以超级用户身份登录,列出租户的数据库,然后以租户身份登录。但我正在寻找一个更简单的解决方案。有些数据显然可以作为受限租户访问,因为我可以列出所有pg_database。
我搜索了所有档案,但未找到任何适用的解决方案。
提前感谢任何线索!
答案 0 :(得分:0)
每个用户都应该可以访问函数pg_get_userbyid()
:
SELECT datname
FROM pg_database
WHERE pg_get_userbyid(datdba) = current_user