我已获得 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对SEQUENCEs、对其本身的模式等具有类似的权利。
这WITH GRANT OPTION使用户myuser有权依次将GRANT分配给其他人的权利。
详细信息请参阅手册。
你也可能对此有兴趣ALTER DEFAULT PRIVILEGES。