授予对数据库所有表的访问权限

d33*_*tah 16 postgresql best-practices permissions access-control

我最近想与服务器的一个用户共享定期访问权限和我认识到,一个简单的CREATE USERGRANT ALL ON DATABASE命令没有让他运行一个简单SELECT的数据。

我想将给定数据库中所有表的权限授予指定用户,但我不确定授予他对整个架构的访问权限是否是最好的主意,public因为我不知道这是否允许某种特权升级。有没有其他办法?

Erw*_*ter 22

权限DATABASE仅授予对数据库的一般连接权限,仅此而已。仅具有该权限的用户只能看到允许公众看到的内容。

要授予对所有表的读取访问权限,您还需要对所有模式和表的权限:

GRANT USAGE ON SCHEMA public TO myuser; -- more schemas?
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;
Run Code Online (Sandbox Code Playgroud)

您可能还想为未来的模式和表设置默认权限。为在您的数据库中创建对象的每个角色运行

ALTER DEFAULT PRIVILEGES FOR ROLE mycreating_user IN SCHEMA public
GRANT SELECT ON TABLES TO myuser;
Run Code Online (Sandbox Code Playgroud)

但你真的需要先了解整个概念
并且在组角色中捆绑特权,然后向/从用户角色授予/撤销组角色几乎总是更好。有关的: