Skip to content

安全配置

认证与授权

1. 认证设置

Neo4j 提供了多种认证机制:

  • 内置认证:使用 Neo4j 内置的用户管理系统
  • LDAP 认证:集成 LDAP 目录服务
  • OAuth 认证:使用 OAuth 2.0 进行认证
  • 自定义认证:使用插件实现自定义认证

2. 内置认证配置

conf
# 启用认证
dbms.security.auth_enabled=true

# 密码策略
dbms.security.password_policy=default

# 密码最小长度
dbms.security.password_policy.minimum_length=8

# 密码复杂度要求
dbms.security.password_policy.require_uppercase=true
dbms.security.password_policy.require_lowercase=true
dbms.security.password_policy.require_number=true
dbms.security.password_policy.require_symbol=true

3. 用户管理

3.1 创建用户

cypher
// 创建用户
CALL dbms.security.createUser('username', 'password', false)

// 创建管理员用户
CALL dbms.security.createUser('admin', 'password', true)

3.2 修改用户

cypher
// 修改用户密码
CALL dbms.security.changePassword('new_password')

// 修改其他用户密码
CALL dbms.security.changePasswordForUser('username', 'new_password')

// 禁用用户
CALL dbms.security.disableUser('username')

// 启用用户
CALL dbms.security.enableUser('username')

3.3 删除用户

cypher
// 删除用户
CALL dbms.security.deleteUser('username')

4. 角色管理

4.1 内置角色

  • admin:具有所有权限
  • architect:可以管理模式
  • publisher:可以读写数据
  • reader:只能读取数据

4.2 自定义角色

cypher
// 创建角色
CALL dbms.security.createRole('custom_role')

// 为角色授予权限
CALL dbms.security.grantPermission('custom_role', 'GRANT', 'ALL', 'GRAPH', 'neo4j')

// 为用户分配角色
CALL dbms.security.addRoleToUser('custom_role', 'username')

// 从用户移除角色
CALL dbms.security.removeRoleFromUser('custom_role', 'username')

// 删除角色
CALL dbms.security.dropRole('custom_role')

网络安全

1. 网络配置

conf
# 绑定地址
dbms.default_listen_address=0.0.0.0

# Bolt 连接器
dbms.connector.bolt.enabled=true
dbms.connector.bolt.listen_address=:7687
dbms.connector.bolt.tls_level=OPTIONAL

# HTTP 连接器
dbms.connector.http.enabled=true
dbms.connector.http.listen_address=:7474
dbms.connector.http.enabled=false  # 生产环境建议禁用 HTTP

# HTTPS 连接器
dbms.connector.https.enabled=true
dbms.connector.https.listen_address=:7473
dbms.connector.https.certificate_location=certificates/https/snakeoil.crt
dbms.connector.https.private_key_location=certificates/https/snakeoil.key

2. 防火墙配置

2.1 Linux 防火墙

bash
# 允许 Bolt 端口
sudo ufw allow 7687/tcp

# 允许 HTTPS 端口
sudo ufw allow 7473/tcp

# 拒绝 HTTP 端口
sudo ufw deny 7474/tcp

2.2 Windows 防火墙

  1. 打开 Windows 防火墙高级设置
  2. 创建入站规则
  3. 允许特定端口(7687 和 7473)
  4. 拒绝端口 7474

3. TLS 配置

conf
# TLS 级别
dbms.connector.bolt.tls_level=REQUIRED
dbms.connector.https.tls_level=REQUIRED

# 证书配置
dbms.ssl.policy.bolt.enabled=true
dbms.ssl.policy.bolt.private_key=certificates/bolt/private.key
dbms.ssl.policy.bolt.public_certificate=certificates/bolt/public.crt
dbms.ssl.policy.bolt.client_auth=NONE

# 信任存储
dbms.ssl.policy.bolt.trust_store=certificates/bolt/truststore.jks
dbms.ssl.policy.bolt.trust_store_password=password

数据加密

