DBMS 权限
所有 DBMS 权限都与系统范围相关。与用户管理一样,它们不属于特定的数据库或图。有关图、数据库和 DBMS 之间差异的更多详细信息,请参阅 Cypher 手册 → Cypher 和 Neo4j。
admin
角色 具有许多内置权限。其中包括
-
创建、删除和修改数据库和别名。
-
更改配置参数。
-
管理事务。
-
管理用户和角色。
-
管理子图权限。
-
管理过程安全。
-
加载数据。
要启用用户执行这些任务,您可以授予他们 admin
角色,但也可以使用这些权限的子集创建自定义角色。所有权限也可以使用 Cypher 命令分配。有关更多详细信息,请参阅以下部分
使用自定义角色管理DBMS权限
为了拥有一个包含所有DBMS权限但不包含所有数据库权限的管理员角色,您可以复制admin
角色并撤销或拒绝不需要的权限。第二个选项是从头开始构建自定义管理员,方法是授予所需的权限。
例如,可以使用第二个选项创建一个仅用于管理用户和角色的管理员角色。
-
首先,创建新角色。
CREATE ROLE usermanager
-
然后授予管理用户的权限。
GRANT USER MANAGEMENT ON DBMS TO usermanager
-
以及管理角色的权限。
GRANT ROLE MANAGEMENT ON DBMS TO usermanager
生成的这个角色只有用户和角色管理权限。要将角色usermanager
的所有权限列为命令,请运行以下查询:
SHOW ROLE usermanager PRIVILEGES AS COMMANDS
命令 |
---|
|
|
行数:2 |
请注意,此角色并非允许所有DBMS功能。例如,该角色缺少管理、创建和删除数据库以及执行admin
过程的权限。要创建更强大的管理员,您可以授予一组不同的权限。
在以下示例中,将创建一个新的管理员角色来执行几乎所有DBMS功能,但数据库管理除外。但是,该角色仍然具有一些有限的数据库功能,例如管理事务。
-
同样,首先创建新角色。
CREATE ROLE customAdministrator
-
然后授予所有DBMS功能的权限。
GRANT ALL DBMS PRIVILEGES ON DBMS TO customAdministrator
-
并显式拒绝管理数据库和别名的权限。
DENY DATABASE MANAGEMENT ON DBMS TO customAdministrator
-
接下来,授予事务管理权限。
GRANT TRANSACTION MANAGEMENT (*) ON DATABASE * TO customAdministrator
生成的这个角色拥有所有DBMS权限,但创建、删除和修改数据库和别名以及管理事务除外。使用以下查询将角色customAdministrator
的所有权限列为命令:
SHOW ROLE customAdministrator PRIVILEGES AS COMMANDS
命令 |
---|
|
|
|
行数:3 |
DBMS ROLE MANAGEMENT
权限
DBMS角色管理权限可以使用Cypher管理命令分配。它们可以像其他权限一样被授予、拒绝和撤销。
有关语法描述的更多详细信息,请参阅Cypher管理命令语法。 |
命令 | 描述 |
---|---|
|
使指定的这些角色能够创建新角色。 |
|
使指定的这些角色能够更改角色的名称。 |
|
使指定的这些角色能够删除角色。 |
|
使指定的这些角色能够将角色分配给用户。 |
|
使指定的这些角色能够从用户中移除角色。 |
|
使指定的这些角色能够列出角色。 |
|
使指定的这些角色能够创建、删除、分配、移除和列出角色。 |
添加角色的能力可以通过CREATE ROLE
权限授予。请参见示例。
GRANT CREATE ROLE ON DBMS TO roleAdder
生成的这个角色只有添加角色的权限。使用以下查询将角色roleAdder
的所有权限列为命令:
SHOW ROLE roleAdder PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
重命名角色的能力可以通过RENAME ROLE
权限授予。请参见示例。
GRANT RENAME ROLE ON DBMS TO roleNameModifier
生成的这个角色只有重命名角色的权限。使用以下查询列出角色roleNameModifier
的所有权限:
SHOW ROLE roleNameModifier PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
删除角色的能力可以通过DROP ROLE
权限授予。请参见示例。
GRANT DROP ROLE ON DBMS TO roleDropper
生成的这个角色只有删除角色的权限。使用以下查询列出角色roleDropper
的所有权限:
SHOW ROLE roleDropper PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
将角色分配给用户的能力可以通过ASSIGN ROLE
权限授予。请参见示例。
GRANT ASSIGN ROLE ON DBMS TO roleAssigner
生成的这个角色只有分配/授予角色的权限。使用以下查询将角色roleAssigner
的所有权限列为命令:
SHOW ROLE roleAssigner PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
从用户中移除角色的能力可以通过REMOVE ROLE
权限授予。请参见示例。
GRANT REMOVE ROLE ON DBMS TO roleRemover
生成的这个角色只有移除/撤销角色的权限。使用以下查询将角色roleRemover
的所有权限列为命令:
SHOW ROLE roleRemover PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
显示角色的能力可以通过SHOW ROLE
权限授予。具有此权限的角色可以执行SHOW ROLES
和SHOW POPULATED ROLES
管理命令。对于SHOW ROLES WITH USERS
和SHOW POPULATED ROLES WITH USERS
管理命令,需要此权限和SHOW USER
权限。以下查询显示了如何授予SHOW ROLE
权限的示例。
为了能够使用SHOW ROLES WITH USERS
和SHOW POPULATED ROLES WITH USERS
管理命令,需要SHOW ROLE
和SHOW USER
权限。以下是一个授予SHOW ROLE
权限的示例。
GRANT SHOW ROLE ON DBMS TO roleShower
生成的这个角色只有显示角色的权限。使用以下查询将角色roleShower
的所有权限列为命令:
SHOW ROLE roleShower PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
创建、重命名、删除、分配、移除和列出角色的权限可以通过ROLE MANAGEMENT
权限授予。请参见示例。
GRANT ROLE MANAGEMENT ON DBMS TO roleManager
生成的这个角色拥有管理角色的所有权限。使用以下查询将角色roleManager
的所有权限列为命令:
SHOW ROLE roleManager PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
DBMS USER MANAGEMENT
权限
DBMS用户管理权限可以使用Cypher管理命令分配。它们可以像其他权限一样被授予、拒绝和撤销。
有关语法描述的更多详细信息,请参阅Cypher管理命令语法。 |
命令 | 描述 |
---|---|
|
使指定的这些角色能够创建新用户。 |
|
使指定的这些角色能够更改用户的名称。 |
|
使指定的这些角色能够修改用户。 |
|
使指定的这些角色能够修改用户的密码以及这些密码是否必须在首次登录时更改。 |
|
在5.24版本中引入 使指定的这些角色能够 |
|
使指定的这些角色能够修改用户的home数据库。 |
|
使指定的这些角色能够修改用户的帐户状态。 |
|
使指定的这些角色能够删除用户。 |
|
使指定的这些角色能够列出用户。 |
|
使指定的这些角色能够创建、删除、修改和列出用户。 |
添加用户的能力可以通过CREATE USER
权限授予。请参见示例。
GRANT CREATE USER ON DBMS TO userAdder
生成的这个角色只有添加用户的权限。使用此查询将角色userAdder
的所有权限列为命令:
SHOW ROLE userAdder PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
重命名用户的权限可以通过RENAME USER
权限授予。以下查询显示了此示例。
GRANT RENAME USER ON DBMS TO userNameModifier
生成的这个角色只有重命名用户的权限。
SHOW ROLE userNameModifier PRIVILEGES AS COMMANDS
列出角色userNameModifier
的所有权限。
命令 |
---|
|
行数:1 |
修改用户的权限可以通过ALTER USER
权限授予。请参见示例。
GRANT ALTER USER ON DBMS TO userModifier
生成的这个角色只有修改用户的权限。使用以下查询将角色userModifier
的所有权限列为命令:
SHOW ROLE userModifier PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
被授予ALTER USER
权限的用户可以运行ALTER USER
管理命令,并使用一个或多个SET PASSWORD
、SET PASSWORD CHANGE [NOT] REQUIRED
、SET AUTH
、REMOVE AUTH
和SET STATUS
部分。
ALTER USER jake SET PASSWORD 'verysecret' SET STATUS SUSPENDED
修改用户密码以及这些密码是否必须在首次登录时更改的能力可以通过SET PASSWORDS
权限授予。请参见示例。
GRANT SET PASSWORDS ON DBMS TO passwordModifier
生成的这个角色只有修改用户密码以及这些密码是否必须在首次登录时更改的权限。使用以下查询将角色passwordModifier
的所有权限列为命令:
SHOW ROLE passwordModifier PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
被授予SET PASSWORDS
权限的用户可以运行ALTER USER
管理命令,并使用SET PASSWORD
和SET PASSWORD CHANGE [NOT] REQUIRED
部分之一或两者。
ALTER USER jake SET PASSWORD 'abcd5678' CHANGE NOT REQUIRED
在5.24版本中引入 被授予SET AUTH
权限的用户可以运行ALTER USER
管理命令,并使用SET AUTH
和REMOVE AUTH
部分之一或两者。
ALTER USER jake REMOVE AUTH 'native SET AUTH 'oidc-okta' { SET id 'jakesUniqueOktaUserId' }
修改用户帐户状态的能力可以通过SET USER STATUS
权限授予。请参见示例。
GRANT SET USER STATUS ON DBMS TO statusModifier
生成的这个角色只有修改用户帐户状态的权限。使用以下查询将角色statusModifier
的所有权限列为命令:
SHOW ROLE statusModifier PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
被授予SET USER STATUS
权限的用户只能运行带有SET STATUS
部分的ALTER USER
管理命令。
ALTER USER jake SET STATUS ACTIVE
为了能够修改用户的home数据库,请授予SET USER HOME DATABASE
权限。请参见示例。
GRANT SET USER HOME DATABASE ON DBMS TO statusModifier
生成的这个角色只有修改用户home数据库的权限。使用以下查询将角色statusModifier
的所有权限列为命令:
SHOW ROLE statusModifier PRIVILEGES AS COMMANDS
命令 |
---|
|
|
行数:2 |
被授予SET USER HOME DATABASE
权限的用户仅允许运行ALTER USER
管理命令的SET HOME DATABASE
或REMOVE HOME DATABASE
部分。
ALTER USER jake SET HOME DATABASE otherDb
ALTER USER jake REMOVE HOME DATABASE
请注意, |
删除用户的权限可以通过DROP USER
权限授予。请参见示例
GRANT DROP USER ON DBMS TO userDropper
生成的 role 仅具有允许删除用户的权限。使用以下查询以命令的形式列出 role userDropper
的所有权限
SHOW ROLE userDropper PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
显示用户的权限可以通过SHOW USER
权限授予。请参见示例
GRANT SHOW USER ON DBMS TO userShower
生成的 role 仅具有允许显示用户的权限。使用以下查询以命令的形式列出 role userShower
的所有权限
SHOW ROLE userShower PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
创建、重命名、修改、删除和列出用户的权限可以通过USER MANAGEMENT
权限授予。请参见示例
GRANT USER MANAGEMENT ON DBMS TO userManager
生成的 role 具有管理用户的全部权限。使用以下查询以命令的形式列出 role userManager
的所有权限
SHOW ROLE userManager PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
DBMS IMPERSONATE
权限
模拟的 DBMS 权限可以通过 Cypher 管理命令分配。它们可以像其他权限一样被授予、拒绝和撤销。
模拟是指用户能够承担另一个用户的角色(以及相应的权限),但不能以被模拟用户的身份执行更新admin
命令(即,他们仍然能够使用SHOW
命令)。
模拟用户的权限可以通过IMPERSONATE
权限授予。
有关语法描述的更多详细信息,请参阅Cypher管理命令语法。 |
命令 | 描述 |
---|---|
|
允许指定的 role 模拟任何用户。 |
|
允许指定的 role 模拟指定的用户。 |
以下查询显示了一个示例。请注意,为了使此查询生效,userImpersonator
必须是已存在的 role
GRANT IMPERSONATE (*) ON DBMS TO userImpersonator
生成的 role 具有模拟所有用户的权限
SHOW ROLE userImpersonator PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
也可以拒绝和撤销该权限。请参见一个示例,该示例说明了userImpersonator
用户如何能够模拟所有用户,除了alice
DENY IMPERSONATE (alice) ON DBMS TO userImpersonator
要授予(或撤销)模拟特定用户或用户子集的权限,您可以首先使用此查询列出它们
GRANT IMPERSONATE (alice, bob) ON DBMS TO userImpersonator
DBMS DATABASE MANAGEMENT
权限
DBMS 数据库管理权限可以通过 Cypher 管理命令分配。它们可以像其他权限一样被授予、拒绝和撤销。
有关语法描述的更多详细信息,请参阅Cypher管理命令语法。 |
命令 | 描述 |
---|---|
|
允许指定的 role 创建新的标准数据库和别名。 |
|
允许指定的 role 删除标准数据库和别名。 |
|
允许指定的 role 修改标准数据库和别名。 |
|
允许指定的 role 修改对标准数据库的访问权限。 |
|
允许指定的 role 创建新的复合数据库。 |
|
允许指定的 role 删除复合数据库。 |
|
允许指定的 role 创建和删除复合数据库。 |
|
允许指定的 role 创建、删除和修改数据库和别名。 |
创建标准数据库和别名的权限可以通过CREATE DATABASE
权限授予。请参见示例
GRANT CREATE DATABASE ON DBMS TO databaseAdder
生成的 role 仅具有允许创建标准数据库和别名的权限。使用以下查询以命令的形式列出 role databaseAdder
的所有权限
SHOW ROLE databaseAdder PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
创建复合数据库的权限可以通过CREATE COMPOSITE DATABASE
权限授予。请参见示例
GRANT CREATE COMPOSITE DATABASE ON DBMS TO compositeDatabaseAdder
生成的 role 仅具有允许创建复合数据库的权限。使用以下查询以命令的形式列出 role compositeDatabaseAdder
的所有权限
SHOW ROLE compositeDatabaseAdder PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
删除标准数据库和别名的权限可以通过DROP DATABASE
权限授予。请参见示例
GRANT DROP DATABASE ON DBMS TO databaseDropper
生成的 role 仅具有允许删除标准数据库和别名的权限。使用以下查询以命令的形式列出 role databaseDropper
的所有权限
SHOW ROLE databaseDropper PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
删除复合数据库的权限可以通过DROP COMPOSITE DATABASE
权限授予。请参见示例
GRANT DROP COMPOSITE DATABASE ON DBMS TO compositeDatabaseDropper
生成的 role 仅具有允许删除复合数据库的权限。使用以下查询以命令的形式列出 role compositeDatabaseDropper
的所有权限
SHOW ROLE compositeDatabaseDropper PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
修改标准数据库和别名的权限可以通过ALTER DATABASE
权限授予。请参见示例
GRANT ALTER DATABASE ON DBMS TO databaseModifier
生成的 role 仅具有允许修改标准数据库和别名的权限。使用以下查询以命令的形式列出 role databaseModifier
的所有权限
SHOW ROLE databaseModifier PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
修改对标准数据库的访问权限可以通过SET DATABASE ACCESS
权限授予。请参见示例
GRANT SET DATABASE ACCESS ON DBMS TO accessModifier
生成的 role 仅具有允许修改对标准数据库的访问权限。使用以下查询以命令的形式列出 role accessModifier
的所有权限
SHOW ROLE accessModifier PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
创建和删除复合数据库的权限可以通过COMPOSITE DATABASE MANAGEMENT
权限授予。请参见示例
GRANT COMPOSITE DATABASE MANAGEMENT ON DBMS TO compositeDatabaseManager
生成的 role 具有管理复合数据库的全部权限。使用以下查询以命令的形式列出 role compositeDatabaseManager
的所有权限
SHOW ROLE compositeDatabaseManager PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
创建、删除和修改数据库和别名的权限可以通过DATABASE MANAGEMENT
权限授予。请参见示例
GRANT DATABASE MANAGEMENT ON DBMS TO databaseManager
生成的 role 具有管理标准和复合数据库以及别名的全部权限。使用以下查询以命令的形式列出 role databaseManager
的所有权限
SHOW ROLE databaseManager PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
DBMS ALIAS MANAGEMENT
权限
DBMS 别名管理权限可以通过 Cypher 管理命令分配,并且可以应用于本地和远程别名。它们可以像其他权限一样被授予、拒绝和撤销。也可以使用数据库管理命令来管理别名。
有关语法描述的更多详细信息,请参阅Cypher管理命令语法。 |
命令 | 描述 |
---|---|
|
允许指定的 role 创建新的别名。 |
|
允许指定的 role 删除别名。 |
|
允许指定的 role 修改别名。 |
|
允许指定的 role 列出别名。 |
|
允许指定的 role 列出、创建、删除和修改别名。 |
创建别名的权限可以通过CREATE ALIAS
权限授予。请参见示例
GRANT CREATE ALIAS ON DBMS TO aliasAdder
生成的 role 仅具有允许创建别名的权限。使用以下查询以命令的形式列出 role aliasAdder
的所有权限
SHOW ROLE aliasAdder PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
删除别名的权限可以通过DROP ALIAS
权限授予。请参见示例
GRANT DROP ALIAS ON DBMS TO aliasDropper
生成的 role 仅具有允许删除别名的权限。使用以下查询以命令的形式查看 role aliasDropper
的所有权限
SHOW ROLE aliasDropper PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
修改别名的权限可以通过ALTER ALIAS
权限授予。请参见示例
GRANT ALTER ALIAS ON DBMS TO aliasModifier
生成的 role 仅具有允许修改别名的权限。使用以下查询以命令的形式列出 role aliasModifier
的所有权限
SHOW ROLE aliasModifier PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
列出别名的权限可以通过SHOW ALIAS
权限授予。请参见示例
GRANT SHOW ALIAS ON DBMS TO aliasLister
生成的 role 仅具有允许修改别名的权限。使用以下查询以命令的形式列出 role aliasLister
的所有权限
SHOW ROLE aliasLister PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
列出、创建、删除和修改别名的权限可以通过ALIAS MANAGEMENT
权限授予。请参见示例
GRANT ALIAS MANAGEMENT ON DBMS TO aliasManager
生成的 role 具有管理别名的全部权限。使用以下查询以命令的形式列出 role aliasManager
的所有权限
SHOW ROLE aliasManager PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
DBMS SERVER MANAGEMENT
权限
DBMS 服务器管理权限可以使用 Cypher 管理命令分配。它们可以像其他权限一样被授予、拒绝和撤销。
有关语法描述的更多详细信息,请参阅Cypher管理命令语法。 |
命令 | 描述 |
---|---|
|
允许指定的 role 显示、启用、重命名、更改、重新分配、释放和删除服务器。 |
|
允许指定的 role 显示服务器。 |
DBMS PRIVILEGE MANAGEMENT
权限
DBMS 权限管理权限可以通过 Cypher 管理命令分配。它们可以像其他权限一样被授予、拒绝和撤销。
有关语法描述的更多详细信息,请参阅Cypher管理命令语法。 |
命令 | 描述 |
---|---|
|
允许指定的 role 列出权限。 |
|
允许指定的 role 使用 |
|
允许指定的 role 使用 |
|
允许指定的 role 列出、分配和删除权限。 |
列出权限的权限可以通过SHOW PRIVILEGE
权限授予。
具有此权限的用户可以执行SHOW PRIVILEGES
和SHOW ROLE roleName PRIVILEGES
管理命令。要执行SHOW USER username PRIVILEGES
管理命令,需要此权限和SHOW USER
权限。以下查询显示了如何授予SHOW PRIVILEGE
权限的示例
GRANT SHOW PRIVILEGE ON DBMS TO privilegeShower
生成的 role 仅具有允许显示权限的权限。使用以下查询以命令的形式列出 role privilegeShower
的所有权限
SHOW ROLE privilegeShower PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
请注意,通过 此外,请注意,如果使用了 LDAP 等非原生身份验证提供程序,则 |
授予角色分配权限的能力可以通过ASSIGN PRIVILEGE
权限来实现。拥有此权限的用户可以执行GRANT
和DENY
管理命令。请参阅如何授予此权限的示例
GRANT ASSIGN PRIVILEGE ON DBMS TO privilegeAssigner
生成的 角色仅具有分配权限的权限。使用以下查询,以命令的形式列出角色privilegeAssigner
的所有权限
SHOW ROLE privilegeAssigner PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
从角色中删除权限的能力可以通过REMOVE PRIVILEGE
权限来实现。
拥有此权限的用户可以执行REVOKE
管理命令。请参阅如何授予此权限的示例
GRANT REMOVE PRIVILEGE ON DBMS TO privilegeRemover
生成的 角色仅具有删除权限的权限。使用以下查询,以命令的形式列出角色privilegeRemover
的所有权限
SHOW ROLE privilegeRemover PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
列出、分配和删除权限的权限可以通过PRIVILEGE MANAGEMENT
权限来实现。请参阅示例
GRANT PRIVILEGE MANAGEMENT ON DBMS TO privilegeManager
生成的 角色拥有管理权限的所有权限。使用以下查询,以命令的形式列出角色privilegeManager
的所有权限
SHOW ROLE privilegeManager PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
DBMS EXECUTE
权限
用于过程和用户定义函数执行的 DBMS 权限可以通过 Cypher 管理命令分配。它们可以像其他权限一样被授予、拒绝和撤销。
有关语法描述的更多详细信息,请参阅Cypher管理命令语法。 |
命令 | 描述 |
---|---|
|
使指定的 角色能够执行给定的过程。 |
|
使指定的 角色能够在执行给定的过程时使用提升的权限。 |
|
使指定的 角色能够执行用 |
|
使指定的 角色能够执行给定的用户定义函数。 |
|
使指定的 角色能够在执行给定的用户定义函数时使用提升的权限。 |
EXECUTE PROCEDURE
权限
执行过程的能力可以通过EXECUTE PROCEDURE
权限来实现。拥有此权限的角色可以执行与名称通配匹配的过程。以下查询显示了如何授予此权限的示例
GRANT EXECUTE PROCEDURE db.schema.* ON DBMS TO procedureExecutor
拥有角色procedureExecutor
的用户可以运行db.schema
命名空间中的任何过程。过程将使用用户自己的权限运行。
生成的 角色仅具有在db.schema
命名空间中执行过程的权限。使用以下查询,以命令的形式列出角色procedureExecutor
的所有权限
SHOW ROLE procedureExecutor PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
为了允许执行除少数过程外的所有过程,您可以授予EXECUTE PROCEDURES *
并拒绝不需要的过程。例如,以下查询允许执行所有过程,除了以dbms.cluster
开头的过程
GRANT EXECUTE PROCEDURE * ON DBMS TO deniedProcedureExecutor
DENY EXECUTE PROCEDURE dbms.cluster* ON DBMS TO deniedProcedureExecutor
生成的 角色仅具有执行除以dbms.cluster
开头的过程之外的所有过程的权限。使用以下查询,以命令的形式列出角色deniedProcedureExecutor
的所有权限
SHOW ROLE deniedProcedureExecutor PRIVILEGES AS COMMANDS
命令 |
---|
|
|
行数:2 |
dbms.cluster.checkConnectivity
、dbms.cluster.cordonServer
、dbms.cluster.protocols
、dbms.cluster.readReplicaToggle
、dbms.cluster.routing.getRoutingTable
、dbms.cluster.secondaryReplicationDisable
、dbms.cluster.setAutomaticallyEnableFreeServers
和dbms.cluster.uncordonServer
过程被阻止,以及任何其他以dbms.cluster
开头的过程。
EXECUTE BOOSTED PROCEDURE
权限
在执行过程时使用提升的权限的能力可以通过EXECUTE BOOSTED PROCEDURE
权限来实现。拥有此权限的用户在执行与名称通配匹配的过程时,不会受到其其他权限的限制。EXECUTE BOOSTED PROCEDURE
权限仅影响提升,而不影响过程的执行。因此,还需要为过程授予EXECUTE PROCEDURE
权限。
从 Neo4j 5.0 开始,需要 |
GRANT EXECUTE PROCEDURE * ON DBMS TO boostedProcedureExecutor;
GRANT EXECUTE BOOSTED PROCEDURE db.labels, db.relationshipTypes ON DBMS TO boostedProcedureExecutor
因此,拥有角色boostedProcedureExecutor
的用户可以运行db.labels
和db.relationshipTypes
过程并拥有完全权限,查看图中的所有内容,而不仅仅是用户拥有TRAVERSE
权限的标签和类型。如果没有EXECUTE PROCEDURE
,则根本无法执行任何过程。
生成的 角色具有允许以提升的权限执行过程db.labels
和db.relationshipTypes
以及以用户自己的权限执行所有其他过程的权限
SHOW ROLE boostedProcedureExecutor PRIVILEGES AS COMMANDS
命令 |
---|
|
|
|
行数:3 |
与授予权限一样,单独拒绝EXECUTE BOOSTED PROCEDURE
只会影响提升,而不会影响过程的执行。这可以在以下示例中看到
EXECUTE PROCEDURE
并拒绝EXECUTE BOOSTED PROCEDURE
GRANT EXECUTE PROCEDURE * ON DBMS TO deniedBoostedProcedureExecutor1
DENY EXECUTE BOOSTED PROCEDURE db.labels ON DBMS TO deniedBoostedProcedureExecutor1
生成的 角色具有允许使用用户自己的权限执行所有过程的权限。它还阻止了db.labels
过程被提升。但是,被拒绝的EXECUTE BOOSTED PROCEDURE
不会阻止db.labels
的执行。
要以命令的形式列出角色deniedBoostedProcedureExecutor1
的所有权限,请使用以下查询
SHOW ROLE deniedBoostedProcedureExecutor1 PRIVILEGES AS COMMANDS
命令 |
---|
|
|
行数:2 |
EXECUTE BOOSTED PROCEDURE
并拒绝EXECUTE PROCEDURE
GRANT EXECUTE BOOSTED PROCEDURE * ON DBMS TO deniedBoostedProcedureExecutor2
DENY EXECUTE PROCEDURE db.labels ON DBMS TO deniedBoostedProcedureExecutor2
生成的 角色具有允许提升所有过程的权限的权限,但由于缺少或被拒绝的EXECUTE PROCEDURE
权限而无法执行任何过程。使用以下查询,以命令的形式列出角色deniedBoostedProcedureExecutor2
的所有权限
SHOW ROLE deniedBoostedProcedureExecutor2 PRIVILEGES AS COMMANDS
命令 |
---|
|
|
行数:2 |
EXECUTE BOOSTED PROCEDURE
并拒绝EXECUTE BOOSTED PROCEDURE
GRANT EXECUTE BOOSTED PROCEDURE * ON DBMS TO deniedBoostedProcedureExecutor3
DENY EXECUTE BOOSTED PROCEDURE db.labels ON DBMS TO deniedBoostedProcedureExecutor3
生成的 角色具有允许提升除db.labels
之外的所有过程的权限的权限,但是由于缺少EXECUTE PROCEDURE
权限而无法执行任何过程。使用以下查询,以命令的形式列出角色deniedBoostedProcedureExecutor3
的所有权限
SHOW ROLE deniedBoostedProcedureExecutor3 PRIVILEGES AS COMMANDS
命令 |
---|
|
|
行数:2 |
假设有一个名为myProc
的过程。
对于拥有EXECUTE PROCEDURE
权限的用户,此过程返回结果A
和B
;对于拥有EXECUTE BOOSTED PROCEDURE
权限的用户,此过程返回结果A
、B
和C
。
现在,调整示例 1 到 3 中的权限以应用于此过程,并显示返回的结果。使用示例 1 中的权限,授予EXECUTE PROCEDURE *
并拒绝EXECUTE BOOSTED PROCEDURE myProc
,myProc
过程返回结果A
和B
。
使用示例 2 中的权限,授予EXECUTE BOOSTED PROCEDURE *
并拒绝EXECUTE PROCEDURE myProc
,不允许执行myProc
过程。
使用示例 3 中的权限,授予EXECUTE BOOSTED PROCEDURE *
并拒绝EXECUTE BOOSTED PROCEDURE myProc
,不允许执行myProc
过程。
为了进行比较,当授予
-
EXECUTE PROCEDURE myProc
:myProc
过程返回结果A
和B
。 -
EXECUTE BOOSTED PROCEDURE myProc
:不允许执行myProc
过程。 -
EXECUTE PROCEDURE myProc
和EXECUTE BOOSTED PROCEDURE myProc
:myProc
过程返回结果A
、B
和C
。
EXECUTE ADMIN PROCEDURE
权限
执行管理过程(用@Admin
注释)的能力可以通过EXECUTE ADMIN PROCEDURES
权限来实现。此权限等同于为每个管理过程授予EXECUTE PROCEDURE
和EXECUTE BOOSTED PROCEDURE
权限。任何新添加的admin
过程都将自动包含在此权限中。以下查询显示了如何授予此权限的示例
GRANT EXECUTE ADMIN PROCEDURES ON DBMS TO adminProcedureExecutor
拥有角色adminProcedureExecutor
的用户可以运行任何admin
过程并拥有提升的权限。生成的 角色具有允许执行所有管理过程的权限。
使用以下查询,以命令的形式列出角色adminProcedureExecutor
的所有权限
SHOW ROLE adminProcedureExecutor PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
为了将此与EXECUTE PROCEDURE
和EXECUTE BOOSTED PROCEDURE
权限进行比较,请重新访问myProc
过程,但这次将其作为admin
过程,当允许执行时,它将返回结果A
、B
和C
。
从仅授予EXECUTE PROCEDURE myProc
或EXECUTE BOOSTED PROCEDURE myProc
权限的用户开始,不允许执行myProc
过程。
但是,对于授予EXECUTE ADMIN PROCEDURES
或同时授予EXECUTE PROCEDURE myProc
和EXECUTE BOOSTED PROCEDURE myProc
权限的用户,myProc
过程将返回结果A
、B
和C
。
任何被拒绝的EXECUTE
权限都将导致不允许执行该过程。在这种情况下,拒绝EXECUTE PROCEDURE
、EXECUTE BOOSTED PROCEDURE
或EXECUTE ADMIN PROCEDURES
都没有关系。
EXECUTE USER DEFINED FUNCTION
权限
可以通过EXECUTE USER DEFINED FUNCTION
权限授予执行用户定义函数 (UDF) 的能力。拥有此权限的角色可以执行与名称通配匹配的UDF。
|
以下查询展示了如何授予此权限的示例
GRANT EXECUTE USER DEFINED FUNCTION apoc.coll.* ON DBMS TO functionExecutor
或简写形式
GRANT EXECUTE FUNCTION apoc.coll.* ON DBMS TO functionExecutor
拥有functionExecutor
角色的用户因此可以运行apoc.coll
命名空间中的任何UDF。此处的函数使用用户的自身权限运行。
生成的权限仅允许在apoc.coll
命名空间中执行UDF。使用以下查询将角色functionExecutor
的所有权限列为命令
SHOW ROLE functionExecutor PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
要允许执行除少数UDF之外的所有UDF,您可以授予EXECUTE USER DEFINED FUNCTIONS *
权限并拒绝不需要的函数。
以下查询允许执行除以apoc.any.prop
开头的所有UDF之外的所有UDF
GRANT EXECUTE USER DEFINED FUNCTIONS * ON DBMS TO deniedFunctionExecutor
DENY EXECUTE USER DEFINED FUNCTION apoc.any.prop* ON DBMS TO deniedFunctionExecutor
或简写形式
GRANT EXECUTE FUNCTIONS * ON DBMS TO deniedFunctionExecutor
DENY EXECUTE FUNCTION apoc.any.prop* ON DBMS TO deniedFunctionExecutor
生成的权限仅允许执行除以apoc.any.prop
开头的所有过程之外的所有过程。使用以下查询将角色deniedFunctionExecutor
的所有权限列为命令
SHOW ROLE deniedFunctionExecutor PRIVILEGES AS COMMANDS
命令 |
---|
|
|
行数:2 |
apoc.any.property
和apoc.any.properties
被阻止,以及任何其他以apoc.any.prop
开头的过程。
EXECUTE BOOSTED USER DEFINED FUNCTION
权限
可以通过EXECUTE BOOSTED USER DEFINED FUNCTION
权限授予在执行用户定义函数 (UDF) 时使用提升权限的能力。拥有此权限的用户在执行与名称通配匹配的UDF时,不会受到其其他权限的限制。EXECUTE BOOSTED USER DEFINED FUNCTION
权限仅影响权限提升,而不影响函数的执行。因此,还需要为函数授予EXECUTE USER DEFINED FUNCTION
权限。
从 Neo4j 5.0 开始,需要 |
|
以下查询展示了如何授予EXECUTE BOOSTED USER DEFINED FUNCTION
权限的示例
GRANT EXECUTE USER DEFINED FUNCTION * ON DBMS TO boostedFunctionExecutor
GRANT EXECUTE BOOSTED USER DEFINED FUNCTION apoc.any.properties ON DBMS TO boostedFunctionExecutor
或简写形式
GRANT EXECUTE FUNCTION * ON DBMS TO boostedFunctionExecutor
GRANT EXECUTE BOOSTED FUNCTION apoc.any.properties ON DBMS TO boostedFunctionExecutor
拥有boostedFunctionExecutor
角色的用户因此可以使用完全权限运行apoc.any.properties
,并查看节点/关系上的所有属性,而不仅仅是用户具有READ
权限的属性。如果没有EXECUTE USER DEFINED FUNCTION
,则根本无法执行任何UDF。
生成的权限允许以提升的权限执行UDF apoc.any.properties
,并以用户的自身权限执行所有其他UDF。使用以下查询将角色boostedFunctionExecutor
的所有权限列为命令
SHOW ROLE boostedFunctionExecutor PRIVILEGES AS COMMANDS
命令 |
---|
|
|
行数:2 |
DBMS SETTING
权限
可以通过SHOW SETTING
权限授予显示配置设置的能力。拥有此权限的角色可以查询与名称通配匹配的配置设置。
有关语法描述的更多详细信息,请参阅Cypher管理命令语法。 |
命令 | 描述 |
---|---|
|
使指定的权限能够查询给定的配置设置。 |
以下查询展示了如何授予此权限的示例
GRANT SHOW SETTING server.bolt.* ON DBMS TO configurationViewer
拥有configurationViewer
角色的用户然后可以查询server.bolt
命名空间中的任何设置。
更新后的角色configurationViewer
的权限仅允许查询server.bolt
命名空间中的设置。使用以下查询将角色configurationViewer
的所有权限列为命令
SHOW ROLE configurationViewer PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
要拒绝角色的特定设置,首先授予SHOW SETTINGS *
权限,然后拒绝不需要的设置。例如,以下查询允许查询所有设置,除了以dbms.security
开头的设置
GRANT SHOW SETTINGS * ON DBMS TO deniedConfigurationViewer
DENY SHOW SETTING dbms.security* ON DBMS TO deniedConfigurationViewer
生成的权限允许查询所有设置,除了以dbms.security
开头的设置。使用以下查询将角色deniedConfigurationViewer
的所有权限列为命令
SHOW ROLE deniedConfigurationViewer PRIVILEGES AS COMMANDS
命令 |
---|
|
|
行数:2 |
如查询结果所示,对以dbms.security
开头的任何设置的访问都被阻止,但其余设置仍然可以查询。
授予ALL DBMS PRIVILEGES
可以通过单个命令实现执行以下权限的权利
-
创建、删除、分配、移除和显示角色。
-
创建、修改、删除、显示和模拟用户。
-
创建、修改和删除数据库和别名。
-
启用、修改、重命名、重新分配、释放和删除服务器
-
显示、分配和移除权限。
-
以提升的权限执行所有过程。
-
以提升的权限执行所有用户定义函数。
-
显示所有配置设置。
有关语法描述的更多详细信息,请参阅Cypher管理命令语法。 |
GRANT [IMMUTABLE] ALL [[DBMS] PRIVILEGES]
ON DBMS
TO role[, ...]
例如,要授予角色dbmsManager
上述能力,请使用以下查询
GRANT ALL DBMS PRIVILEGES ON DBMS TO dbmsManager
可以使用SHOW PRIVILEGES
命令查看授予的权限
SHOW ROLE dbmsManager PRIVILEGES AS COMMANDS
命令 |
---|
|
行数:1 |
过程、用户定义函数和设置的名称通配
过程、用户定义函数和设置名称的名称通配是文件名扩展的通配的简化版本。它只允许两个通配符:*
和?
,它们用于多个和单个字符匹配。在这种情况下,*
表示0个或多个字符,?
匹配正好一个字符。
名称通配受Cypher 手册 → 命名规则和建议的约束,但例外的是它可以包含点、星号和问号,而无需使用反引号进行转义。 用点分隔的名称通配的每一部分都可以单独转义。例如, |
给定以下过程列表
-
mine.public.exampleProcedure
-
mine.public.exampleProcedure1
-
mine.public.exampleProcedure2
-
mine.public.with#Special§Characters
-
mine.private.exampleProcedure
-
mine.private.exampleProcedure1
-
mine.private.exampleProcedure2
-
mine.private.with#Special§Characters
-
your.exampleProcedure
以下示例演示了如何在控制对过程的访问时使用名称通配模式。请注意,相同的规则适用于用户定义函数和设置。
GRANT EXECUTE PROCEDURE * ON DBMS TO globbing1
拥有globbing1
角色的用户可以运行所有过程。
GRANT EXECUTE PROCEDURE mine.*.exampleProcedure ON DBMS TO globbing2
拥有globbing2
角色的用户可以运行过程mine.public.exampleProcedure
和mine.private.exampleProcedure
,但不能运行其他过程。
GRANT EXECUTE PROCEDURE mine.*.exampleProcedure? ON DBMS TO globbing3
拥有globbing3
角色的用户可以运行过程mine.public.exampleProcedure1
、mine.private.exampleProcedure1
和mine.private.exampleProcedure2
,但不能运行其他过程。
GRANT EXECUTE PROCEDURE *.exampleProcedure ON DBMS TO globbing4
拥有globbing4
角色的用户可以运行过程your.exampleProcedure
、mine.public.exampleProcedure
和mine.private.exampleProcedure
,但不能运行其他过程。
GRANT EXECUTE PROCEDURE mine.public.exampleProcedure* ON DBMS TO globbing5
拥有globbing5
角色的用户可以运行过程mine.public.exampleProcedure
、mine.public.exampleProcedure1
和mine.public.exampleProcedure42
,但不能运行其他过程。
GRANT EXECUTE PROCEDURE `mine.public.with#*§Characters`, mine.private.`with#Spec???§Characters` ON DBMS TO globbing6
拥有globbing6
角色的用户可以运行过程mine.public.with#Special§Characters
和mine.private.with#Special§Characters
,但不能运行其他过程。
名称通配可以完全或部分转义。 |