digoal
2016-11-14
postgresql , role , 角色 , membership , inherit , 权限继承
在数据库中,如果你想把a用户创建的对象权限赋予给b用户,或者其他用户。
通常我们会对需要赋权的对象使用grant的语法来赋权。
但是这种方法比较繁琐,因为需要对每个对象,每一组需要的权限进行赋权。
如果你需要整个a用户所有对象的权限,以及它将来创建的对象的所有权限,有没有好的方法呢?
没错,你一定会想到role来管理。
例子
数据库有一个a 用户,创建了一些对象,需求是把a 创建的对象,自动赋予给b 用户。
如果b用户为noinherit的,那么需要set role才能切换到对应的role.
另一种加入member的方法是在创建角色时加入,可以一次指定多个.
与sql标准一样,加了with admin option 则允许被授予的用户继续将权限授予给其他人。
使用角色继承来管理有些时候还是不能满足业务需求,因为业务可能只是想把少量的权限给其他用户,而不是所有权限。
例如,使用角色继承的方法是比较危险的,被授予权限的用户,可以删除对象。
如果只想要a用户将来创建的所有表的查询权限,怎么做呢?
<a href="https://www.postgresql.org/docs/9.6/static/sql-alterdefaultprivileges.html">https://www.postgresql.org/docs/9.6/static/sql-alterdefaultprivileges.html</a>
<a href="https://www.postgresql.org/docs/9.6/static/sql-createrole.html">https://www.postgresql.org/docs/9.6/static/sql-createrole.html</a>
<a href="https://www.postgresql.org/docs/9.6/static/sql-grant.html">https://www.postgresql.org/docs/9.6/static/sql-grant.html</a>