Configuring remote database aliasesEnterprise EditionNot available on Aura
You can use a remote database alias to connect to a graph located on a remote standalone server or cluster.
Although remote database aliases do not store any data, they enable users or applications to perform queries on remote databases as if they were on the local DBMS server. All configurations can be done using administrative commands on a running system. Any changes are automatically synchronized across all members of a cluster.
When creating the remote database alias, it can be configured to authenticate with either:
-
STORED NATIVE CREDENTIALS, the credentials of a single native user on the remote DBMS. -
Introduced in 2026.01
OIDC CREDENTIAL FORWARDING, forwarding the bearer authentication token from the logged-in user on the local DBMS. The user needs to be logged in with an identity provider supporting OIDC.
By creating a remote database alias, you define:
-
Which credentials to use to authenticate to the remote database.
-
Where the remote database is located.
-
How to connect to the remote database using driver settings.
|
To manage remote database aliases, you must have either database management or alias management privileges. For example, the following command grants the permission to create an alias to the
|
By granting access to the remote database alias, you define which users can use it to connect to the database on the remote DBMS.
|
Many of the built-in roles that Neo4j provides have access to all databases, this includes any remote database alias. |
The following examples describe how to set up access to a remote database via a remote database alias by using either stored native credentials, or OIDC credential forwarding. They assume that you have two separate DBMS instances: a local DBMS A and a remote DBMS B.
Setup example with stored native credentials
In this example, Alice is an administrator of DBMS A, Bob is an administrator of DBMS B, and Carol is a user who needs access to a database managed by Bob.
A remote database alias is only accessible to users with appropriate privileges.
In this example, Bob is the administrator responsible for deciding which database (db1 or db2) the remote database alias can write and/or read.
Meanwhile, Alice is the administrator that assigns who has access to the privileges set by Bob.
In the example, Alice assigns that access to Carol.
See DBMS privileges for more information.
Bob creates a user profile on DBMS B, grants it access to database db1 and shares the credentials with Alice.
Then, Alice creates a remote database alias db1-remote-alias on DBMS A that connects to db1 on DBMS B using the shared credentials.
After Alice grants Carol access to the remote database alias, Carol can log in to the local DBMS A, using her own credentials, and through the remote database alias connect to db1 on DBMS B.
|
All operations executed on the remote DBMS are performed under the identity of the user associated with the remote database alias.
When using For example, suppose the shared user on DBMS B, who is shared and configured for the remote database alias on the DBMS A, is assigned the built-in role |
Configure the remote DBMS B (Bob)
As Bob, you are responsible for the remote DBMS B. You can create and delete users and grant or deny privileges on the databases managed by DBMS B.
In this example, you create a user called remote_user, which will be used by the remote database alias to connect to db1, and share the credentials with Alice.
-
Create the user profile to share with Alice:
CREATE USER remote_user SET PASSWORD 'secretpassword' -
Create a custom role to track all users shared on a remote connection, so that they remain trackable:
CREATE ROLE shared_to_remote -
Grant the
shared_to_remoterole access todb1and assign the role to the user profile created for the remote database alias,remote_user:GRANT ACCESS ON DATABASE db1 TO shared_to_remote GRANT MATCH {*} ON GRAPH db1 TO shared_to_remote GRANT ROLE shared_to_remote TO remote_user -
Set up the SSL framework and check whether the database accepts non-local connections if required.
# 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
-
Securely transmit the credentials to Alice, setting up the link to database
db1.
Configure the local DBMS A and grant access to Carol (Alice)
As Alice, you are responsible for setting up DBMS А. You can create and delete database aliases and grant or deny users' access to them.
In this example, you create a remote database alias, called db1-remote-alias, which connects to db1 on DBMS B using the credentials shared by Bob.
Generate an encryption key
First, you need to generate an encryption key.
In this case, the credentials of the user remote_user of DBMS B are reversibly encrypted and stored in the system database of DBMS A.
Since the algorithm used is AES/GCM, you must provide an AES encryption key of length 256 and store it in a password-protected keystore in the PKCS12 format.
The key can be generated by using the following keytool command in your terminal, which is included in Java Platform, Standard Edition:
keytool -genseckey -keyalg aes -keysize 256 -storetype pkcs12 -keystore [keystore-name] -alias [key-name] -storepass [keystore-password]
|
It is recommended to generate the keystore using the same Java version as the one on which Neo4j is run, as the supported encryption algorithms may vary. For details on the version of Java required by Neo4j, see System requirements → Java. |
Configure the keystore settings
After generating the keystore file, you need to configure DBMS A to use it by setting the following configuration parameters in the neo4j.conf file:
| Configuration | Description |
|---|---|
The absolute path to the keystore file, including the file name. |
|
The password to the keystore file. Use Command expansion to set the password. |
|
The name of the secret key. |
|
To prevent unauthorized access, you must store the keystore file in a trusted location.
This is the main way to protect the encrypted passwords that will be stored in the |
In a cluster, you must share the same keystore file among all servers. For example, these would be valid additions to the configuration when using the suggested keytool command:
dbms.security.keystore.path=/home/secure-folder/keystore-name.pkcs12 dbms.security.keystore.password=$(conf/password.sh) dbms.security.key.name=key-name
Where password.sh might look like this:
#!/bin/bash
echo "$KEYSTORE_PASSWORD_ENVIRONMENT_VARIABLE"
Additionally, do not forget to change the permissions of the configuration file and start Neo4j with the command expansion flag:
chmod 640 conf/neo4j.conf
bin/neo4j start --expand-commands
Create the remote database alias and grant access to Carol
You create the remote database alias using alias administrative commands and grant Carol access to it.
|
It is strongly recommended to connect to a remote database alias with a secured connection.
Note that only client-side SSL is supported.
By default, remote database aliases require a secured URI scheme such as |
-
Use the following command to create a remote database alias with the stored native credentials shared by Bob:
CREATE ALIAS `db1-remote-alias` FOR DATABASE `db1` AT "neo4j+s://location:7687" USER remote_user PASSWORD 'secretpassword' -
Create a custom role to track all users who have access to the remote database alias (or choose an already existing role):
CREATE ROLE remote_access -
Grant the
remote_accessrole access to the remote database alias and assign it to Carol. SeeACCESSprivileges for more information.GRANT ACCESS ON DATABASE `db1-remote-alias` TO remote_access GRANT ROLE remote_access TO carol
|
If a transaction modifies an alias (e.g. changing the database targeted on DBMS B), other transactions concurrently executing against that alias may be aborted and rolled back for safety. This prevents issues such as a transaction executing against multiple target databases for the same alias. |
Changing the encryption key
If the encryption key in the keystore is changed, the encrypted credentials for all existing remote database aliases requires updating, as they will no longer be readable with the new key.
|
In case of a failure when reading the keystore file, investigate the |
Setup example with OIDC credential forwardingIntroduced in 2026.01
In order to use OIDC credential forwarding, both DBMS A and DBMS B must support the same OIDC identity provider. See the SSO integration on how to enable OIDC.
In this example, Alice is an administrator of DBMS A, Bob is an administrator of DBMS B, and Carol is a user who needs access to a database managed by Bob.
Carol logs into the local DBMS A through an OIDC-compliant identity provider by offering a token from the provider. The token is used to set the username and determine the identity provider groups to which the user belongs.
Alice is the administrator of the local DBMS A and sets up SSO for the identity provider and configures the mapping of the identity provider groups to the Neo4j roles, such that Carol can use the remote database alias, db1-remote-alias, to connect to the remote database db1.
Bob configures the remote DBMS B to support SSO with the same identity provider used by Carol to log in to DBMS A.
He also configures the mapping of the identity provider groups to the Neo4j roles such that the Carol’s identity provider groups grant the appropriate privileges to access db1 on the DBMS B.
|
A user’s effective permissions are not dictated by the identity provider groups alone, but by the mapping of those groups to roles defined within each Neo4j DBMS. See Map the identity provider groups to the Neo4j roles. As a result, different OIDC configurations across distinct DBMS instances may lead to the same user having different effective privileges on those instances, (DBMS A and DBMS B in this example). While it is possible to use different OIDC configurations across DBMS instances, database administrators must be aware of any privilege disparity that may arise from this and ensure that group-to-role mappings intended to grant equivalent access remain consistent across DBMSs. This is to avoid privilege inconsistency, such as over-privileging or unexpected access denial. |
Configure the local DBMS A and grant access to Carol (Alice)
As Alice, you are responsible for setting up the local DBMS A. You can create and delete database aliases and grant or deny users' access to them.
In this case, you need to set up a remote database alias that connects to db1 on DBMS B using OIDC credential forwarding and grant Carol access to it.
Create the remote database alias and grant access to Carol
You create the remote database alias using alias administrative commands.
|
It is strongly recommended to connect to a remote database alias with a secured connection.
Note that only client-side SSL is supported.
By default, remote database aliases require a secured URI scheme such as |
-
Use the following command to create a remote database alias using OIDC credential forwarding:
CREATE ALIAS `db1-remote-alias` FOR DATABASE `db1` AT "neo4j+s://location:7687" OIDC CREDENTIAL FORWARDING -
Create a custom role to track all users who have access to the remote database alias (or choose an already existing role):
CREATE ROLE remote_access -
Grant the
remote_accessrole access to the remote database alias. The role will be assigned to Carol on login via the mapping of identity provider groups to the Neo4j roles:GRANT ACCESS ON DATABASE `db1-remote-alias` TO remote_accessIf a transaction modifies an alias (e.g. changing the database targeted on DBMS B), other transactions concurrently executing against that alias may be aborted and rolled back for safety. This prevents issues such as a transaction executing against multiple target databases for the same alias.
Set up SSO on the local DBMS and map the identity provider groups to the Neo4j roles
In order for Carol to get access to the remote database alias, she needs to be in an identity provider group that is mapped to a Neo4j role that is granted access to that alias.
You set up SSO on the local DBMS A and map the identity provider groups to the Neo4j roles. For details, see the SSO configuration tutorial and Map the identity provider groups to the Neo4j roles.
dbms.security.oidc.<provider>.well_known_discovery_uri=http://example.com/.well-known/discovery
<...>
dbms.security.oidc.<provider>.claims.groups=groups
dbms.security.oidc.<provider>.authorization.group_to_role_mapping= "engineers" = admin; \
"collaborators" = reader; \
"remote_users" = remote_access
Configure the remote DBMS B (Bob)
As Bob, you are responsible for setting up the remote DBMS B. You can create and delete users and grant or deny privileges on the databases managed by DBMS B.
In this example, you need to ensure that Carol can access db1 on DBMS B using OIDC credential forwarding.
-
Create a custom role or choose an existing one. The roles will be assigned to the users on login via the mapping of identity provider groups to the Neo4j roles:
CREATE ROLE db1_access -
Grant the
db1_accessrole access todb1:GRANT ACCESS ON DATABASE db1 TO db1_access GRANT MATCH {*} ON GRAPH db1 TO db1_access -
Set up SSO on the remote DBMS B and map the identity provider groups to the Neo4j roles. For details, see the SSO configuration tutorial and Map the identity provider groups to the Neo4j roles.
dbms.security.oidc.<provider>.well_known_discovery_uri=http://example.com/.well-known/discovery <...> dbms.security.oidc.<provider>.claims.groups=groups dbms.security.oidc.<provider>.authorization.group_to_role_mapping= "engineers" = admin; \ "collaborators" = reader; \ "remote_users" = db1_access -
Set up the SSL framework and check whether the database accepts non-local connections if required.
# 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
Connect to remote database aliases
You can connect to a remote database alias the same way as you would connect to a standard database using any of the following options:
-
Connecting directly to the remote database alias.
-
Querying a remote database alias that you are not directly connected to using the Cypher
USEclause:USE `db1-remote-alias` MATCH (n) RETURN * -
Connecting to a remote database alias as a home database. This needs to be set by an administrator, in this case Alice. See User Management for more information.
ALTER USER carol SET HOME DATABASE `db1-remote-alias`
Important notes
When using remote database aliases, keep in mind that:
-
Remote database alias transactions will not be visible in
SHOW TRANSACTIONSon the local DBMS. However, they can be accessed and terminated on the remote database when connecting with the same user. -
Actions on the remote DBMS are all attributed to the user configured for the remote database alias. In the case of using
STORED NATIVE CREDENTIALS, the same credentials are used to connect to the remote DBMS regardless of which end-user made the query targeting the remote database alias. This will result in the stored native user being logged in the audit trails on the remote DBMS for all queries using the remote database alias. When usingOIDC CREDENTIAL FORWARDING, the actual end-user’s credentials and permissions are used, resulting in per-user audit trails being logged on the remote DBMS. -
When using a remote database alias with OIDC credential forwarding, the user needs to be logged into the local DBMS with OIDC, otherwise there is no token to forward, and the access to the remote database will be denied with GQLSTATUS
42NFF.
Glossary
- allocator
-
A component in the cluster that allocates databases to servers according to the topology constraints specified and an allocation strategy.
- asynchronous replication
-
Asynchronous replication is used by secondary copies to poll for new transactions, which means they cannot be guaranteed to have received the most recent transactions. This enables efficient scale-out of read-performance.
- Aura instance
-
A fully-managed DBMS represented by a single instance ID, that is running in the Neo4j Aura cloud.
- auto-commit transaction
-
An automatically committed transaction that contains a single query.
- Bolt protocol
-
Bolt is a protocol used for interaction between Neo4j instances and drivers.
- bookmark
-
A marker the client can request from the cluster to ensure that it is able to read its own writes so that the application’s state is consistent and only databases that have a copy of the bookmark are permitted to respond.
- category (Bloom)
-
A category is based on a node label and is defined in a Perspective as a way of visually distinguishing nodes with the same label(s).
- causal consistency
-
All servers in a cluster agree on the order in which transactions take place. The position of a server on the causal chain can be guaranteed using a bookmark.
- cluster
-
A Neo4j DBMS that spans multiple servers working together to increase fault tolerance and/or read scalability. Databases on a cluster may be configured to replicate across servers in the cluster thus achieving read scalability or high availability.
- client application
-
Software that interacts with a Neo4j server.
- commit
-
A commit is the successful completion of a transaction, which ensures durability of any changes made. For more details, visit Operations Manual → Transaction management.
- composite database
-
Composite databases are the means to access partitioned graph data with a single Cypher query.
- constraint
-
Constraints are sets of data modeling rules that ensure the data is consistent and reliable.
- Cypher®
-
Neo4j’s graph query language.
- data model
-
A data model defines how information is organized in a database. A good data model will make querying and understanding your data easier. In Neo4j, the data models have a graph structure.
- database
-
A database is a container used by the DBMS to manage and store graph data. The physical structure of data is controlled by the database.
- database vs graph
-
Databases are the physical containers of graph data. Graphs are the logical structure of data in Neo4j.
- Database Management System
-
Database Management System, or DBMS, capable of managing multiple databases. A DBMS may run on a single server, or span several servers configured as a cluster.
- database schema
-
The prescribed property existence and datatypes for nodes and relationships.
- deallocate
-
An act of removing a database from a server or a server from a cluster without loss of data or reduced fault tolerance.
- degree (of a node)
-
The number of relationships of a specific node; loops are counted twice.
- disaster recovery
-
A manual intervention to restore availability of a cluster, or databases within a cluster.
- driver
-
A software library that provides access to Neo4j from a particular programming language.
- election
-
In the event that the Raft leader becomes unresponsive, followers automatically trigger an election and vote for a new leader.
- entity
-
A node or a relationship.
- expression (Cypher)
-
A component of a Cypher query which produces values. It may be used in projections, as a predicate, or when setting properties on graph elements.
- fabric
-
Fabric is the architectural design of a unified system that provides a single access point to local or distributed graph data.
- fault tolerance
-
A guarantee that a cluster can maintain a database’s persistence and availability in the event of one or more servers failing.
- follower
-
A primary copy of a database acting as a follower, receives and acknowledges synchronous writes from the leader.
- Generative AI (GenAI)
-
A type of artificial intelligence (AI) system that generates text, images, or other media in response to prompts.
- graph
-
A logical representation of a set of nodes where some pairs are connected by relationships.
- index
-
Data structure that improves read performance of a database.
- knowledge graph
-
A specific type of graph that has an organizing principle so that a user (or a computer system) can reason about the underlying data. The organizing principle provides an additional layer of structure that adds context to support knowledge discovery.
- label
-
Marks a node as a member of a named and indexed subset. A node may be assigned zero or more labels.
- leader
-
A single primary copy of a database is designated as the leader. It receives all write transactions from clients and replicates writes synchronously to followers and asynchronously to secondary copies of the database.
- main database
-
In terms of Neo4j Enterprise Studio, the database(s) containing the user’s data. Can exist in the same Neo4j deployment as the tool asset database.
- motif
-
A description of a specific pattern within a graph.
- node
-
A node represents an entity or discrete object in your graph data model. Nodes can be connected by relationships, hold data in properties, and are classified by labels.
- operator
-
A symbol representing a mathematical or logical operation.
- parameter
-
Named value provided when running a Cypher statement.
- path
-
A sequence of nodes and the relationships connecting them, that does not contain duplicate relationships. Several paths can match a pattern.
- pattern
-
A specific arrangement of nodes and relationships that can be matched in a graph. A pattern follows a motif.
- perspective (Bloom)
-
A Perspective defines a certain business view or domain that can be found in the target Neo4j graph. A single Neo4j graph can be viewed through different Perspectives, each tailored for a different business purpose.
- primary
-
A copy of the database that is able to process write transactions and is eligible to be elected as a leader. It participates in fault tolerant writes as it is part of the majority required to acknowledge and commit write transactions.
- primary vs secondary
-
In a cluster, databases can operate in either primary or secondary mode. Primary databases are able to process write and read transactions, ensuring fault tolerance. Secondary databases are replicated asynchronously from primaries, and their main purpose is to provide read scaling within the cluster.
- project (Aura)
-
An isolated environment in the unified Aura console that contains its own database instances, configurations, and resources. Preceded by tenant in the classic Aura console.
- property
-
Properties are key-value pairs that are used for storing data on nodes and relationships.
- query (Cypher)
-
A statement that retrieves or writes information to a database.
- Raft group
-
A group of servers that are participating in hosting a particular database in primary mode.
- Raft group member
-
A server that is participating in a Raft group. A server can be a member of one or more groups.
- Raft log
-
A shared log between all Raft group members that is guaranteed to be consistently updated and viewed by those members. The log contains both database data and operational state of the Raft group.
- Raft protocol
-
The networking mechanism that enables a database to replicate its data across multiple servers to give high availability for accessing the data and high durability to the data stored.
- read scaling
-
Distributing query load by creating additional database copies hosted in secondary mode (read-only).
- relationship
-
A relationship represents a connection between nodes in your graph data model. Relationships connect a source node to a target node, hold data in properties, and are classified by type.
- secondary
-
An asynchronously replicated copy of the database that provides read scaling within the cluster.
- seed
-
A seed is a database dump or a full backup used to create a database on a cluster. This is sometimes called seeding.
- server
-
A physical machine, a virtual machine, or a container running an instance of Neo4j. Servers can be standalone or part of a cluster.
- session
-
A causally linked sequence of transactions.
- session consistency
-
An alternative name for Neo4j’s causal consistency.
- standalone
-
A single server running Neo4j and not part of a cluster.
- synchronous replication
-
Synchronous replication requires the leader primary to replicate a transaction and block the commit until a quorum of the follower primaries acknowledges that the transaction is successfully replicated. Once the transaction is replicated, the commit is allowed to proceed. This ensures data durability and consistency within the cluster.
- system database
-
A database used by Neo4j to store system information.
- tenant (Aura)
-
An isolated environment in the classic Aura console that contains its own database instances, configurations, and resources. Replaced by project in the unified Aura console.
- tool asset database
-
In terms of Neo4j Enterprise Studio, the database where tools' assets are stored. This can be in the same Neo4j deployment as the main database(s) or in a separate deployment.
- topology
-
A configuration that describes how the copies of a database should be spread across the servers in a cluster, see primary mode and secondary mode.
- transaction
-
A transaction comprises a unit of work performed against a database. It is treated in a coherent and reliable way, independent of other transactions. Transactions comply with the ACID consistency model (atomic, consistent, isolated, and durable).