我需要在 Impala 中实现基于用户 ID 的行级安全性。我现在遵循的方法是我有一个用户到角色的映射,并使用它来形成一个主查询,如下所示:
create view dervied_view as
select *, 1 as roleid from src_table where a = 1 and b = 2
union
select *, 2 as roleid from src_table where a = 1 and b = 3
...
...
然后,有另一个查询如下:
create view well_known_named_view as
select * from derived_view where roleid in
(select roleid from role_mapping table where userid = effective_user());
这样,每当用户登录时,他只需要查询众所周知的视图,而无需基于每个用户/角色创建视图。问题是这个查询在 Hue 中超时(这是它最常使用的地方),并且至少需要 10 分钟才能在 shell 中执行一个基本查询。有没有更好的方法来完成这项工作?