创建有权在 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】:回顾一下:
schemauser341
- 包含源表,用户不应该能够从此模式中的表中进行选择。您还想隐藏它对用户
tst_user_schema
- 包含用户应该能够从中选择的视图。
查看您的GRANT
语句,您不必要地授予用户SELECT
对ALL 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 中查看的用户的主要内容,如果未能解决你的问题,请参考以下文章