我正在使用超级用户(管理员)创建表,并尝试GRANT ALL
并更改表的所有者。
[我在Redshift中运行以下语句,其中(非超级用户)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中额外的权限或安全层吗?我仔细阅读了文档,但到目前为止运气不高。
因为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