创建有权在 redshift 中查看的用户

Posted

技术标签:

【中文标题】创建有权在 redshift 中查看的用户【英文标题】:Create user with access to view in redshift 【发布时间】:2019-07-10 18:21:55 【问题描述】:

我正在从 mysql ec2 实例中提取数据到 s3 存储桶,然后在 redshift 中创建视图。我想创建只能查询和查看在 Redshift 中专门为他们创建的某些视图的数据库用户。下面的示例代码用于创建用户、查看和授予访问权限。我遇到的问题是我还必须授予对创建视图的基础架构的访问权限,这意味着用户可以查看和查询该架构中的表。用户还可以看到数据库中的其他模式,甚至是他们无法查询的模式。有没有办法只授予用户特定视图,并使其看不到他们无权访问的其他模式?

代码:

--create schema
create schema tst_user_schema;

--create view in schema
create view tst_user_schema.inventory_report_customer as (
  select * from user341.inventory_report_customer
  )
with no schema binding;


--creating user
CREATE USER tstuser PASSWORD 'tstPassword';

--grant access
GRANT USAGE ON SCHEMA tst_user_schema TO tstuser;

--grant read access to all tables in schema
GRANT SELECT ON ALL TABLES IN SCHEMA tst_user_schema TO tstuser;

--grant access
GRANT USAGE ON SCHEMA user341 TO tstuser;

--grant read access to all tables in schema
GRANT SELECT ON ALL TABLES IN SCHEMA user341 TO tstuser;


--grant access
GRANT USAGE ON SCHEMA tst_user_schema TO tstuser;

--grant read access to all tables in schema
GRANT SELECT ON ALL TABLES IN SCHEMA tst_user_schema TO tstuser;

【问题讨论】:

【参考方案1】:

回顾一下:

schema user341 - 包含源表,用户不应该能够从此模式中的表中进行选择。您还想隐藏它对用户 tst_user_schema - 包含用户应该能够从中选择的视图。

查看您的GRANT 语句,您不必要地授予用户SELECTALL TABLES IN SCHEMA user341 的权限。对于工作的视图,您只需要在该架构上GRANT USAGE

所以REVOKE 那些权限,用户应该不能选择。

REVOKE SELECT ON ALL TABLES IN SCHEMA user341 FROM tstuser;

提示:为了轻松测试权限,您可以使用SET SESSION AUTHORIZATION 指令以tstuser 身份启动会话,然后测试允许哪些语句,哪些不允许。

SET SESSION AUTHORIZATION tstuser

关于架构可见性 - 遗憾的是,无法隐藏或禁止用户查看所有架构中的所有表和列。只能限制对数据的访问。

【讨论】:

它不适用于 Redshift Spectrum 的视图。来自文档:您还应该确保后期绑定视图的所有者对引用的对象具有选择权限docs.aws.amazon.com/redshift/latest/dg/…

以上是关于创建有权在 redshift 中查看的用户的主要内容,如果未能解决你的问题,请参考以下文章

redshift 更改 udf 更改所有者

Redshift 表所有权和删除查询

如何使用 LOOP 撤销访问权限 - redshift

Redshift 查看所有模式中的所有表

TFS 2010 权限。所有用户都有权

如何在 Kafka 中进行转换(PostgreSQL-> Red shift )