Таблица красного смещения невидима для владельца - PullRequest
0 голосов
/ 14 января 2020

Я создаю таблицу с суперпользователем (admin), и пытаюсь GRANT ALL и изменить владельца таблицы.

Я выполняю следующие операторы в Redshift, где (не superuser) john является членом группы developers (и только членом группы developers):

GRANT ALL ON users.addresses TO GROUP developers;
ALTER TABLE users.addresses OWNER TO john;

Я подтвердил, что у пользователя john есть выбор / вставка / разрешения на удаление / обновление users.addresses и является владельцем таблицы. Я также подтвердил, что у пользователя john есть USAGE в схеме users.

Однако, когда я вхожу как john, таблица просто не появляется. Когда я пытаюсь SELECT * FROM users.addresses, Redshift говорит, что таблица не существует.

Что мне здесь не хватает? Есть ли дополнительный уровень разрешений или безопасности в Redshift, который я не вижу? Я просмотрел документацию, но пока мне не повезло.

1 Ответ

0 голосов
/ 16 января 2020

Поскольку Redshift говорит, что таблица не существует, это указывает на то, что CREATE TABLE не фиксируется в базе данных, когда вы используете ее как учетную запись суперпользователя. Если вы отключитесь от имени учетной записи суперпользователя, а затем снова подключитесь и попытаетесь выполнить оператор SELECT для таблицы, вы получите ту же ошибку?

Попробуйте выполнить явный оператор COMMIT после создания таблицы, и затем попытайтесь сделать запрос, используя учетную запись не суперпользователя. Если используемый вами клиент переносит все запросы в блок транзакции, возможно, они не были зафиксированы до того, как вы подключились к учетной записи не суперпользователя.

Также для справки я выполнил в следующих запросах с включенной автоматической фиксацией не удалось воспроизвести описанную проблему:

-- Run as superuser account:
CREATE SCHEMA users;

CREATE TABLE users.addresses (
    user_id VARCHAR(8) ,
    user_address VARCHAR(512)
);

INSERT INTO users.addresses VALUES ('12345678', 'Address 1');

CREATE USER john WITH PASSWORD '********';

CREATE GROUP developers;

GRANT USAGE ON SCHEMA users TO GROUP developers;

ALTER GROUP developers ADD USER john;

GRANT ALL ON users.addresses TO GROUP developers;

ALTER TABLE users.addresses OWNER TO john;

-- Run as non-superuser account 'john':
SELECT *
FROM users.addresses;

-- Result Set:
-- user_id  user_address
-- 12345678 Address 1
...