首页 文章

如何从Postgresql用户授予和撤销特定权限?

提问于
浏览
1

我的任务是在一个虚拟机上托管网站的HTML和PHP文件,并在另一个虚拟机上设置Postgresql数据库 .

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

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

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

  • 第二个(名为 cfc )和第三个用户(名为 sec )必须仅对 mfc_dst 数据库的所有表具有 SELECTUPDATE 权限 .

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

为此,我使用了两个不同的脚本:

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 回答

  • 1

    默认情况下,所有Postgres用户也自动成为 public 角色的成员,该角色授予他们对 public 架构的所有权限 . 您可以使用删除 public 角色的权限

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

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

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

相关问题