如何实现对亚马逊 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)?的主要内容,如果未能解决你的问题,请参考以下文章

如何将oracle sql复制到亚马逊redshift

sql 亚马逊Redshift日历表

如何使用 Amazon Redshift 中的临时表列更新现有表中的列?

来自oracle sql的等效redshift sql

如何让现有用户成为 AWS Redshift 中的超级用户

如何在 AMAZON REDSHIFT 中将 userip 转换为整数