不可变的角色和权限
不可变权限对于限制本身可以管理权限的用户的行为非常有用。不可变角色对于提供作为 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
虽然不可变角色的组成(名称、存在、关联权限)是不可变的,但它们对用户的分配并非不可变。这意味着任何拥有 |
只有不可变权限(例如,上述示例中的 |