假设我有一个包含三列的用户表,public_data,private_data和system_data,我有三个名为postgres,authenticated_user和visitor的角色.
postgres是超级用户,可以访问所有数据(当然包括system_data)
authenticated_user应该能够访问每个用户的public_data,他们自己的private_data,但不能访问system_data
访问者只能访问每个用户的public_data
如何设置表格,角色,授权和策略以完成上述操作?
这不是一个声明性的行安全性问题,因为它听起来像是要返回所有行,但根据当前用户显示不同的列值
根据您的评论,您可以使用每种用户类型的不同查询.我没有看到使用private_data的case语句的方法
create table users ( id int primary key,owner name not null,public_data text,private_data text,system_data text ); --these should probably be groups,not users: create user visitor; create user authenticated_user; grant visitor to authenticated_user; -- will inherit visitors permissions grant select(id,owner,public_data) on users to visitor; grant select(private_data) on users to authenticated_user; insert into users (id,private_data,system_data) values (1,'visitor','public','private to visitor','system'); insert into users (id,system_data) values (2,'authenticated_user','private to authenticated_user','system'); set role visitor; select id,public_data from users; set role authenticated_user; select id,case when owner=current_user then private_data else null end as private_data from users; set role postgres; select * from users;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。