#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;
после этого я бы задал вопрос в службу поддержки, потому что все это звучит скорее как ошибка, но для понимания того, почему потребуется поддержка, чтобы разобраться в фактических данных.