天天看点

用好PostgreSQL role membership来管理继承组权限

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>