不可变的角色和权限
不可变权限对于限制本身可以管理权限的用户的行为非常有用。不可变角色对于提供作为 DBMS 永久部分的系统角色非常有用。
|
不可变权限和角色应仅在更改极少发生的情况下使用。它们被设计为难以修改,因此应谨慎进行更改(例如,当 DBMS 已通过其他方式隔离,并且可以可靠地防止未经授权的访问时)。通常,此类修改应在 DBMS 的调试阶段仅进行一次。 |
管理不可变角色和权限
在 DBMS 安全地与外部连接隔离后,请按照以下步骤管理不可变角色和权限
-
将配置设置
dbms.security.auth_enabled更改为false。 -
重启 DBMS。
-
创建或删除不可变权限和角色的方式与常规权限和角色相同,但需要添加
IMMUTABLE关键字。请参阅示例。 -
将配置设置
dbms.security.auth_enabled改回true。 -
重启 DBMS。
以这种方式创建的权限和角色现在作为 DBMS 的不可变部分出现。如果您想更改或删除它们,必须重复将 dbms.security.auth_enabled 设置为 false 的过程。
示例
以下示例演示如何使用 Cypher 管理不可变角色和权限。
限制可管理权限的用户的操作
为防止所有用户(包括拥有 PRIVILEGE MANAGEMENT 权限的用户)执行数据库管理,请将不可变权限附加到 PUBLIC 角色。PUBLIC 角色隐式且不可撤销地适用于所有用户。
-
请确保您已完成管理不可变角色和权限中的步骤 1 和 2。
-
运行以下命令以拒绝
PUBLIC角色的IMMUTABLE DATABASE MANAGEMENT权限DENY IMMUTABLE DATABASE MANAGEMENT ON DBMS TO PUBLIC -
验证
IMMUTABLE关键字是否已添加到权限中SHOW PRIVILEGES WHERE IMMUTABLE表 1. 结果 访问 操作 资源 图 段 角色 不可变 "已拒绝""database_management""database""*""database""PUBLIC"true行数:2
结果显示,所有用户(包括
admin用户)都被限制添加或删除权限。 -
请确保您已完成管理不可变角色和权限中的步骤 4 和 5。
创建不可更改的永久角色
您可以使用不可变角色创建永久的内置系统角色,即使拥有 ROLE MANAGEMENT 权限的用户也无法修改它们。
例如,您想创建一个 analyst 角色,该角色不能被删除、重命名,或更改其任何权限(即使是拥有 ROLE MANAGEMENT 和 PRIVILEGE MANAGEMENT 权限的用户)。
-
请确保您已完成管理不可变角色和权限中的步骤 1 和 2。
-
创建一个不可变角色来持有不可变权限
CREATE IMMUTABLE ROLE analyst -
不可变地授予
MATCH权限GRANT IMMUTABLE MATCH {*} ON GRAPH * ELEMENTS * TO analyst -
请确保您已完成管理不可变角色和权限中的步骤 4 和 5。
现在,即使拥有
ROLE MANAGEMENT和PRIVILEGE MANAGEMENT权限的用户也无法执行以下任何操作删除analyst角色DROP ROLE analyst撤销analyst角色的MATCH权限REVOKE MATCH {*} ON GRAPH * ELEMENTS * FROM analyst重命名analyst角色RENAME ROLE analyst TO dataReader
|
虽然不可变角色的组成(名称、存在、关联权限)是不可变的,但它们对用户的分配并非不可变。这意味着任何拥有 |
|
只有不可变权限(例如,上述示例中的 |