身份验证与授权
本节介绍了 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® Manual 4.0 → Administration。
不再可能在集群的不同实例上拥有不同的安全权限。整个集群共享在 system 数据库中使用 Cypher 管理命令配置的权限。实际上,这意味着无论用户访问集群中的哪台服务器,他们都拥有相同的权限。
已弃用和删除的安全过程
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 Manual 4.0 → User and role management。