如何根据用户查询数据在视图中设置动态“位置”?
Posted
技术标签:
【中文标题】如何根据用户查询数据在视图中设置动态“位置”?【英文标题】:How to set a dynamic "where" in a view based on the user querying data? 【发布时间】:2019-08-14 16:45:27 【问题描述】:我需要创建一组视图,具有选择权限的数据库用户将在其中查询数据,但我想创建一个通用视图,因此如果其他用户想查询相同的数据,我不需要创建基于他们的“user_id”的更多视图。一个例子是:
CREATE OR REPLACE VIEW user_data AS SELECT * FROM users JOIN something WHERE user_id = ?
有没有什么办法可以设置,如果查询数据的数据库用户是“db_user1”,那么上面select的视图会使用1
作为user_id
进行查询?如果数据库用户是db_user2
,那么where user_id
会被设置为2?
【问题讨论】:
参数化视图函数Pass In “WHERE” parameters to PostgreSQL View? 【参考方案1】:对于这个特定的用例,您可以做一些简单的事情:
create or replace view user_data AS
select * from users
where user_id = (select substring(current_user, length(current_user))::int);
但是,如果用户名的结尾不是可以转换为 int 的值,则会返回错误。
您可能希望研究行级安全性以获得更强大和可配置的东西。
【讨论】:
以上是关于如何根据用户查询数据在视图中设置动态“位置”?的主要内容,如果未能解决你的问题,请参考以下文章