身份验证与授权
本节介绍 Neo4j 身份验证与授权方面的重大更改和弃用。
删除用于身份验证与授权的平面文件
Neo4j 3.x 在平面文件中管理身份验证与授权。
Neo4j 4.0 引入了一个复杂的安全模型,该模型存储在 system
图中,并维护在一个名为 system
数据库的特殊数据库中。auth 和 roles 文件的内容将自动迁移到 system
数据库。如果您将多个 Neo4j 3.5 部署中的多个数据库合并在一起或升级集群,则必须在迁移之前手动合并 auth 和 role 文件。
neo4j-admin
命令 set-initial-password
和 set-default-admin
在 4.0 版本中继续有效,并写入与 3.5 版本相同的文件。在新版本 Neo4j 安装后首次启动时,将考虑这些文件中的任何内容。
命令 |
基于角色的访问控制
Neo4j 3.1 引入了基于角色的访问控制概念。可以创建用户并将其分配到角色,以控制他们是否可以读取、写入和管理数据库。在 Neo4j 4.0 中,通过添加特权(privileges),此模型得到了显著增强,特权是定义用户权利的底层访问控制规则。
迁移后,仍可以为每个数据库配置不同的安全设置,但这需要通过在迁移后授予特定于数据库的特权和角色来管理。3.5 中内置的角色仍然存在,但在迁移后将适用于所有数据库,除非使用新的安全管理命令明确修改。有关管理数据库特定角色和特权能力的更多详细信息,请参阅Cypher® 手册 4.0 → 管理。
集群的不同实例上不再可能拥有不同的安全特权。整个集群共享使用 Cypher 管理命令在 system
数据库中配置的特权。实际上,这意味着用户无论访问集群中的哪个服务器都拥有相同的特权。
已弃用和已删除的安全存储过程
Neo4j 3.x 中用于用户管理的内置安全存储过程 dbms.security
在 4.x 中已弃用。如果您仍想使用它们,它们必须针对 system
数据库运行,并且不能后跟 YIELD
。
有两种重写代码和例程以管理身份验证与授权的方法。
-
(推荐) 使用 xref: version-4/migration/surface-changes/auth.adoc#convert-security-procedures-table[转换表] 将存储过程重写为相应的 Cypher 管理命令。所有管理命令都必须针对
system
数据库执行。当使用 Neo4j 驱动程序 (Bolt 协议) 连接到 DBMS 时,管理命令将自动路由到系统数据库 (Neo4j 4.1+)。 -
针对
system
数据库运行存储过程,并在应用程序侧通过后处理替换任何YIELD
部分。
存储过程 dbms.security.changePassword(password, requirePasswordChange) 已完全删除,因为相应的 Cypher 管理命令也需要旧密码,因此更安全。 |
存储过程 | 管理命令 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
有关管理命令的更多信息,请参阅Cypher 手册 4.0 → 用户和角色管理。