如何实现对亚马逊 Redshift 的原始 sql 访问的行级安全性 (RLS)?
Posted
技术标签:
【中文标题】如何实现对亚马逊 Redshift 的原始 sql 访问的行级安全性 (RLS)?【英文标题】:How to implement row level security (RLS) for raw sql access to amazon Redshift? 【发布时间】:2019-09-30 01:41:56 【问题描述】:过去,我使用安全策略和谓词函数在 Oracle 和 SQL Server 数据库中实现了行级安全性。
现在我的组织正在迁移到 Amazon Redshift 作为数据仓库,寻找有关在 Redshift 中实施 RLS 以供用户访问原始 sql 的方法的输入。
示例: 表 A 包含许多地区的数据。 表中的“REGION”列包含该行对应的区域。 在 user_setup 表中,每个用户都有用户应该有权访问的区域列表。
表 A:
账户ID余额区域
1100 澳元
2 120 IND
3 50 欧元
表用户设置:
用户区域
Usr1 澳大利亚
Usr2 澳大利亚
Usr2 欧元
预期结果: 如果 Usr1 执行 select * from A; 输出应该是:
账户ID余额区域
1100 澳元
如果 Usr2 执行 select * from A; 输出应该是:
账户ID余额区域
1100 澳元
3 50 欧元
如果 Usr3 执行 select * from A; 输出应该是: 没有返回行。
【问题讨论】:
【参考方案1】:我猜一年后你找到了解决方案,但以防万一......
在 AWS Redshift 中实施基于行的安全性(或基于行的访问控制)并不简单,但可以通过以下方式实现:
-
添加具有所需权限映射的表。
添加一个视图,该视图根据该表以及您要限制权限的表过滤 CURRENT_USER。
撤销对表本身的访问权限,同时授予对您创建的视图的访问权限。
您可以在我写的Redshift security guide 中找到概念证明。
【讨论】:
以上是关于如何实现对亚马逊 Redshift 的原始 sql 访问的行级安全性 (RLS)?的主要内容,如果未能解决你的问题,请参考以下文章