配置远程数据库别名
远程数据库别名可用于提供对一个或多个图表的连接,这些图表位于一个或多个远程独立服务器或集群上。
虽然远程数据库别名不存储任何数据,但它们使用户或应用程序能够在远程数据库上执行查询,就好像它们在本地 DBMS 服务器上一样。所有配置都可以使用 管理命令 在运行的系统上完成。任何更改都会自动同步到集群的所有实例。
以下步骤描述了定义远程数据库别名的设置,适用于本地和远程 DBMS。如果数据库名称或独立服务器和集群实例的位置发生任何更改,这些步骤也非常有用。此外,您还将在此处找到有关最佳实践和有关配置更改的更多指导信息。
设置示例
在此示例中,Alice 是管理员,Carol 是需要访问 Bob 管理的数据库的用户。
远程别名定义
-
使用远程 DBMS B 的哪个用户。
-
远程数据库位于何处。
-
如何使用驱动程序设置连接到远程数据库。
只有具有适当权限的用户才能访问远程数据库别名。在上面的示例中,Bob 是管理员,负责决定哪些数据库 ( 有关更多信息,请参阅 lDBMS 权限。 |
Carol 可以使用她自己的常规凭据在 Alice 将此权限分配到她的用户配置文件后,访问 DBMS 中的远程数据库 Db1
。此配置还将允许 Carol 访问 **DBMS B** 中的 Db2
。如果管理员决定不这样做,则 Bob 必须定义相应的权限(有关详细信息,请参阅 身份验证和授权)。
配置远程 DBMS(Bob)
在建议的示例中,有两个管理员:Alice 和 Bob。Bob 是负责远程 DBMS 设置的管理员,包括以下步骤
-
创建要与 Alice 共享的用户配置文件。目前,仅支持基于用户和密码的身份验证(例如本机身份验证)。
-
定义用户的权限。如果您不希望此用户访问
Db2
,则可以在此处设置它。 -
安全地将凭据传输到 Alice,建立到数据库
Db1
的链接。建议创建一个自定义角色来跟踪在远程连接上共享的所有用户,以便可以跟踪他们。
CREATE USER alice SET PASSWORD 'secretpassword'
CREATE ROLE remote
GRANT ACCESS ON DATABASE neo4j TO remote
GRANT MATCH {*} ON GRAPH neo4j TO remote
GRANT ROLE remote TO alice
在这种情况下,Bob 必须为 SSL 框架 完成必要的设置,并在需要时检查数据库是否接受非本地连接。
# accept non-local connections
server.default_listen_address=0.0.0.0
# configure ssl for bolt
dbms.ssl.policy.bolt.enabled=true
dbms.ssl.policy.bolt.base_directory=certificates/bolt
dbms.ssl.policy.bolt.private_key=private.key
dbms.ssl.policy.bolt.public_certificate=public.crt
dbms.ssl.policy.bolt.client_auth=NONE
# enforcing ssl connection
server.bolt.tls_level=REQUIRED
配置具有远程数据库别名的 DBMS(Alice)
作为 Alice,您需要生成一个加密密钥。在这种情况下,**DBMS B** 用户的凭据将被可逆地加密并存储在 **DBMS A** 的系统数据库中。
由于使用的算法是 AES/GCM,因此需要提供一个 AES 加密密钥。它应该具有 256 的长度,并存储在格式为 pkcs12 的受密码保护的密钥库中。
可以使用终端中的以下 keytool 命令生成密钥,该命令包含在 Java 平台标准版 中
keytool -genseckey -keyalg aes -keysize 256 -storetype pkcs12 -keystore [keystore-name] -alias [key-name] -storepass [keystore-password]
建议在运行 Neo4j 的相同 Java 版本上生成密钥库,因为支持的加密算法可能有所不同。有关 Neo4j 所需 Java 版本的详细信息,请参阅 系统要求 → Java。 |
创建远程数据库别名需要以下配置
配置 | 描述 |
---|---|
密钥库文件的绝对路径,包括文件名。 |
|
密钥库文件的密码。使用 命令扩展 设置密码。 |
|
密钥的名称 |
为了防止未经授权的访问,密钥库文件必须存储在受信任的位置。这是保护存储在系统数据库中的加密密码的主要方法。它不应该对任何用户访问,除了管理员和 |
在集群中,Alice 需要在所有实例之间共享同一个密钥库文件。
例如,使用建议的 keytool 命令时,这些将是 config 的有效添加
dbms.security.keystore.path=/home/secure-folder/keystore-name.pkcs12
dbms.security.keystore.password=$(conf/password.sh)
dbms.security.key.name=key-name
其中 password.sh
可能如下所示
#!/bin/bash
echo "$KEYSTORE_PASSWORD_ENVIRONMENT_VARIABLE"
此外,不要忘记更改配置文件的权限,并使用命令扩展标志启动 Neo4j
chmod 640 conf/neo4j.conf
bin/neo4j start --expand-commands
管理远程数据库别名
可以使用 别名命令 来管理远程数据库别名。在这种情况下,强烈建议使用安全连接连接到远程数据库别名。
请注意,仅支持客户端 SSL。默认情况下,远程别名需要安全的 URI 方案,例如 neo4j+s
。可以通过将驱动程序设置 ssl_enforced
设置为 false
来禁用此功能。
例如,可以使用以下命令创建远程数据库别名
CREATE ALIAS `remote-neo4j` FOR DATABASE `neo4j` AT "neo4j+s://location:7687" USER alice PASSWORD 'secretpassword'
GRANT CREATE ALIAS ON DBMS TO administrator
以下是授予 ACCESS
权限 以使用远程数据库别名的步骤
GRANT ACCESS ON DATABASE `remote-neo4j` TO role
如果事务修改别名(例如更改 **DBMS B** 上的目标数据库),则其他并发执行针对该别名的事务可能会被中止并回滚以确保安全。这可以防止出现事务针对同一别名的多个目标数据库执行的问题。 |
更改加密密钥
如果密钥库中的加密密钥发生变化,则需要更新现有远程数据库别名的加密凭据,因为它们将不再可读。
如果在读取密钥库文件时出现故障,请调查 |