0

我正在从 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;
4

1 回答 1

2

回顾一下:

  • 架构user341- 包含源表,用户不应该能够从此架构中的表中进行选择。您还想从用户那里隐藏
  • tst_user_schema- 包含用户应该能够从中选择的视图。

查看您的GRANT陈述,您授予用户不必要SELECT的权限ALL TABLES IN SCHEMA user341。要使视图工作,您只需要GRANT USAGE在该架构上。

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

REVOKE SELECT ON ALL TABLES IN SCHEMA user341 FROM tstuser;

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

SET SESSION AUTHORIZATION tstuser

关于模式可见性 - 不幸的是,没有办法隐藏或禁止用户查看所有模式中的所有表和列。只能限制对数据的访问。

于 2019-07-11T05:45:59.820 回答