不可变的角色和权限

不可变权限对于限制本身可以管理权限的用户的行为非常有用。不可变角色对于提供作为 DBMS 永久部分的系统角色非常有用。

不可变权限和角色应仅在更改极少发生的情况下使用。它们被设计为难以修改,因此应谨慎进行更改(例如,当 DBMS 已通过其他方式隔离,并且可以可靠地防止未经授权的访问时)。通常,此类修改应在 DBMS 的调试阶段仅进行一次。

管理不可变角色和权限

在 DBMS 安全地与外部连接隔离后,请按照以下步骤管理不可变角色和权限

  1. 将配置设置 dbms.security.auth_enabled 更改为 false

  2. 重启 DBMS。

  3. 创建或删除不可变权限和角色的方式与常规权限和角色相同,但需要添加 IMMUTABLE 关键字。请参阅示例

  4. 将配置设置 dbms.security.auth_enabled 改回 true

  5. 重启 DBMS。

以这种方式创建的权限和角色现在作为 DBMS 的不可变部分出现。如果您想更改或删除它们,必须重复将 dbms.security.auth_enabled 设置为 false 的过程。

示例

以下示例演示如何使用 Cypher 管理不可变角色和权限。

限制可管理权限的用户的操作

为防止所有用户(包括拥有 PRIVILEGE MANAGEMENT 权限的用户)执行数据库管理,请将不可变权限附加到 PUBLIC 角色。PUBLIC 角色隐式且不可撤销地适用于所有用户。

  1. 请确保您已完成管理不可变角色和权限中的步骤 1 和 2。

  2. 运行以下命令以拒绝 PUBLIC 角色的 IMMUTABLE DATABASE MANAGEMENT 权限

    DENY IMMUTABLE DATABASE MANAGEMENT ON DBMS TO PUBLIC
  3. 验证 IMMUTABLE 关键字是否已添加到权限中

    SHOW PRIVILEGES WHERE IMMUTABLE
    表 1. 结果
    访问 操作 资源 角色 不可变

    "已拒绝"

    "database_management"

    "database"

    "*"

    "database"

    "PUBLIC"

    true

    行数:2

    结果显示,所有用户(包括 admin 用户)都被限制添加或删除权限。

  4. 请确保您已完成管理不可变角色和权限中的步骤 4 和 5。

创建不可更改的永久角色

您可以使用不可变角色创建永久的内置系统角色,即使拥有 ROLE MANAGEMENT 权限的用户也无法修改它们。

例如,您想创建一个 analyst 角色,该角色不能被删除、重命名,或更改其任何权限(即使是拥有 ROLE MANAGEMENTPRIVILEGE MANAGEMENT 权限的用户)。

  1. 请确保您已完成管理不可变角色和权限中的步骤 1 和 2。

  2. 创建一个不可变角色来持有不可变权限

    CREATE IMMUTABLE ROLE analyst
  3. 不可变地授予 MATCH 权限

    GRANT IMMUTABLE MATCH {*} ON GRAPH * ELEMENTS * TO analyst
  4. 请确保您已完成管理不可变角色和权限中的步骤 4 和 5。

    现在,即使拥有 ROLE MANAGEMENTPRIVILEGE MANAGEMENT 权限的用户也无法执行以下任何操作

    删除 analyst 角色
    DROP ROLE analyst
    撤销 analyst 角色的 MATCH 权限
    REVOKE MATCH {*} ON GRAPH * ELEMENTS * FROM analyst
    重命名 analyst 角色
    RENAME ROLE analyst TO dataReader

虽然不可变角色的组成(名称、存在、关联权限)是不可变的,但它们对用户的分配并非不可变。这意味着任何拥有 ROLE MANAGEMENT 权限的用户都可以将不可变角色授予或从用户那里撤销。

只有不可变权限(例如,上述示例中的 GRANT IMMUTABLE MATCH {*} ON GRAPH * ELEMENTS * TO analyst)才能分配给不可变角色。这是为了确保不可变角色及其所有权限是明确且完全不可变的。

© . All rights reserved.