显示所有表的所有红移外部模式。如何限制外部模式中外部表的可见性?

Posted

技术标签:

【中文标题】显示所有表的所有红移外部模式。如何限制外部模式中外部表的可见性?【英文标题】:All redshift external schemas showing all the tables. How to limit visibility of external tables in an external schema? 【发布时间】:2021-05-19 15:39:26 【问题描述】:

我有一个 AWS redshift 集群(比如集群 A)和一个数据库(比如 db A)。我创建了一个 external schema(比如 sch A)并在其中创建了几个 external 表,它们的数据在 s3 中。

现在,我想创建另一个外部架构(比如sch B),我想在其中创建一些其他外部表。我的意图是从管理员用户创建这些架构,并使用GRANT USAGE ON 为单独的用户提供对单独架构的访问权限。

但是,在创建 sch B 之后,我发现我在 sch A 中创建的所有表都是可见的并且可以查询。

关于为什么会发生这种情况以及如何防止这种情况的任何想法。请提出建议。

注意-我创建了具有相同 IAM 角色的 外部架构,该角色具有读取数据所在的 s3 存储桶的策略。我认为这不是问题。

【问题讨论】:

【参考方案1】:

你遇到了很多人都会遇到的困惑。

一个外部架构被严重错误命名 - 它根本不像一个架构。

外部架构是并且只是一个指向外部数据库的指针。外部表元数据存储在该外部数据库中。

您可以有任意数量的外部架构指向同一个外部数据库,当您使用任何这些外部架构创建表时,表元数据将被写入外部架构指向的外部数据库 - 这意味着,当然,它会通过所有其他外部模式被看到,因为它们都指向同一个外部数据库。

如果您希望架构的内容仅在一个架构中可见,则需要为每个架构创建一个新的外部数据库。请注意,拥有太多外部数据库似乎(我还没有正确调查,但看起来确实如此)会使携带外部表信息的系统表非常变慢 - 数十分钟才能返回查询.我从不使用 SQL 的 GUI 工具,但我可以想象他们正在查询这个系统表,这对他们来说可能是个问题。

【讨论】:

感谢您的见解。这说明了一切。

以上是关于显示所有表的所有红移外部模式。如何限制外部模式中外部表的可见性?的主要内容,如果未能解决你的问题,请参考以下文章

如何在红移光谱中创建一个外部表,其中文件位置每天都会改变?

如何为红移光谱中的嵌套 Parquet 类型创建外部表

我有啥方法可以按表级别限制对 Redshift 外部模式的访问?

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

从 AWS Glue 表到 RedShift Spectrum 外部表的日期字段转换

如何检测外部显示器是不是在镜像中或通过命令扩展?