User and role management
User Management
Users can be created and managed using a set of Cypher® administration commands executed against the system
database.
When connected to the DBMS over bolt, administration commands are automatically routed to the system
database.
Command | Description | Required privilege | Community Edition | Enterprise Edition |
---|---|---|---|---|
|
List the current user. When using the |
None |
|
|
|
List all users. When using the |
|
|
|
|
List the privileges granted to the specified users or the current user, if no user is specified. When using the |
|
|
|
|
Create a new user. |
|
|
|
|
Create a new user, or if a user with the same name exists, replace it. |
CREATE USER and DROP USER |
|
|
|
Modify the settings for an existing user. |
SET PASSWORD and/or SET USER STATUS |
|
|
|
Change the current user’s password. |
None |
|
|
|
Remove an existing user. |
|
|
Listing current user
The currently logged-in user can be seen using SHOW CURRENT USER
which will produce a table with four columns:
Column | Description | Community Edition | Enterprise Edition |
---|---|---|---|
user |
User name |
|
|
roles |
Roles granted to the user. |
|
|
passwordChangeRequired |
If |
|
|
suspended |
If |
|
|
SHOW CURRENT USER
user | roles | passwordChangeRequired | suspended |
---|---|---|---|
|
|
|
|
Rows: 1 |
This command is only supported for a logged-in user and will return an empty result if authorization has been disabled. |
Listing users
Available users can be seen using SHOW USERS
which will produce a table of users with four columns:
Column | Description | Community Edition | Enterprise Edition |
---|---|---|---|
user |
User name |
|
|
roles |
Roles granted to the user. |
|
|
passwordChangeRequired |
If |
|
|
suspended |
If |
|
|
SHOW USERS
user | roles | passwordChangeRequired | suspended |
---|---|---|---|
|
|
|
|
Rows: 1 |
When first starting a Neo4j DBMS, there is always a single default user neo4j
with administrative privileges.
It is possible to set the initial password using neo4j-admin set-initial-password,
otherwise it is necessary to change the password after first login.
The |
Creating users
Users can be created using CREATE USER
.
CREATE [OR REPLACE] USER name [IF NOT EXISTS]
SET [PLAINTEXT | ENCRYPTED] PASSWORD 'password'
[[SET PASSWORD] CHANGE [NOT] REQUIRED]
[SET STATUS {ACTIVE | SUSPENDED}]
If the optional SET PASSWORD CHANGE [NOT] REQUIRED
is omitted then the default is CHANGE REQUIRED
. The default for SET STATUS
is ACTIVE
. The password
can either be a string value or a string parameter. The optional PLAINTEXT
in SET PLAINTEXT PASSWORD
has the same behaviour as SET PASSWORD
. The optional ENCRYPTED
can be used to create a user when the plaintext password is unknown but the encrypted password is available (e.g. from a database backup). With ENCRYPTED
, the password string is expected to be on the format <encryption-version>,<hash>,<salt>
.
For example, we can create the user jake
in a suspended state and the requirement to change his password.
CREATE USER jake SET PASSWORD 'abc' CHANGE REQUIRED SET STATUS SUSPENDED
0 rows, System updates: 1
The |
The created user will appear on the list provided by SHOW USERS
.
SHOW USERS YIELD user, suspended, passwordChangeRequired, roles WHERE user = 'jake'
In this example we also:
-
Reorder the columns using a
YIELD
clause -
Filter the results using a
WHERE
clause to show only the new user
user | suspended | passwordChangeRequired | roles |
---|---|---|---|
|
|
|
|
Rows: 1 |
SHOW USERS YIELD roles, user WHERE "PUBLIC" IN roles RETURN user as publicUsers
It is also possible to add a RETURN
clause to further manipulate the results after filtering. In this
case it is used to filter out the roles column and rename the users column to publicUsers
.
publicUsers |
---|
|
|
Rows: 2 |
In Neo4j Community Edition there are no roles, but all users have implied administrator privileges.
In Neo4j Enterprise Edition all users are automatically assigned the |
The CREATE USER
command is optionally idempotent, with the default behavior to throw an exception if the user already exists. Appending IF NOT EXISTS
to the command will ensure that no exception is thrown and nothing happens should the user already exist. Adding OR REPLACE
to the command will result in any existing user being deleted and a new one created.
CREATE USER jake IF NOT EXISTS SET PASSWORD 'xyz'
0 rows
CREATE OR REPLACE USER jake SET PLAINTEXT PASSWORD 'xyz'
0 rows, System updates: 2
This is equivalent to running DROP USER jake IF EXISTS
followed by CREATE USER jake SET PASSWORD 'xyz'
.
The |
Modifying users
Users can be modified using ALTER USER
.
ALTER USER name SET {
[PLAINTEXT | ENCRYPTED] PASSWORD 'password'
[[SET PASSWORD] CHANGE [NOT] REQUIRED]
[SET STATUS {ACTIVE | SUSPENDED} ] |
PASSWORD CHANGE [NOT] REQUIRED
[SET STATUS {ACTIVE | SUSPENDED}] |
STATUS {ACTIVE | SUSPENDED}
}
The password
can either be a string value or a string parameter, and must not be identical to the old password. The optional PLAINTEXT
in SET PLAINTEXT PASSWORD
has the same behaviour as SET PASSWORD
. The optional ENCRYPTED
can be used to update a user’s password when the plaintext password is unknown but the encrypted password is available (e.g. from a database backup). With ENCRYPTED
, the password string is expected to be on the format <encryption-version>,<hash>,<salt>
.
For example, we can modify the user jake
with a new password and active status as well as remove the requirement to change his password.
ALTER USER jake SET PASSWORD 'abc123' CHANGE NOT REQUIRED SET STATUS ACTIVE
0 rows, System updates: 1
When altering a user it is only necessary to specify the changes required.
For example, leaving out the |
The |
The changes to the user will appear on the list provided by SHOW USERS
.
SHOW USERS
user | roles | passwordChangeRequired | suspended |
---|---|---|---|
|
|
|
|
|
|
|
|
Rows: 2 |
Changing the current user’s password
Users can change their own password using ALTER CURRENT USER SET PASSWORD
.
The old password is required in addition to the new one, and either or both can be a string value or a string parameter.
When a user executes this command it will change their password as well as set the CHANGE NOT REQUIRED
flag.
ALTER CURRENT USER SET PASSWORD FROM 'abc123' TO '123xyz'
0 rows, System updates: 1
This command only works for a logged in user and cannot be run with auth disabled. |
Deleting users
Users can be deleted using DROP USER
.
DROP USER jake
0 rows, System updates: 1
Deleting a user will not automatically terminate associated connections, sessions, transactions, or queries. |
When a user has been deleted, it will no longer appear on the list provided by SHOW USERS
.
SHOW USERS
user | roles | passwordChangeRequired | suspended |
---|---|---|---|
|
|
|
|
Rows: 1 |
This command is optionally idempotent, with the default behavior to throw an exception if the user does not exists. Appending IF EXISTS
to the command will ensure that no exception is thrown and nothing happens should the user not exist.
DROP USER jake IF EXISTS
0 rows
Role Management
Roles can be created and managed using a set of Cypher administration commands executed against the system
database.
When connected to the DBMS over bolt, administration commands are automatically routed to the system
database.
Command | Description | Required privilege |
---|---|---|
|
List roles. When using the |
|
|
List roles and users assigned to them. When using the |
|
|
List the privileges granted to the specified roles. When using the |
|
|
Create a new role. |
|
|
Create a new role, or if a role with the same name exists, replace it. |
CREATE ROLE and DROP ROLE |
|
Remove a role. |
|
|
Assign roles to users. |
|
|
Remove roles from users. |
The PUBLIC
role
There exists a special built-in role, PUBLIC
, which is assigned to all users.
This role cannot be dropped or revoked from any user, but its privileges may be modified.
By default, it is assigned the ACCESS privilege on the default database and
the EXECUTE privilege for both procedures and functions.
In contrast to the PUBLIC
role, the other built-in roles can be granted, revoked, dropped and re-created.
Listing roles
Available roles can be seen using SHOW ROLES
.
SHOW ROLES
This is the same command as SHOW ALL ROLES
.
When first starting a Neo4j DBMS there are a number of built-in roles:
-
PUBLIC
- a role that all users have granted, and by default, it gives access to the default database and execute privileges for procedures and functions. -
reader
- can perform traverse and read operations on all databases exceptsystem
. -
editor
- can perform traverse, read, and write operations on all databases exceptsystem
, but cannot make new labels or relationship types. -
publisher
- can do the same aseditor
, but also create new labels and relationship types. -
architect
- can do the same aspublisher
as well as create and manage indexes and constraints. -
admin
- can do the same as all the above, as well as manage databases, users, roles, and privileges.
More information about the built-in roles can be found in Operations Manual → Built-in roles
role |
---|
|
|
|
|
|
|
Rows: 6 |
There are multiple versions of this command, the default being SHOW ALL ROLES
. To only show roles that are assigned to users, the command is SHOW POPULATED ROLES
. To see which users are assigned to roles WITH USERS
can be appended to the commands. This will give one result row for each user, so if a role is assigned to two users then it will show up twice in the result.
SHOW POPULATED ROLES WITH USERS
The table of results will show information about the role and what database it belongs to.
role | member |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
Rows: 6 |
It is also possible to filter and sort the results by using YIELD
, ORDER BY
and WHERE
.
SHOW ROLES YIELD role ORDER BY role WHERE role ENDS WITH 'r'
In this example:
-
The results have been filtered to only return the roles ending in 'r'.
-
The results are ordered by the 'action' column using
ORDER BY
.
It is also possible to use SKIP
and LIMIT
to paginate the results.
role |
---|
|
|
|
Rows: 3 |
The |
Creating roles
Roles can be created using CREATE ROLE
.
CREATE ROLE myrole
0 rows, System updates: 1
The following naming rules apply:
|
A role can also be copied, keeping its privileges, using CREATE ROLE AS COPY OF
.
CREATE ROLE mysecondrole AS COPY OF myrole
0 rows, System updates: 1
The created roles will appear on the list provided by SHOW ROLES
.
SHOW ROLES
role |
---|
|
|
|
|
|
|
|
|
Rows: 8 |
These command versions are optionally idempotent, with the default behavior to throw an exception if the role already exists. Appending IF NOT EXISTS
to the command will ensure that no exception is thrown and nothing happens should the role already exist. Adding OR REPLACE
to the command will result in any existing role being deleted and a new one created.
CREATE ROLE myrole IF NOT EXISTS
0 rows
CREATE OR REPLACE ROLE myrole
0 rows, System updates: 2
This is equivalent to running DROP ROLE myrole IF EXISTS
followed by CREATE ROLE myrole
.
The |
Deleting roles
Roles can be deleted using DROP ROLE
command.
DROP ROLE mysecondrole
0 rows, System updates: 1
When a role has been deleted, it will no longer appear on the list provided by SHOW ROLES
.
SHOW ROLES
role |
---|
|
|
|
|
|
|
Rows: 6 |
This command is optionally idempotent, with the default behavior to throw an exception if the role does not exists. Appending IF EXISTS
to the command will ensure that no exception is thrown and nothing happens should the role not exist.
DROP ROLE mysecondrole IF EXISTS
0 rows
Assigning roles to users
Users can be given access rights by assigning them roles using GRANT ROLE
.
GRANT ROLE myrole TO jake
0 rows, System updates: 1
The roles assigned to each user can be seen in the list provided by SHOW USERS
.
SHOW USERS
user | roles | passwordChangeRequired | suspended |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Rows: 5 |
It is possible to assign multiple roles to multiple users in one command.
GRANT ROLES role1, role2 TO user1, user2, user3
0 rows, System updates: 6
SHOW USERS
user | roles | passwordChangeRequired | suspended |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Rows: 5 |
Revoking roles from users
Users can lose access rights by revoking roles from them using REVOKE ROLE
.
REVOKE ROLE myrole FROM jake
0 rows, System updates: 1
The roles revoked from users can no longer be seen in the list provided by SHOW USERS
.
SHOW USERS
user | roles | passwordChangeRequired | suspended |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Rows: 5 |
It is possible to revoke multiple roles from multiple users in one command.
REVOKE ROLES role1, role2 FROM user1, user2, user3
0 rows, System updates: 6