【问题标题】:Redshift Table Invisible to Owner所有者不可见的 Redshift 表
【发布时间】:2020-01-13 22:21:54
【问题描述】:

我正在使用超级用户(管理员)创建一个表,并尝试GRANT ALL 并更改表的所有者。

我在 Redshift 中运行以下语句,其中(非超级用户)johndevelopers 组的成员(并且只是 developers 组的成员):

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

我已确认用户johnusers.addresses 具有选择/插入/删除/更新权限,并且是该表的所有者。我还确认用户 johnusers 架构上有 USAGE

但是,当我以john 登录时,表格根本不会出现。当我尝试SELECT * FROM users.addresses 时,Redshift 说该表不存在。

我在这里缺少什么? Redshift 中是否有我没有看到的额外权限或安全层?我浏览了文档,但到目前为止还没有多少运气。

【问题讨论】:

  • 用户 john 的 pg_user 是什么样的?
  • 可能是因为您正在授予对表 users.addresses 的访问权限,但查询使用表 users.permissions
  • 我的错误@EdgarsT。 - 修正了 SELECT 查询是正确的。

标签: sql permissions amazon-redshift grant


【解决方案1】:

因为 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-03
    • 1970-01-01
    • 2022-08-09
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 2023-01-18
    相关资源
    最近更新 更多