身份验证和授权
本节描述了 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 中,此模型通过添加权限得到了显着增强,权限是定义用户权限的基础访问控制规则。
在迁移后,仍然可以为每个数据库设置不同的安全配置,但这需要通过授予特定于数据库的权限和角色来管理。3.5 中的内置角色仍然存在,但在迁移后将应用于所有数据库,除非使用新的安全管理命令明确修改。有关管理特定于数据库的角色和权限的功能的更详细说明,请参阅Cypher® 手册 4.0 → 管理。
不再可以在集群的不同实例上拥有不同的安全权限。整个集群共享使用 Cypher 管理命令在system
数据库中配置的权限。在实践中,这意味着无论用户访问集群中的哪个服务器,他们都拥有相同的权限。
已弃用和删除的安全过程
Neo4j 3.x 中用于用户管理的内置安全过程dbms.security
在 4.x 中已弃用。如果您仍然想要使用它们,则必须针对system
数据库运行它们,并且不能后跟YIELD
。
有两种选择可以重写用于管理身份验证和授权的代码和例程。
-
(推荐) 将过程重写为相应的 Cypher 管理命令,使用xref: version-4/migration/surface-changes/auth.adoc#convert-security-procedures-table[转换表]。所有管理命令都必须针对
system
数据库执行。当使用 Neo4j 驱动程序(Bolt 协议)连接到 DBMS 时,管理命令会自动路由到系统数据库(Neo4j 4.1+)。 -
针对
system
数据库运行过程,并将任何YIELD
部分替换为应用程序端的后处理。
自相应的 Cypher 管理命令也需要旧密码以来,过程dbms.security.changePassword(password, requirePasswordChange) 已完全删除,因此更安全。 |
过程 | 管理命令 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
有关管理命令的更多信息,请参阅Cypher 手册 4.0 → 用户和角色管理。