2017-09-17 132 views
1

我的任務是在一臺虛擬機上託管HTML &網站的PHP文件,並在另一臺虛擬機上設置Postgresql數據庫。如何授予和撤銷Postgresql用戶的特定權限?

我最近安裝了Postgresql,並且一直在使用官方的Postgresql文檔來學習如何創建數據庫,創建用戶並授予撤銷權限&。

在已經創建了一個名爲mfc_dst數據庫,我奉命創建4級型動物的用戶,這是我有一個問題:

-The第一用戶已被命名爲管理員,必須只有其他用戶比預先存在的用戶名爲postgres有無限的權利。

-The第二(名爲CFC)和第三用戶(名爲)必須僅具有SELECT上mfc_dst數據庫的所有表UPDATE特權。

- 和第四/最後一個用戶(名爲教授)必須只能在來自名爲mfc_dst數據庫查看命名表本分

要做到這一點,我用2個不同的腳本:

CREATEandGRANT.sql 

REVOKE ALL ON ALL TABLES IN SCHEMA public TO cfc; 
REVOKE ALL ON ALL TABLES IN SCHEMA public TO sec; 
REVOKE ALL ON ALL TABLES IN SCHEMA public TO prof; 

GRANT CONNECT ON DATABASE mfc_dst TO admin; 
GRANT CONNECT ON DATABASE mfc_dst TO cfc; 
GRANT CONNECT ON DATABASE mfc_dst TO sec; 
GRANT CONNECT ON DATABASE mfc_dst TO prof; 

GRANT SELECT,UPDATE 
ON ALL TABLES IN SCHEMA public 
TO cfc; 

GRANT SELECT,UPDATE 
ON ALL TABLES IN SCHEMA public 
TO sec; 

GRANT SELECT ON devoir TO prof; 

,這等一個:

REVOKE.sql 

REVOKE ALL ON TABLE professeur FROM PUBLIC; 
REVOKE ALL ON TABLE reserver FROM PUBLIC; 
REVOKE ALL ON TABLE salle FROM PUBLIC; 
REVOKE ALL ON TABLE semaine FROM PUBLIC; 
REVOKE ALL ON TABLE surveiller FROM PUBLIC; 

由於這2個腳本,我能夠防止評爲教授的用戶看到其他表,但我的問題是,名爲cfc,秒和教授的用戶仍然都能夠創建表和下降他們。

是否有可能知道如何防止他們這樣做,並且如果可能,將來會阻止新創建的用戶擁有這些權限/特權?

預先感謝您

回答

1

所有Postgres的用戶則也自動public角色,授予他們在public模式中的所有權限的成員。你可以用

revoke all on database mfc_dst from public; 
revoke all on schema public from public; 

另外請從public角色權限,考慮定義一個新的模式爲您的數據表,這樣就可以發出grant報表,而無需與public作用進一步處理。如果您這樣做,還可以設置搜索路徑以包含自定義架構並排除public架構。

另外,您可能希望爲cfcsec用戶創建組角色,併爲該角色分配權限,而不是單獨向用戶分配權限。這將使未來的維護更容易。

+0

瞭解,非常感謝! –