2017-09-17 82 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

了解,非常感谢! –