Pet*_*zar 7 postgresql privileges grant
我有3个角色:超级用户,poweruser和用户.我有表"data"和函数data_select和data_insert.
现在我想定义,只有超级用户才能访问表"数据".Poweruser和用户不能直接访问表"数据",而只能通过函数访问.
用户只能运行data_select函数,poweruser可以同时运行data_select和data_insert.
那么我就可以创建用户alice,bob,...并继承用户或poweuser的权限.
这实际上是否可以实现?我在第二天与这个战斗,没有到达任何地方.
感谢您的时间.
是的,这是可行的.
默认情况下superuser,"超级用户"可能是实际postgres的.我将普通用户的角色重命名为usr,因为这user是一个保留字 - 不要将它用作标识符.
CREATE ROLE usr;
CREATE ROLE poweruser;
GRANT usr TO poweruser; -- poweruser can do everything usr can.
CREATE ROLE bob PASSWORD <password>;
GRANT poweruser TO bob;
CREATE ROLE alice PASSWORD <password>;
GRANT usr TO alice;
REVOKE ALL ON SCHEMA x FROM public;
GRANT USAGE ON SCHEMA x TO usr;
REVOKE ALL ON TABLE x FROM public;
REVOKE ALL ON TABLE y FROM public;
CREATE FUNCTION
...
SECURITY DEFINER;
REVOKE ALL ON FUNCTION ... FROM public;
GRANT EXECUTE ON FUNCTION a TO usr;
GRANT EXECUTE ON FUNCTION b TO poweruser;
Run Code Online (Sandbox Code Playgroud)
或者您可以创建守护程序角色,无需登录即可拥有这些功能并在表上保留相应的权限.那会更安全.
如果你要走这条路,你会喜欢 ALTER DEFAULT PRIVILEGES(PostgreSQL 9.0引入).这个相关答案的更多细节.
请阅读手册中的" 安全编写SECURITY DEFINER函数 "一章.
| 归档时间: |
|
| 查看次数: |
2689 次 |
| 最近记录: |