【问题标题】:Snowflake Returning a Column in a CTE雪花返回 CTE 中的列
【发布时间】:2021-06-15 04:29:22
【问题描述】:

我有 2 个不同的数据库角色。我们称它们为“角色 A”和“角色 B”。

我有以下疑问:

with part_1 as (

select col_1
from table
where id  <= 100


)

select p1.col_1
from part_1 as p1;

使用“角色 A”,整个查询失败,但不是 CTE 的内部,我只是突出显示并运行它。

如果我切换到“角色 B”,我不会有任何问题。

有什么建议或意见吗?我不明白 2 个不同的角色怎么会产生不同的结果。

【问题讨论】:

  • 您的查询中没有“角色”、“A”或“B”。我对这个问题感到困惑。您指的是数据库角色吗?
  • 正确,在每个 RMDBS 中,您可以扮演各种角色(数据分析师、所有者等)。
  • 确切的错误信息是什么?失败时。
  • Col_1 不存在
  • 打错字了,我改正了。

标签: sql snowflake-cloud-data-platform roles


【解决方案1】:

大概是因为角色 A 没有对“表”的选择权限,但角色 B 有。

角色的全部意义在于赋予不同的用户不同的访问权限,因此这种行为既是预期的,也是期望的

【讨论】:

  • 我是这么想的,但是当我在角色 A 中突出显示 CTE 的内部时,我可以正常运行它。
【解决方案2】:

缺少一些权限差异,正如您所注意到的那样,两者似乎都在运行

using role role_a;

select col_1
from table
where id  <= 100;

using role role_b;

select col_1
from table
where id  <= 100;

所有工作都意味着两者都可以访问该表..

它是一个表格而不是一个视图?

select get_ddl('table','database.schema.table_name');

或者这对两个角色都有效

WITH part_1 AS (
    SLEECT col_1 FROM table
    WHERE id <= 100
)
select p1.*
from part_1 as p1;

在此之后我会问一个支持问题,因为这听起来很像一个错误,但要理解为什么需要支持才能深入了解实际情况。

【讨论】:

    猜你喜欢
    • 2022-06-14
    • 1970-01-01
    • 2022-11-11
    • 2021-12-23
    • 2021-08-10
    • 1970-01-01
    • 1970-01-01
    • 2023-02-13
    • 1970-01-01
    相关资源
    最近更新 更多