PostgreSQL创建仅能查询指定视图、无法访问底层表的只读用户
实现仅能查询指定视图的PostgreSQL用户
没问题,我来帮你一步步完成这个需求——创建一个只能查询rv_system_event视图、完全无法操作底层system_event表的用户view_reader。以下是具体操作步骤:
1. 创建用户view_reader
首先创建带登录权限的用户,记得把示例密码替换成你自己的安全密码:
CREATE USER view_reader WITH PASSWORD 'your_strong_password_here';
2. 授予数据库连接权限
用户需要先获得连接payloads数据库的权限,否则连库都进不去:
GRANT CONNECT ON DATABASE payloads TO view_reader;
3. 授予Schema使用权限
因为视图在payloads schema下,用户必须拥有该schema的使用权限才能访问里面的视图:
GRANT USAGE ON SCHEMA payloads TO view_reader;
4. 授予视图的查询权限
这是核心操作,只给用户rv_system_event视图的SELECT权限:
GRANT SELECT ON payloads.rv_system_event TO view_reader;
额外说明:确保用户无底层表权限
默认情况下,新建用户不会拥有system_event表的任何权限(读、写都没有),所以不需要额外操作。如果之前该用户意外继承了相关权限,可以执行以下语句彻底收回:
REVOKE ALL ON payloads.system_event FROM view_reader;
验证权限是否生效
你可以用view_reader账号登录数据库,执行以下命令验证效果:
-- 正常查询视图(应该返回结果) SELECT * FROM payloads.rv_system_event; -- 尝试查询底层表(应该报错:权限不足) SELECT * FROM payloads.system_event; -- 尝试写入底层表(同样报错:权限不足) INSERT INTO payloads.system_event VALUES (...);
内容的提问来源于stack exchange,提问作者Varun Verma
相关产品推荐
相关产品推荐

