配置远程数据库别名
远程数据库别名可用于提供与一个或多个图的连接,这些图位于一个或多个远程独立服务器或集群上。
尽管远程数据库别名不存储任何数据,但它们使用户或应用程序能够像在本地 DBMS 服务器上一样对远程数据库执行查询。所有配置都可以通过运行系统上的管理命令完成。任何更改都会在集群的所有实例之间自动同步。
以下步骤描述了为本地和远程 DBMS 定义远程数据库别名所需的设置。如果数据库名称或独立服务器和集群实例的位置发生任何更改,这些步骤也很有用。此外,您还可以在此处找到有关最佳实践以及配置更改的额外指导信息。
设置示例
在此示例中,Alice 是一名管理员,Carol 是一名需要访问由 Bob 管理的数据库的用户
远程别名定义
-
使用远程 DBMS B 的哪个用户。
-
远程数据库的位置。
-
如何使用驱动程序设置连接到远程数据库。
远程数据库别名仅对具有适当权限的用户可访问。在上面的示例中,Bob 是负责决定远程别名可以写入和/或读取哪些数据库( 有关更多信息,请参阅DBMS 权限。 |
在 Alice 将此权限分配给 Carol 的用户配置文件后,Carol 可以使用她自己的常规凭据访问 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 Platform, Standard Edition 中
keytool -genseckey -keyalg aes -keysize 256 -storetype pkcs12 -keystore [keystore-name] -alias [key-name] -storepass [keystore-password]
建议在运行 Neo4j 的相同 Java 版本上生成密钥库,因为支持的加密算法可能有所不同。有关 Neo4j 所需 Java 版本的详细信息,请参阅系统要求 → Java。 |
以下配置对于创建远程数据库别名是必需的
配置 | 描述 |
---|---|
密钥库文件的绝对路径,包括文件名。 |
|
密钥库文件的密码。使用命令展开设置密码。 |
|
密钥名称 |
为防止未经授权的访问,密钥库文件必须存储在受信任的位置。这是保护将存储在系统数据库中的加密密码的主要方式。除了管理员和 |
在集群中,Alice 需要在所有实例上共享相同的密钥库文件。
例如,在使用建议的 keytool 命令时,这些是配置的有效补充
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 上的目标数据库),则同时针对该别名执行的其他事务可能会被中止并回滚以确保安全。这可以防止诸如事务针对同一别名的多个目标数据库执行等问题。 |
更改加密密钥
如果密钥库中的加密密钥发生更改,则现有远程数据库别名的加密凭据需要更新,因为它们将不再可读。
如果在读取密钥库文件时出现故障,请检查 |