Снежинка Возвращает столбец в CTE

#sql #snowflake-cloud-data-platform #roles

Вопрос:

У меня есть 2 разные роли в базе данных. Давайте назовем их «Ролью А» и «Ролью Б».

У меня есть следующий запрос:

 with part_1 as (

select col_1
from table
where id  <= 100


)

select p1.col_1
from part_1 as p1;
 

Используя «Роль А», весь запрос завершается неудачно, но не внутри CTE, я просто выделяю это и запускаю его.

Если я переключусь на «Роль В», у меня не будет никаких проблем с этим.

Есть какие-нибудь предложения или советы? Я не понимаю, как 2 разные роли могут давать разные результаты.

Комментарии:

1. В вашем запросе нет «роли», «А» или «В». Я сбит с толку этим вопросом. Вы имеете в виду роль базы данных?

2. Правильно, в каждом RMDBS вы можете играть различные роли (аналитик данных, Владелец и т. Д.).

3. каково точное сообщение об ошибке? на провал.

4. Col_1 не существует

5. Это опечатка, я ее исправил.

Ответ №1:

Предположительно, потому, что у роли A нет прав выбора в «таблице», но у роли B есть.

Весь смысл ролей состоит в том, чтобы предоставить разным пользователям разные права доступа, поэтому такое поведение является как ожидаемым, так и желательным

Комментарии:

1. Это то, что я думал, но когда я выделяю внутреннюю часть 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;
 

после этого я бы задал вопрос в службу поддержки, потому что все это звучит скорее как ошибка, но для понимания того, почему потребуется поддержка, чтобы разобраться в фактических данных.