我怎样才能授予&从Postgresql用户撤消特定权限?

时间:2017-09-17 12:41:20

标签: sql database postgresql grant

我的任务是主持HTML&一个虚拟机上的网站的PHP文件,以及在另一个虚拟机上设置Postgresql数据库。

我最近安装了Postgresql,并且一直在使用官方Postgresql文档来学习如何创建数据库,创建用户和授予&撤销权利。

创建了名为 mfc_dst 的数据库后,我被命令创建4个不同的用户,这就是我遇到问题的地方:

- 第一个用户必须被命名为admin,并且必须是除了名为 postgres 的预先存在的用户之外的唯一其他用户才能拥有无限制的权限。

- 第二个(名为 cfc )和第三个用户(名为 sec )必须只有 SELECT mfc_dst 数据库的所有表格上的 UPDATE 权限。

- 第四个/最后一个用户(名为 prof )必须只能从名为 mfc_dst <的数据库中查看名为 devoir 的表/ EM>

为实现这一目标,我使用了两种不同的脚本:

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;

感谢这两个脚本,我能够阻止名为prof的用户看到其他表,但我遇到的问题是名为cfc,sec和prof的用户仍然都是三个能够创建表并且 drop 他们。

是否有可能知道如何阻止他们这样做,如果可能的话,将来阻止新创建的用户拥有这样的权利/特权?

提前谢谢

1 个答案:

答案 0 :(得分:1)

所有Postgres用户也自动成为public角色的成员,授予他们public架构的所有权限。您可以使用

public角色中删除权限
revoke all on database mfc_dst from public;
revoke all on schema public from public;

此外,请考虑为数据表定义新架构,以便您可以发出grant语句,而无需进一步处理public角色。如果执行此操作,您还可以设置搜索路径以包含自定义架构并排除public架构。

此外,您可能希望为cfcsec用户创建一个组角色,并为该角色分配权限,而不是单独为用户分配权限。这将使未来的维护更容易。