Useful Cypher statements for suspending and reactivating users

Commencing with Neo4j 3.1 and implementaion of native database users
it is possible to suspend a user, thus preventing the user from further authenticating in.

To view all suspended users run the following Cypher

call dbms.security.listUsers() yield username, flags 
with username,flags 
where 'is_suspended' in flags
return username

Further if you encounter the need to suspend all users, for example to prevent all database access during a weekend maintenance period,
the following Cypher can be used to generate Cypher statements which can then be used to suspend and subsequently reactivate all users.

  • Build the Cypher statements to activate all currently 'active' users
<!-- // users with no  is_suspended flag and build the statement to activate the user and not force a password change -->
call dbms.security.listUsers() yield username, flags with username, flags 
where not 'is_suspended' in flags  
return 'call dbms.security.activateUser(\'' + username + '\',false);'
  • Build the Cypher statements to suspend all currently 'active' users
<!-- // users with no  is_suspended flag -->
call dbms.security.listUsers() yield username, flags with username, flags 
where not 'is_suspended' in flags  
return 'call dbms.security.suspendUser(\'' + username + '\');'

Finally at the time of the maintenance window one would first run the generated Cypher statements from above to suspend all users.
Note it is not possible to suspend the user you are currently logged in as and as such you may see a call dbms.security.suspendUser
result in failure error message of 'Suspending yourself (user 'neo4j') is not allowed.'

At the completion of the maintenance window, one would then run the generated Cypher statement to activate all the
currrently defined suspended users.