身份验证与授权

本节介绍了 Neo4j 身份验证和授权方面的重大变更与弃用功能。

移除用于身份验证和授权的平面文件

Neo4j 3.x 通过平面文件管理身份验证和授权。

Neo4j 4.0 引入了一个复杂的安全模型,存储在 system 图数据库中,并由一个名为 system 的特殊数据库进行维护。authroles 文件的内容会自动迁移到 system 数据库中。如果您要整合来自多个 Neo4j 3.5 部署的多个数据库或升级集群,则必须在迁移前手动合并 authrole 文件。

neo4j-admin 命令 set-initial-passwordset-default-admin 在 4.0 版本中继续有效,并将写入与 3.5 版本相同的文件。安装新版本后,Neo4j 在首次启动时会考虑这些文件中的任何内容。

set-initial-password 命令仅在存在拥有默认密码的默认用户 neo4j 且系统中没有其他用户时才会生效;而 set-default-admin 仅在没有任何角色存在时才会被使用。有关更多信息,请参阅 Operation Manual 4.0 → Set an initial password

基于角色的访问控制

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 管理命令也需要旧密码,因此更安全。
表 1. 过程到 Cypher 管理命令的转换
过程 管理命令

dbms.security.createUser

CREATE USER

dbms.security.deleteUser

DROP USER

dbms.security.changePassword

ALTER CURRENT USER SET PASSWORD

dbms.security.listUsers

SHOW USERS

dbms.security.changeUserPassword

ALTER USER

dbms.security.suspendUser

ALTER USER

dbms.security.activateUser

ALTER USER

dbms.security.addRoleToUser

GRANT ROLE TO USER

dbms.security.removeRoleFromUser

REVOKE ROLE FROM USER

dbms.security.listRoles

SHOW ROLES

dbms.security.listRolesForUser

SHOW USERS

dbms.security.listUsersForRole

SHOW ROLES WITH USERS

dbms.security.createRole

CREATE ROLE

dbms.security.deleteRole

DROP ROLE

有关管理命令的更多信息,请参阅 Cypher Manual 4.0 → User and role management

© . This site is unofficial and not affiliated with Neo4j, Inc.