我已获得 postgres 数据库的凭据,并被告知它有权创建新用户并授予他们访问表的权限。这句话只对了一半。
我想创建一个新用户:
create user foo login encrypted password 'bar';
commit;
Run Code Online (Sandbox Code Playgroud)
还行吧。现在我尝试向该用户授予对所选表的某些特定访问权限:
grant select, insert, update on table baz to foo;
Run Code Online (Sandbox Code Playgroud)
回应是[42501] ERROR: permission denied for relation baz
。
似乎我被授予的该用户无法从我希望授予访问权限的表中进行选择。select * from baz
还给出了 42501 错误。
该查询select distinct(grantor) from information_schema.role_table_grants;
返回一个用户名(我们称之为“bob”)。我应该与鲍勃讨论获得我需要的权限吗?
据猜测,您的用户不是表的所有者,也没有被授予对它们的权限,WITH GRANT OPTION
因此可以委派它们。
数据库管理员必须执行以下操作:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO myuser WITH GRANT OPTION
Run Code Online (Sandbox Code Playgroud)
并且可能还应该GRANT
对SEQUENCE
s、对其本身的模式等具有类似的权利。
这WITH GRANT OPTION
使用户myuser
有权依次将GRANT
分配给其他人的权利。
详细信息请参阅手册。
你也可能对此有兴趣ALTER DEFAULT PRIVILEGES
。