關于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的使用者有幫助。