我们正在深入研究Amazon Redshift并测试不同的功能。
我们的一个基本要求是,我们将定义不同的用户组,这些用户组将被授予对不同视图的访问权限。
解决此问题的一种方法是单独为每个用户组实现一个视图。但是,由于我们有很多用户组几乎完全相同的信息需求,我正在寻找一种在Redshift中更加动态地实现它的方法。
例如,假设我有一个名为 users_london 的用户组,另一个名为 users_berlin 的用户组。两者都可以访问名为 v_employee_master_data 的视图,其中包含 employee_name , employee_job_title 和 employee_city 列。 两个组共享相同的信息范围,但有一个例外 - 列 employee_city 。
实质上,视图应根据当前登录的用户组在 employee_city 列中针对特定值进行预过滤。
在SQL中 - 像这样:
对于用户组 users_london :
SELECT * FROM v_employee_master_data WHERE employee_city = 'London';
对于用户组 users_berlin :
SELECT * FROM v_employee_master_data WHERE employee_city = 'Berlin';
现在将连接重新连接到Amazon Redshift。底层数据库运行时是否提供了开箱即用的功能,以某种方式将当前记录的用户组捕获为全局变量的形式,并根据该变量的值更改SQL语句?
答案 0 :(得分:0)
可以这样做:
select current_user
select groname from pg_group where current_user_id = any(grolist);
select initcap(substring(groname from 'users_(.*)')) from pg_group where current_user_id = any(grolist);
现在您的城市基于"用户"。所以只需在视图中注入它
... WHERE employee_city = initcap(substring(groname from 'users_(.*)') ...