Postgresql

PostgreSQL 中的操作級授權

  • November 10, 2021

我正在開發一個分析應用程序,它提供 Postgres DB 中數據倉庫的多層次視覺化。它的要求之一是不同的使用者應該對數據具有不同的訪問權限。例如,一些使用者應該只從特定表中提取指標 ( counts, avgs, sums),而其他使用者可以將數據下鑽到列級別。

例子:

employee table

id    | name   | salary
-------+--------+--------+
    1 | josé   |  20000 
    2 | joão   |  80000 
    3 | tiago  |  60000 

user 1 (can drill down)
------
=> select name from employee where id = 1 
=> josé

user 2 (can read only aggregate data)
------
=> select avg(salary) from employee
=> 53333.3333333
=> select name from employee where id = 1 
=> ERROR

我認為任何 RDBMS 都不會原生提供。但我想知道是否有任何工具可以幫助我完成此授權級別,而無需在應用程序級別對其進行硬編碼。

您可以使用視圖執行此操作。視圖的列必須命名,不能在函式形式中指定。

create view employee_agg as select count(*), avg(salary) from employee;
grant SELECT ON employee_agg TO user2;

現在作為使用者2:

select * from employee;
ERROR:  permission denied for table employee

select * from employee_agg;
count |         avg         
-------+---------------------
    3 | 53,333.333333333336

有內置機制行安全策略。在此處輸入連結描述

引用自:https://dba.stackexchange.com/questions/302315