1. 传输加密

  • Bolt 协议:使用 TLS 加密
  • HTTPS:使用 TLS 加密
  • 备份:使用加密传输

2. 存储加密

2.1 配置存储加密

conf
# 启用存储加密
dbms.encryption.storage_enabled=true

# 加密密钥位置
dbms.encryption.key_file_location=/path/to/keys

# 密钥提供者
dbms.encryption.provider=SYSTEM

2.2 生成加密密钥

bash
# 生成加密密钥
neo4j-admin set-initial-password password

# 生成存储加密密钥
neo4j-admin encryption keygen --key-file=/path/to/keys/storage.key

3. 敏感数据加密

  • 密码哈希:使用 bcrypt 哈希存储密码
  • 敏感属性:对敏感属性进行加密
  • 查询参数:加密查询中的敏感参数

安全最佳实践

1. 访问控制

  • 最小权限原则:只授予用户必要的权限
  • 角色分离:不同角色负责不同的任务
  • 定期审查:定期审查用户权限

2. 密码管理

  • 强密码策略:要求使用强密码
  • 定期更改密码:定期要求用户更改密码
  • 密码存储:使用安全的方式存储密码

3. 网络安全

  • 使用 HTTPS:在生产环境中使用 HTTPS
  • 限制访问:只允许必要的 IP 地址访问
  • 使用 VPN:在远程访问时使用 VPN

4. 审计与监控

  • 启用审计日志:记录所有安全相关的操作
  • 监控异常:监控异常的登录尝试和查询
  • 定期安全扫描:定期进行安全扫描

5. 备份安全

  • 加密备份:对备份数据进行加密
  • 存储安全:将备份存储在安全的位置
  • 定期测试:定期测试备份的可恢复性

6. 安全更新

  • 及时更新:及时应用安全补丁
  • 版本管理:使用最新的稳定版本
  • 漏洞扫描:定期扫描漏洞

安全审计

1. 启用审计日志

conf
# 启用审计日志
dbms.security.audit_log_enabled=true
dbms.security.audit_log_events=AUTHENTICATION_FAILURE, AUTHENTICATION_SUCCESS, AUTHORIZATION_FAILURE, AUTHORIZATION_SUCCESS, USER_CREATED, USER_DELETED, USER_PASSWORD_CHANGED, ROLE_CREATED, ROLE_DELETED, ROLE_ASSIGNED, ROLE_REVOKED

dbms.security.audit_log_rotation_size=100M
dbms.security.audit_log_rotation_keep_number=7

2. 审计日志分析

  • 手动分析:使用 grep 等工具分析审计日志
  • 集中管理:将审计日志发送到集中日志管理系统
  • 实时监控:实时监控审计日志中的异常事件

3. 安全扫描

  • 漏洞扫描:使用漏洞扫描工具扫描 Neo4j 实例
  • 渗透测试:定期进行渗透测试
  • 合规检查:检查是否符合安全合规要求

安全事件响应

1. 事件分类

  • 认证失败:多次失败的登录尝试
  • 授权失败:未授权的访问尝试
  • 数据泄露:敏感数据的未授权访问
  • 系统异常:系统异常行为

2. 响应流程

  1. 检测:检测安全事件
  2. 评估:评估事件的严重程度
  3. 响应:采取适当的响应措施
  4. 恢复:恢复系统正常运行
  5. 分析:分析事件原因,防止再次发生

3. 应急措施

  • 隔离:隔离受影响的系统
  • 重置密码:重置可能泄露的密码
  • 撤销权限:撤销可能被滥用的权限
  • 恢复备份:从安全备份恢复数据

小结

安全配置是保护 Neo4j 数据库安全的重要环节。通过本文的介绍,您应该掌握了认证与授权、网络安全、数据加密和安全最佳实践等方面的知识。在实际应用中,需要根据具体的安全需求和合规要求,制定并实施相应的安全措施,确保数据库的安全运行。

在接下来的章节中,我们将介绍性能优化,这是提高 Neo4j 数据库性能的重要内容。