【问题标题】:How can I grant & revoke specific rights from Postgresql users?如何授予和撤销 Postgresql 用户的特定权限?
【发布时间】:2017-09-17 12:41:20
【问题描述】:

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

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

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

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

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

-第四个/最后一个用户(名为 prof)必须只能从名为 mfc_dstdevoir 的表/em>。

为此,我使用了 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;

多亏了这两个脚本,我能够阻止名为 prof 的用户查看其他表,但我遇到的问题是名为 cfc、sec 和 prof 的用户仍然三个都能够创建表并 放下他们。

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

提前谢谢你

【问题讨论】:

    标签: sql database postgresql sql-grant


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-27
      • 2013-02-13
      • 2016-10-07
      • 1970-01-01
      • 2015-01-13
      • 2020-08-31
      • 1970-01-01
      • 2021-12-21
      相关资源
      最近更新 更多