外观
Neo4j 认证与授权配置
认证配置
启用认证
- 配置参数:
dbms.security.auth_enabled - 作用:启用或禁用用户认证
- 推荐值:
true(生产环境必须启用)
示例配置:
txt
dbms.security.auth_enabled=true认证缓存配置
- 缓存大小:
dbms.security.auth_cache_size - 缓存过期时间:
dbms.security.auth_cache_ttl - 作用:缓存用户认证信息,提高认证性能
示例配置:
txt
dbms.security.auth_cache_size=1000
dbms.security.auth_cache_ttl=60000 # 60秒密码策略配置
密码复杂度要求
- 配置参数:
dbms.security.password_policy - 可选值:
default(默认策略)、none(无策略) - 默认策略规则:
- 密码长度至少 8 个字符
- 包含至少一个大写字母
- 包含至少一个小写字母
- 包含至少一个数字
- 包含至少一个特殊字符
示例配置:
txt
dbms.security.password_policy=default自定义密码策略
可以通过插件实现自定义密码策略,例如使用 APOC 插件:
txt
# 启用 APOC 密码策略
dbms.security.password_policy=apoc认证机制配置
内置认证机制
Neo4j 支持以下内置认证机制:
- native:本地密码认证(默认)
- ldap:LDAP 认证(企业版)
- kerberos:Kerberos 认证(企业版)
- pam:PAM 认证(企业版)
示例配置:
txt
# 使用本地密码认证
dbms.security.auth_providers=native授权配置
启用授权
- 配置参数:
dbms.security.authorization_enabled - 作用:启用或禁用权限控制
- 推荐值:
true(生产环境必须启用)
示例配置:
txt
dbms.security.authorization_enabled=true角色管理
预定义角色
Neo4j 提供以下预定义角色:
- reader:只读权限
- editor:读写权限,但不能管理用户和数据库
- publisher:读写权限 + 发布权限
- architect:读写权限 + 架构管理权限
- admin:完全权限
自定义角色(企业版)
可以创建自定义角色,根据业务需求分配特定权限。
用户管理
创建用户
使用 Cypher Shell 创建用户
cypher
# 创建用户并设置密码
CREATE USER neo4j SET PASSWORD 'password' CHANGE NOT REQUIRED;
# 创建用户并要求首次登录修改密码
CREATE USER alice SET PASSWORD 'temp_password' CHANGE REQUIRED;使用 Neo4j Browser 创建用户
- 登录 Neo4j Browser
- 导航到 "数据库信息" → "用户管理"
- 点击 "创建用户"
- 填写用户名和密码,设置密码策略
- 点击 "创建"
修改用户密码
用户自行修改密码
cypher
# 修改当前用户密码
ALTER CURRENT USER SET PASSWORD 'new_password';管理员修改用户密码
cypher
# 修改指定用户密码
ALTER USER alice SET PASSWORD 'new_password';禁用/启用用户
cypher
# 禁用用户
ALTER USER alice SET STATUS 'disabled';
# 启用用户
ALTER USER alice SET STATUS 'enabled';删除用户
cypher
# 删除用户
DROP USER alice;查看用户信息
cypher
# 查看所有用户
SHOW USERS;
# 查看指定用户
SHOW USER alice;权限管理
授予角色
授予预定义角色
cypher
# 授予 reader 角色给用户
grant role reader to alice;
# 授予多个角色给用户
grant roles reader, editor to alice;创建和授予自定义角色(企业版)
cypher
# 创建自定义角色
CREATE ROLE my_custom_role;
# 授予权限给自定义角色
grant create index on database * to my_custom_role;
grant match {*} on graph * to my_custom_role;
# 授予自定义角色给用户
grant role my_custom_role to alice;撤销角色
cypher
# 撤销单个角色
revoke role reader from alice;
# 撤销多个角色
revoke roles reader, editor from alice;细粒度权限控制(企业版)
Neo4j 企业版支持细粒度权限控制,可以对数据库、图、节点、关系等授予特定权限。
数据库级权限
cypher
# 授予数据库管理权限
grant all on database * to admin;
# 授予数据库创建权限
grant create database on system to admin;
# 授予数据库访问权限
grant access on database neo4j to reader;图级权限
cypher
# 授予图读取权限
grant match {*} on graph * to reader;
# 授予图写入权限
grant create, merge, delete on graph * to editor;节点和关系权限
cypher
# 授予节点读取权限
grant match (n:Person) on graph * to reader;
# 授予关系写入权限
grant create, delete ()-[r:KNOWS]->() on graph * to editor;属性权限
cypher
# 授予属性读取权限
grant match (n:Person {name, age}) on graph * to reader;
# 授予属性写入权限
grant set (n:Person {name}) on graph * to editor;查看权限
cypher
# 查看所有角色的权限
SHOW ROLES;
# 查看指定角色的权限
SHOW ROLE reader;
# 查看用户的权限
SHOW USER alice;LDAP 集成(企业版)
启用 LDAP 认证
txt
# 启用 LDAP 认证
dbms.security.auth_providers=ldap,native
# LDAP 服务器配置
dbms.security.ldap.host=ldap://ldap.example.com
dbms.security.ldap.port=389
dbms.security.ldap.authentication.user_dn_template=cn={0},ou=users,dc=example,dc=com
dbms.security.ldap.authentication.password=secretLDAP 授权配置
txt
# LDAP 授权配置
dbms.security.ldap.authorization.enabled=true
dbms.security.ldap.authorization.group_to_role_mapping=cn=neo4j-admins,ou=groups,dc=example,dc=com=admin;cn=neo4j-readers,ou=groups,dc=example,dc=com=reader
dbms.security.ldap.authorization.user_search_base=ou=users,dc=example,dc=com
dbms.security.ldap.authorization.group_search_base=ou=groups,dc=example,dc=com
dbms.security.ldap.authorization.group_search_filter=(member={0})Kerberos 集成(企业版)
启用 Kerberos 认证
txt
# 启用 Kerberos 认证
dbms.security.auth_providers=kerberos,native
# Kerberos 配置
dbms.security.kerberos.realm=EXAMPLE.COM
dbms.security.kerberos.kdc.host=kdc.example.com
dbms.security.kerberos.kdc.port=88
dbms.security.kerberos.service.principal=neo4j/neo4j.example.com@EXAMPLE.COM
dbms.security.kerberos.service.keytab=/path/to/neo4j.keytabKerberos 授权配置
txt
# Kerberos 授权配置
dbms.security.kerberos.authorization.enabled=true
dbms.security.kerberos.authorization.user_to_role_mapping=user1@EXAMPLE.COM=admin;user2@EXAMPLE.COM=reader安全最佳实践
1. 最小权限原则
- 只授予用户完成工作所需的最小权限
- 避免过度授权
- 定期审查用户权限
2. 强密码策略
- 启用密码复杂度要求
- 定期强制用户修改密码
- 禁止使用弱密码
- 使用密码管理器生成和管理密码
3. 定期审查用户和权限
- 每季度审查一次用户列表
- 移除不再需要的用户
- 审查权限分配,确保符合最小权限原则
- 记录权限变更历史
4. 启用审计日志
- 启用审计日志,记录用户活动
- 定期审查审计日志
- 配置审计日志保留策略
5. 安全的认证机制
- 使用强认证机制(如 Kerberos、LDAP)
- 禁用明文密码传输
- 启用 TLS/SSL 加密
6. 访问控制
- 限制数据库访问的 IP 地址
- 使用防火墙保护数据库端口
- 启用网络隔离
7. 定期备份认证数据
- 定期备份认证数据
- 测试认证数据恢复流程
- 确保备份数据的安全性
常见认证与授权问题
1. 忘记管理员密码
解决方法:
- 停止 Neo4j 服务
- 编辑
neo4j.conf文件,临时禁用认证:txtdbms.security.auth_enabled=false - 启动 Neo4j 服务
- 登录 Neo4j Browser 或 Cypher Shell
- 修改管理员密码:cypher
ALTER USER neo4j SET PASSWORD 'new_password'; - 停止 Neo4j 服务
- 恢复认证配置:txt
dbms.security.auth_enabled=true - 重新启动 Neo4j 服务
2. 用户无法登录
可能原因:
- 用户名或密码错误
- 用户被禁用
- 密码已过期
- 认证机制配置错误
- 网络连接问题
解决方法:
- 验证用户名和密码
- 检查用户状态:cypher
SHOW USER alice; - 重置用户密码:cypher
ALTER USER alice SET PASSWORD 'new_password'; - 启用用户:cypher
ALTER USER alice SET STATUS 'enabled'; - 检查认证配置
- 检查网络连接
3. 用户权限不足
解决方法:
- 检查用户的角色和权限:cypher
SHOW USER alice; - 授予适当的角色或权限:cypher
grant role editor to alice; - 检查细粒度权限配置(如果使用)
4. LDAP 认证失败
可能原因:
- LDAP 服务器配置错误
- LDAP 用户密码错误
- LDAP 搜索过滤器配置错误
- LDAP 连接问题
解决方法:
- 检查 LDAP 服务器配置
- 验证 LDAP 用户密码
- 检查 LDAP 搜索过滤器
- 测试 LDAP 连接
- 查看 Neo4j 日志获取详细错误信息
版本差异
Neo4j 4.x 与 5.x 认证与授权差异
- 配置参数变化:部分参数前缀从
dbms改为server - 权限模型增强:5.x 增强了细粒度权限控制
- 角色管理改进:5.x 提供了更灵活的角色管理
- 审计日志增强:5.x 增强了审计日志功能
社区版与企业版差异
社区版:
- 支持本地密码认证
- 支持预定义角色
- 基本的权限控制
企业版:
- 支持多种认证机制(LDAP、Kerberos、PAM)
- 支持自定义角色
- 支持细粒度权限控制
- 支持审计日志
- 支持集成外部身份提供商
常见问题(FAQ)
Q1: 如何重置 Neo4j 管理员密码?
A1: 重置管理员密码的步骤:
- 停止 Neo4j 服务
- 临时禁用认证
- 启动服务并修改密码
- 恢复认证配置
- 重新启动服务
Q2: Neo4j 支持哪些认证机制?
A2: Neo4j 支持以下认证机制:
- 本地密码认证(社区版和企业版)
- LDAP 认证(企业版)
- Kerberos 认证(企业版)
- PAM 认证(企业版)
Q3: 如何创建自定义角色?
A3: 创建自定义角色的步骤(企业版):
- 创建角色:
CREATE ROLE my_custom_role; - 授予权限:
grant match {*} on graph * to my_custom_role; - 授予角色给用户:
grant role my_custom_role to alice;
Q4: 如何实现细粒度权限控制?
A4: 细粒度权限控制(企业版)可以通过以下方式实现:
- 数据库级权限:控制数据库的访问和管理
- 图级权限:控制图的读取和写入
- 节点和关系权限:控制特定标签和关系类型的访问
- 属性权限:控制特定属性的访问和修改
Q5: 如何启用审计日志?
A5: 启用审计日志的配置(企业版):
txt
# 启用审计日志
dbms.audit.log.enabled=true
# 审计日志路径
dbms.audit.log.path=/var/log/neo4j/audit.log
# 审计日志级别
dbms.audit.log.level=infoQ6: 如何集成 LDAP 认证?
A6: 集成 LDAP 认证的步骤(企业版):
- 配置 LDAP 服务器连接
- 配置 LDAP 用户搜索
- 配置 LDAP 授权映射
- 启用 LDAP 认证
Q7: 如何限制用户只能访问特定数据库?
A7: 限制用户访问特定数据库的步骤(企业版):
- 授予数据库访问权限:
grant access on database mydb to alice; - 撤销其他数据库的访问权限:
revoke access on database * from alice;
Q8: 如何实现基于角色的访问控制?
A8: 基于角色的访问控制实现步骤:
- 创建用户
- 授予适当的角色
- 角色继承预定义或自定义权限
- 定期审查角色和权限
Q9: 如何监控认证和授权事件?
A9: 监控认证和授权事件的方法:
- 查看 Neo4j 日志中的认证和授权事件
- 启用审计日志(企业版)
- 集成监控工具(如 Prometheus、Grafana)
- 定期审查用户活动
Q10: 如何确保认证数据的安全性?
A10: 确保认证数据安全性的方法:
- 使用强密码策略
- 定期备份认证数据
- 加密存储敏感认证信息
- 限制认证数据的访问权限
- 定期审查认证配置
- 使用安全的认证机制
