天天看點

PostgreSQL 批量權限 管理方法對整個schema的對象進行權限管理如何設定使用者建立的對象的預設權限如何定制批量管理權限

關于postgresql的邏輯架構和權限體系,可以參考

<a href="https://yq.aliyun.com/articles/41210">https://yq.aliyun.com/articles/41210</a>

本文将給大家介紹一下如何批量管理表,視圖,物化視圖的權限。

以及如何管理預設權限,批量賦予schema的權限。

postgresql 從9.0開始就提供了比較友善的對整個schema的指定對象賦權給目标用的文法。

<a href="http://www.postgresql.org/docs/9.5/static/sql-grant.html">http://www.postgresql.org/docs/9.5/static/sql-grant.html</a>

例子

将schema digoal下的所有表的select,update權限賦予給test使用者。

注意

如果digoal.*中包含了非目前使用者的表,并且目前使用者非超級使用者,并且目前使用者沒有這些表的select,update的with grant option權限。将報錯。

換句話說,如果要確定這個賦權操作萬無一失,可以選擇使用超級使用者來執行。

将schema digoal下的所有表的select,update權限從test使用者回收。

在對整個schema下的所有對象的權限管理完後, 别忘記了在對象之上,還需要對schema、database、instance進行相應的賦權。

另一個問題,如何設定使用者建立的對象的預設權限?

在postgresql 9.0以後新加的文法:

<a href="http://www.postgresql.org/docs/9.5/static/sql-alterdefaultprivileges.html">http://www.postgresql.org/docs/9.5/static/sql-alterdefaultprivileges.html</a>

例如

例子:

将digoal使用者未來在public下面建立的表的select,update權限預設賦予給test使用者.

将test使用者未來在public,digoal下面建立的表的select,update權限預設賦予給digoal使用者.

檢視已經賦予的預設權限

将"指定使用者" owne 的表、視圖、物化視圖的"指定權限"賦予給"指定使用者",并排除"指定對象"

這個需求需要寫一個函數來完成,如下

将digoal使用者的所有表(除了'public.test'和'public.abc')的select, update權限賦予給test使用者.

從 test 使用者回收digoal使用者的所有表(除了'public.test'和'public.abc')的update權限.

希望這個例子對postgresql的使用者有幫助。