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

All redshift external schemas showing all the tables. How to limit visibility of external tables in an external schema?

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

现在,我想创建另一个 外部模式 (比如 sch B),我想在其中创建一些其他 外部表 。我的目的是从管理员用户创建这些模式,并使用 GRANT USAGE ON.

为不同的用户提供对不同模式的访问权限

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

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

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

你 运行 陷入了很多人 运行 的困惑。

外部模式的命名非常错误 - 它根本不像模式。

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

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

如果您希望模式的内容只在一个模式中可见,您需要为每个模式创建一个新的外部数据库。请注意,似乎有太多的外部数据库(我还没有正确调查,但它看起来像)使系统 tables 携带外部 table 信息非常 慢 - 几十分钟 return 一个查询。我从来没有为 SQL 使用 GUI 工具,但我可以想象他们正在查询这个系统 table,这对他们来说可能是个问题。