gpt4 book ai didi

postgresql - 根据当前用户组动态更改数据库 View

转载 作者:行者123 更新时间:2023-11-29 12:26:17 27 4
gpt4 key购买 nike

我们目前正在深入研究 Amazon Redshift 并测试不同的功能。

我们的基本要求之一是我们将定义不同的用户组,这些用户组又将被授予访问不同 View 的权限。

解决此问题的一种方法是为每个用户组单独实现一个 View 。但是,由于我们有很多用户组共享几乎完全相同的信息需求,我正在寻找一种在 Redshift 中更动态地实现这一点的方法。

例如,假设我有一个名为 users_london 的用户组和另一个名为 users_berlin 的用户组。两者都可以访问名为 v_employee_master_data 的 View ,其中包含列 employee_nameemployee_job_titleemployee_city。两组共享相同的信息范围,只有一个异常(exception) - employee_city 列。

本质上, View 应该根据当前登录的用户组对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 语句?

最佳答案

可以这样做:

  1. 获取当前用户

选择当前用户

  1. 找到它属于哪个组

从 pg_group 中选择 groname where current_user_id = any(grolist);

  1. 提取城市并将其大写:

select initcap(substring(groname from 'users_(.*)')) from pg_group where current_user_id = any(grolist);

现在您有了基于“用户”的城市。所以只需将它注入(inject) View

... WHERE employee_city = initcap(substring(groname from 'users_(.*)') ...

关于postgresql - 根据当前用户组动态更改数据库 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35149216/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com