DBMS 权限

所有 DBMS 权限都与系统范围相关。与用户管理一样,它们不属于特定的数据库或图。有关图、数据库和 DBMS 之间差异的更多详细信息,请参阅 Cypher 手册 → Cypher 和 Neo4j

privileges grant and deny syntax dbms privileges
图 1. GRANT 和 DENY DBMS 权限的语法
privileges hierarchy dbms
图 2. DBMS 权限层次结构

admin 角色 具有许多内置权限。其中包括

  • 创建、删除和修改数据库和别名。

  • 更改配置参数。

  • 管理事务。

  • 管理用户和角色。

  • 管理子图权限。

  • 管理过程安全。

  • 加载数据。

要启用用户执行这些任务,您可以授予他们 admin 角色,但也可以使用这些权限的子集创建自定义角色。所有权限也可以使用 Cypher 命令分配。有关更多详细信息,请参阅以下部分

使用自定义角色管理DBMS权限

为了拥有一个包含所有DBMS权限但不包含所有数据库权限的管理员角色,您可以复制admin角色并撤销或拒绝不需要的权限。第二个选项是从头开始构建自定义管理员,方法是授予所需的权限。

例如,可以使用第二个选项创建一个仅用于管理用户和角色的管理员角色。

  1. 首先,创建新角色。

    CREATE ROLE usermanager
  2. 然后授予管理用户的权限。

    GRANT USER MANAGEMENT ON DBMS TO usermanager
  3. 以及管理角色的权限。

    GRANT ROLE MANAGEMENT ON DBMS TO usermanager

生成的这个角色只有用户和角色管理权限。要将角色usermanager的所有权限列为命令,请运行以下查询:

SHOW ROLE usermanager PRIVILEGES AS COMMANDS
表1. 结果
命令

"GRANT ROLE MANAGEMENT ON DBMS TO `usermanager`"

"GRANT USER MANAGEMENT ON DBMS TO `usermanager`"

行数:2

请注意,此角色并非允许所有DBMS功能。例如,该角色缺少管理、创建和删除数据库以及执行admin过程的权限。要创建更强大的管理员,您可以授予一组不同的权限。

在以下示例中,将创建一个新的管理员角色来执行几乎所有DBMS功能,但数据库管理除外。但是,该角色仍然具有一些有限的数据库功能,例如管理事务。

  1. 同样,首先创建新角色。

    CREATE ROLE customAdministrator
  2. 然后授予所有DBMS功能的权限。

    GRANT ALL DBMS PRIVILEGES ON DBMS TO customAdministrator
  3. 并显式拒绝管理数据库和别名的权限。

    DENY DATABASE MANAGEMENT ON DBMS TO customAdministrator
  4. 接下来,授予事务管理权限。

    GRANT TRANSACTION MANAGEMENT (*) ON DATABASE * TO customAdministrator

生成的这个角色拥有所有DBMS权限,但创建、删除和修改数据库和别名以及管理事务除外。使用以下查询将角色customAdministrator的所有权限列为命令:

SHOW ROLE customAdministrator PRIVILEGES AS COMMANDS
表2. 结果
命令

"DENY DATABASE MANAGEMENT ON DBMS TO `customAdministrator`"

"GRANT ALL DBMS PRIVILEGES ON DBMS TO `customAdministrator`"

"GRANT TRANSACTION MANAGEMENT (*) ON DATABASE * TO `customAdministrator`"

行数:3

DBMS ROLE MANAGEMENT权限

DBMS角色管理权限可以使用Cypher管理命令分配。它们可以像其他权限一样被授予、拒绝和撤销。

有关语法描述的更多详细信息,请参阅Cypher管理命令语法

表3. 角色管理权限命令语法
命令 描述
GRANT [IMMUTABLE] CREATE ROLE
  ON DBMS
  TO role[, ...]

使指定的这些角色能够创建新角色。

GRANT [IMMUTABLE] RENAME ROLE
  ON DBMS
  TO role[, ...]

使指定的这些角色能够更改角色的名称。

GRANT [IMMUTABLE] DROP ROLE
  ON DBMS
  TO role[, ...]

使指定的这些角色能够删除角色。

GRANT [IMMUTABLE] ASSIGN ROLE
  ON DBMS
  TO role[, ...]

使指定的这些角色能够将角色分配给用户。

GRANT [IMMUTABLE] REMOVE ROLE
  ON DBMS
  TO role[, ...]

使指定的这些角色能够从用户中移除角色。

GRANT [IMMUTABLE] SHOW ROLE
  ON DBMS
  TO role[, ...]

使指定的这些角色能够列出角色。

GRANT [IMMUTABLE] ROLE MANAGEMENT
  ON DBMS
  TO role[, ...]

使指定的这些角色能够创建、删除、分配、移除和列出角色。

添加角色的能力可以通过CREATE ROLE权限授予。请参见示例。

GRANT CREATE ROLE ON DBMS TO roleAdder

生成的这个角色只有添加角色的权限。使用以下查询将角色roleAdder的所有权限列为命令:

SHOW ROLE roleAdder PRIVILEGES AS COMMANDS
表4. 结果
命令

"GRANT CREATE ROLE ON DBMS TO `roleAdder`"

行数:1

重命名角色的能力可以通过RENAME ROLE权限授予。请参见示例。

GRANT RENAME ROLE ON DBMS TO roleNameModifier

生成的这个角色只有重命名角色的权限。使用以下查询列出角色roleNameModifier的所有权限:

SHOW ROLE roleNameModifier PRIVILEGES AS COMMANDS
表5. 结果
命令

"GRANT RENAME ROLE ON DBMS TO `roleNameModifier`"

行数:1

删除角色的能力可以通过DROP ROLE权限授予。请参见示例。

GRANT DROP ROLE ON DBMS TO roleDropper

生成的这个角色只有删除角色的权限。使用以下查询列出角色roleDropper的所有权限:

SHOW ROLE roleDropper PRIVILEGES AS COMMANDS
表6. 结果
命令

"GRANT DROP ROLE ON DBMS TO `roleDropper`"

行数:1

将角色分配给用户的能力可以通过ASSIGN ROLE权限授予。请参见示例。

GRANT ASSIGN ROLE ON DBMS TO roleAssigner

生成的这个角色只有分配/授予角色的权限。使用以下查询将角色roleAssigner的所有权限列为命令:

SHOW ROLE roleAssigner PRIVILEGES AS COMMANDS
表7. 结果
命令

"GRANT ASSIGN ROLE ON DBMS TO `roleAssigner`"

行数:1

从用户中移除角色的能力可以通过REMOVE ROLE权限授予。请参见示例。

GRANT REMOVE ROLE ON DBMS TO roleRemover

生成的这个角色只有移除/撤销角色的权限。使用以下查询将角色roleRemover的所有权限列为命令:

SHOW ROLE roleRemover PRIVILEGES AS COMMANDS
表8. 结果
命令

"GRANT REMOVE ROLE ON DBMS TO `roleRemover`"

行数:1

显示角色的能力可以通过SHOW ROLE权限授予。具有此权限的角色可以执行SHOW ROLESSHOW POPULATED ROLES管理命令。对于SHOW ROLES WITH USERSSHOW POPULATED ROLES WITH USERS管理命令,需要此权限和SHOW USER权限。以下查询显示了如何授予SHOW ROLE权限的示例。

为了能够使用SHOW ROLES WITH USERSSHOW POPULATED ROLES WITH USERS管理命令,需要SHOW ROLESHOW USER权限。以下是一个授予SHOW ROLE权限的示例。

GRANT SHOW ROLE ON DBMS TO roleShower

生成的这个角色只有显示角色的权限。使用以下查询将角色roleShower的所有权限列为命令:

SHOW ROLE roleShower PRIVILEGES AS COMMANDS
表9. 结果
命令

"GRANT SHOW ROLE ON DBMS TO `roleShower`"

行数:1

创建、重命名、删除、分配、移除和列出角色的权限可以通过ROLE MANAGEMENT权限授予。请参见示例。

GRANT ROLE MANAGEMENT ON DBMS TO roleManager

生成的这个角色拥有管理角色的所有权限。使用以下查询将角色roleManager的所有权限列为命令:

SHOW ROLE roleManager PRIVILEGES AS COMMANDS
表10. 结果
命令

"GRANT ROLE MANAGEMENT ON DBMS TO `roleManager`"

行数:1

DBMS USER MANAGEMENT权限

DBMS用户管理权限可以使用Cypher管理命令分配。它们可以像其他权限一样被授予、拒绝和撤销。

有关语法描述的更多详细信息,请参阅Cypher管理命令语法

表11. 用户管理权限命令语法
命令 描述
GRANT [IMMUTABLE] CREATE USER
  ON DBMS
  TO role[, ...]

使指定的这些角色能够创建新用户。

GRANT [IMMUTABLE] RENAME USER
  ON DBMS
  TO role[, ...]

使指定的这些角色能够更改用户的名称。

GRANT [IMMUTABLE] ALTER USER
  ON DBMS
  TO role[, ...]

使指定的这些角色能够修改用户。

GRANT [IMMUTABLE] SET PASSWORD[S]
  ON DBMS
  TO role[, ...]

使指定的这些角色能够修改用户的密码以及这些密码是否必须在首次登录时更改。

GRANT [IMMUTABLE] SET AUTH
  ON DBMS
  TO role[, ...]

在5.24版本中引入 使指定的这些角色能够SETREMOVE用户的身份验证提供程序

GRANT [IMMUTABLE] SET USER HOME DATABASE
  ON DBMS
  TO role[, ...]

使指定的这些角色能够修改用户的home数据库。

GRANT [IMMUTABLE] SET USER STATUS
  ON DBMS
  TO role[, ...]

使指定的这些角色能够修改用户的帐户状态。

GRANT [IMMUTABLE] DROP USER
  ON DBMS
  TO role[, ...]

使指定的这些角色能够删除用户。

GRANT [IMMUTABLE] SHOW USER
  ON DBMS
  TO role[, ...]

使指定的这些角色能够列出用户。

GRANT [IMMUTABLE] USER MANAGEMENT
  ON DBMS
  TO role[, ...]

使指定的这些角色能够创建、删除、修改和列出用户。

添加用户的能力可以通过CREATE USER权限授予。请参见示例。

GRANT CREATE USER ON DBMS TO userAdder

生成的这个角色只有添加用户的权限。使用此查询将角色userAdder的所有权限列为命令:

SHOW ROLE userAdder PRIVILEGES AS COMMANDS
表12. 结果
命令

"GRANT CREATE USER ON DBMS TO `userAdder`"

行数:1

重命名用户的权限可以通过RENAME USER权限授予。以下查询显示了此示例。

GRANT RENAME USER ON DBMS TO userNameModifier

生成的这个角色只有重命名用户的权限。

SHOW ROLE userNameModifier PRIVILEGES AS COMMANDS

列出角色userNameModifier的所有权限。

表13. 结果
命令

"GRANT RENAME USER ON DBMS TO `userNameModifier`"

行数:1

修改用户的权限可以通过ALTER USER权限授予。请参见示例。

GRANT ALTER USER ON DBMS TO userModifier

生成的这个角色只有修改用户的权限。使用以下查询将角色userModifier的所有权限列为命令:

SHOW ROLE userModifier PRIVILEGES AS COMMANDS
表14. 结果
命令

"GRANT ALTER USER ON DBMS TO `userModifier`"

行数:1

被授予ALTER USER权限的用户可以运行ALTER USER管理命令,并使用一个或多个SET PASSWORDSET PASSWORD CHANGE [NOT] REQUIREDSET AUTHREMOVE AUTHSET 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
表15. 结果
命令

"GRANT SET PASSWORD ON DBMS TO `passwordModifier`"

行数:1

被授予SET PASSWORDS权限的用户可以运行ALTER USER管理命令,并使用SET PASSWORDSET PASSWORD CHANGE [NOT] REQUIRED部分之一或两者。

ALTER USER jake SET PASSWORD 'abcd5678' CHANGE NOT REQUIRED

在5.24版本中引入 被授予SET AUTH权限的用户可以运行ALTER USER管理命令,并使用SET AUTHREMOVE 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
表16. 结果
命令

"GRANT SET USER STATUS ON DBMS TO `statusModifier`"

行数: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
表 17. 结果
命令

"GRANT SET USER HOME DATABASE ON DBMS TO `statusModifier`"

"GRANT SET USER STATUS ON DBMS TO `statusModifier`"

行数:2

被授予SET USER HOME DATABASE权限的用户仅允许运行ALTER USER管理命令的SET HOME DATABASEREMOVE HOME DATABASE部分。

ALTER USER jake SET HOME DATABASE otherDb
ALTER USER jake REMOVE HOME DATABASE

请注意,SET PASSWORDSSET AUTHSET USER STATUSSET USER HOME DATABASE权限操作的组合等同于ALTER USER权限操作。

删除用户的权限可以通过DROP USER权限授予。请参见示例

GRANT DROP USER ON DBMS TO userDropper

生成的 role 仅具有允许删除用户的权限。使用以下查询以命令的形式列出 role userDropper 的所有权限

SHOW ROLE userDropper PRIVILEGES AS COMMANDS
表 18. 结果
命令

"GRANT DROP USER ON DBMS TO `userDropper`"

行数:1

显示用户的权限可以通过SHOW USER权限授予。请参见示例

GRANT SHOW USER ON DBMS TO userShower

生成的 role 仅具有允许显示用户的权限。使用以下查询以命令的形式列出 role userShower 的所有权限

SHOW ROLE userShower PRIVILEGES AS COMMANDS
表 19. 结果
命令

"GRANT SHOW USER ON DBMS TO `userShower`"

行数:1

创建、重命名、修改、删除和列出用户的权限可以通过USER MANAGEMENT权限授予。请参见示例

GRANT USER MANAGEMENT ON DBMS TO userManager

生成的 role 具有管理用户的全部权限。使用以下查询以命令的形式列出 role userManager 的所有权限

SHOW ROLE userManager PRIVILEGES AS COMMANDS
表 20. 结果
命令

"GRANT SHOW USER ON DBMS TO `userManager`"

行数:1

DBMS IMPERSONATE 权限

模拟的 DBMS 权限可以通过 Cypher 管理命令分配。它们可以像其他权限一样被授予、拒绝和撤销。

模拟是指用户能够承担另一个用户的角色(以及相应的权限),但不能以被模拟用户的身份执行更新admin命令(即,他们仍然能够使用SHOW命令)。

模拟用户的权限可以通过IMPERSONATE权限授予。

有关语法描述的更多详细信息,请参阅Cypher管理命令语法

表 21. 模拟权限命令语法
命令 描述
GRANT [IMMUTABLE] IMPERSONATE [(*)]
    ON DBMS
    TO role[, ...]

允许指定的 role 模拟任何用户。

GRANT [IMMUTABLE] IMPERSONATE (user[, ...])
    ON DBMS
    TO role[, ...]

允许指定的 role 模拟指定的用户。

以下查询显示了一个示例。请注意,为了使此查询生效,userImpersonator必须是已存在的 role

查询
GRANT IMPERSONATE (*) ON DBMS TO userImpersonator

生成的 role 具有模拟所有用户的权限

查询
SHOW ROLE userImpersonator PRIVILEGES AS COMMANDS
表 22. 结果
命令

"GRANT IMPERSONATE (*) ON DBMS TO `userImpersonator`"

行数:1

也可以拒绝和撤销该权限。请参见一个示例,该示例说明了userImpersonator用户如何能够模拟所有用户,除了alice

查询
DENY IMPERSONATE (alice) ON DBMS TO userImpersonator

要授予(或撤销)模拟特定用户或用户子集的权限,您可以首先使用此查询列出它们

查询
GRANT IMPERSONATE (alice, bob) ON DBMS TO userImpersonator

DBMS DATABASE MANAGEMENT 权限

DBMS 数据库管理权限可以通过 Cypher 管理命令分配。它们可以像其他权限一样被授予、拒绝和撤销。

有关语法描述的更多详细信息,请参阅Cypher管理命令语法

表 23. 数据库管理权限命令语法
命令 描述
GRANT [IMMUTABLE] CREATE DATABASE
  ON DBMS
  TO role[, ...]

允许指定的 role 创建新的标准数据库和别名。

GRANT [IMMUTABLE] DROP DATABASE
  ON DBMS
  TO role[, ...]

允许指定的 role 删除标准数据库和别名。

GRANT [IMMUTABLE] ALTER DATABASE
  ON DBMS
  TO role[, ...]

允许指定的 role 修改标准数据库和别名。

GRANT [IMMUTABLE] SET DATABASE ACCESS
  ON DBMS
  TO role[, ...]

允许指定的 role 修改对标准数据库的访问权限。

GRANT CREATE COMPOSITE DATABASE
  ON DBMS
  TO role[, ...]

允许指定的 role 创建新的复合数据库。

GRANT DROP COMPOSITE DATABASE
  ON DBMS
  TO role[, ...]

允许指定的 role 删除复合数据库。

GRANT COMPOSITE DATABASE MANAGEMENT
  ON DBMS
  TO role[, ...]

允许指定的 role 创建和删除复合数据库。

GRANT [IMMUTABLE] DATABASE MANAGEMENT
  ON DBMS
  TO role[, ...]

允许指定的 role 创建、删除和修改数据库和别名。

创建标准数据库和别名的权限可以通过CREATE DATABASE权限授予。请参见示例

GRANT CREATE DATABASE ON DBMS TO databaseAdder

生成的 role 仅具有允许创建标准数据库和别名的权限。使用以下查询以命令的形式列出 role databaseAdder 的所有权限

SHOW ROLE databaseAdder PRIVILEGES AS COMMANDS
表 24. 结果
命令

"GRANT CREATE DATABASE ON DBMS TO `databaseAdder`"

行数:1

创建复合数据库的权限可以通过CREATE COMPOSITE DATABASE权限授予。请参见示例

GRANT CREATE COMPOSITE DATABASE ON DBMS TO compositeDatabaseAdder

生成的 role 仅具有允许创建复合数据库的权限。使用以下查询以命令的形式列出 role compositeDatabaseAdder 的所有权限

SHOW ROLE compositeDatabaseAdder PRIVILEGES AS COMMANDS
表 25. 结果
命令

"GRANT CREATE COMPOSITE DATABASE ON DBMS TO `compositeDatabaseAdder`"

行数:1

删除标准数据库和别名的权限可以通过DROP DATABASE权限授予。请参见示例

GRANT DROP DATABASE ON DBMS TO databaseDropper

生成的 role 仅具有允许删除标准数据库和别名的权限。使用以下查询以命令的形式列出 role databaseDropper 的所有权限

SHOW ROLE databaseDropper PRIVILEGES AS COMMANDS
表 26. 结果
命令

"GRANT DROP DATABASE ON DBMS TO `databaseDropper`"

行数:1

删除复合数据库的权限可以通过DROP COMPOSITE DATABASE权限授予。请参见示例

GRANT DROP COMPOSITE DATABASE ON DBMS TO compositeDatabaseDropper

生成的 role 仅具有允许删除复合数据库的权限。使用以下查询以命令的形式列出 role compositeDatabaseDropper 的所有权限

SHOW ROLE compositeDatabaseDropper PRIVILEGES AS COMMANDS
表 27. 结果
命令

"GRANT DROP COMPOSITE DATABASE ON DBMS TO `compositeDatabaseDropper`"

行数:1

修改标准数据库和别名的权限可以通过ALTER DATABASE权限授予。请参见示例

GRANT ALTER DATABASE ON DBMS TO databaseModifier

生成的 role 仅具有允许修改标准数据库和别名的权限。使用以下查询以命令的形式列出 role databaseModifier 的所有权限

SHOW ROLE databaseModifier PRIVILEGES AS COMMANDS
表 28. 结果
命令

"GRANT ALTER DATABASE ON DBMS TO `databaseModifier`"

行数:1

修改对标准数据库的访问权限可以通过SET DATABASE ACCESS权限授予。请参见示例

GRANT SET DATABASE ACCESS ON DBMS TO accessModifier

生成的 role 仅具有允许修改对标准数据库的访问权限。使用以下查询以命令的形式列出 role accessModifier 的所有权限

SHOW ROLE accessModifier PRIVILEGES AS COMMANDS
表 29. 结果
命令

"GRANT SET DATABASE ACCESS ON DBMS TO `accessModifier`"

行数:1

创建和删除复合数据库的权限可以通过COMPOSITE DATABASE MANAGEMENT权限授予。请参见示例

GRANT COMPOSITE DATABASE MANAGEMENT ON DBMS TO compositeDatabaseManager

生成的 role 具有管理复合数据库的全部权限。使用以下查询以命令的形式列出 role compositeDatabaseManager 的所有权限

SHOW ROLE compositeDatabaseManager PRIVILEGES AS COMMANDS
表 30. 结果
命令

"GRANT COMPOSITE DATABASE MANAGEMENT ON DBMS TO `compositeDatabaseManager`"

行数:1

创建、删除和修改数据库和别名的权限可以通过DATABASE MANAGEMENT权限授予。请参见示例

GRANT DATABASE MANAGEMENT ON DBMS TO databaseManager

生成的 role 具有管理标准和复合数据库以及别名的全部权限。使用以下查询以命令的形式列出 role databaseManager 的所有权限

SHOW ROLE databaseManager PRIVILEGES AS COMMANDS
表 31. 结果
命令

"GRANT DATABASE MANAGEMENT ON DBMS TO `databaseManager`"

行数:1

DBMS ALIAS MANAGEMENT 权限

DBMS 别名管理权限可以通过 Cypher 管理命令分配,并且可以应用于本地和远程别名。它们可以像其他权限一样被授予、拒绝和撤销。也可以使用数据库管理命令来管理别名。

有关语法描述的更多详细信息,请参阅Cypher管理命令语法

表 32. 别名管理权限命令语法
命令 描述
GRANT [IMMUTABLE] CREATE ALIAS
ON DBMS
TO role[, ...]

允许指定的 role 创建新的别名。

GRANT [IMMUTABLE] DROP ALIAS
ON DBMS
TO role[, ...]

允许指定的 role 删除别名。

GRANT [IMMUTABLE] ALTER ALIAS
ON DBMS
TO role[, ...]

允许指定的 role 修改别名。

GRANT [IMMUTABLE] SHOW ALIAS
ON DBMS
TO role[, ...]

允许指定的 role 列出别名。

GRANT [IMMUTABLE] ALIAS MANAGEMENT
ON DBMS
TO role[, ...]

允许指定的 role 列出、创建、删除和修改别名。

创建别名的权限可以通过CREATE ALIAS权限授予。请参见示例

GRANT CREATE ALIAS ON DBMS TO aliasAdder

生成的 role 仅具有允许创建别名的权限。使用以下查询以命令的形式列出 role aliasAdder 的所有权限

SHOW ROLE aliasAdder PRIVILEGES AS COMMANDS
表 33. 结果
命令

"GRANT CREATE ALIAS ON DBMS TO `aliasAdder`"

行数:1

删除别名的权限可以通过DROP ALIAS权限授予。请参见示例

GRANT DROP ALIAS ON DBMS TO aliasDropper

生成的 role 仅具有允许删除别名的权限。使用以下查询以命令的形式查看 role aliasDropper 的所有权限

SHOW ROLE aliasDropper PRIVILEGES AS COMMANDS
表 34. 结果
命令

"GRANT DROP ALIAS ON DBMS TO `aliasDropper`"

行数:1

修改别名的权限可以通过ALTER ALIAS权限授予。请参见示例

GRANT ALTER ALIAS ON DBMS TO aliasModifier

生成的 role 仅具有允许修改别名的权限。使用以下查询以命令的形式列出 role aliasModifier 的所有权限

SHOW ROLE aliasModifier PRIVILEGES AS COMMANDS
表 35. 结果
命令

"GRANT ALTER ALIAS ON DBMS TO `aliasModifier`"

行数:1

列出别名的权限可以通过SHOW ALIAS权限授予。请参见示例

GRANT SHOW ALIAS ON DBMS TO aliasLister

生成的 role 仅具有允许修改别名的权限。使用以下查询以命令的形式列出 role aliasLister 的所有权限

SHOW ROLE aliasLister PRIVILEGES AS COMMANDS
表 36. 结果
命令

"GRANT SHOW ALIAS ON DBMS TO `aliasLister`"

行数:1

列出、创建、删除和修改别名的权限可以通过ALIAS MANAGEMENT权限授予。请参见示例

GRANT ALIAS MANAGEMENT ON DBMS TO aliasManager

生成的 role 具有管理别名的全部权限。使用以下查询以命令的形式列出 role aliasManager 的所有权限

SHOW ROLE aliasManager PRIVILEGES AS COMMANDS
表 37. 结果
命令

"GRANT ALIAS MANAGEMENT ON DBMS TO `aliasManager`"

行数:1

DBMS SERVER MANAGEMENT 权限

DBMS 服务器管理权限可以使用 Cypher 管理命令分配。它们可以像其他权限一样被授予、拒绝和撤销。

有关语法描述的更多详细信息,请参阅Cypher管理命令语法

表 38. 服务器管理权限命令语法
命令 描述
GRANT [IMMUTABLE] SERVER MANAGEMENT
  ON DBMS
  TO role[, ...]

允许指定的 role 显示、启用、重命名、更改、重新分配、释放和删除服务器。

GRANT [IMMUTABLE] SHOW SERVERS
  ON DBMS
  TO role[, ...]

允许指定的 role 显示服务器。

DBMS PRIVILEGE MANAGEMENT 权限

DBMS 权限管理权限可以通过 Cypher 管理命令分配。它们可以像其他权限一样被授予、拒绝和撤销。

有关语法描述的更多详细信息,请参阅Cypher管理命令语法

表 39. 权限管理权限命令语法
命令 描述
GRANT [IMMUTABLE] SHOW PRIVILEGE
  ON DBMS
  TO role[, ...]

允许指定的 role 列出权限。

GRANT [IMMUTABLE] ASSIGN PRIVILEGE
  ON DBMS
  TO role[, ...]

允许指定的 role 使用GRANTDENY命令分配权限。

GRANT [IMMUTABLE] REMOVE PRIVILEGE
  ON DBMS
  TO role[, ...]

允许指定的 role 使用REVOKE命令删除权限。

GRANT [IMMUTABLE] PRIVILEGE MANAGEMENT
  ON DBMS
  TO role[, ...]

允许指定的 role 列出、分配和删除权限。

列出权限的权限可以通过SHOW PRIVILEGE权限授予。

具有此权限的用户可以执行SHOW PRIVILEGESSHOW 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
表 40. 结果
命令

"GRANT SHOW PRIVILEGE ON DBMS TO `privilegeShower`"

行数:1

请注意,通过SHOW USER username PRIVILEGESSHOW USER PRIVILEGES命令显示当前用户的权限不需要任何特定权限。

此外,请注意,如果使用了 LDAP 等非原生身份验证提供程序,则SHOW USER PRIVILEGES 将只能有限地发挥作用,即用户只能查看自己的权限。使用非原生身份验证提供程序时,无法列出其他用户的权限。

授予角色分配权限的能力可以通过ASSIGN PRIVILEGE权限来实现。拥有此权限的用户可以执行GRANTDENY管理命令。请参阅如何授予此权限的示例

GRANT ASSIGN PRIVILEGE ON DBMS TO privilegeAssigner

生成的 角色仅具有分配权限的权限。使用以下查询,以命令的形式列出角色privilegeAssigner的所有权限

SHOW ROLE privilegeAssigner PRIVILEGES AS COMMANDS
表 41. 结果
命令

"GRANT ASSIGN PRIVILEGE ON DBMS TO `privilegeAssigner`"

行数:1

从角色中删除权限的能力可以通过REMOVE PRIVILEGE权限来实现。

拥有此权限的用户可以执行REVOKE管理命令。请参阅如何授予此权限的示例

GRANT REMOVE PRIVILEGE ON DBMS TO privilegeRemover

生成的 角色仅具有删除权限的权限。使用以下查询,以命令的形式列出角色privilegeRemover的所有权限

SHOW ROLE privilegeRemover PRIVILEGES AS COMMANDS
表 42. 结果
命令

"GRANT REMOVE PRIVILEGE ON DBMS TO `privilegeRemover`"

行数:1

列出、分配和删除权限的权限可以通过PRIVILEGE MANAGEMENT权限来实现。请参阅示例

GRANT PRIVILEGE MANAGEMENT ON DBMS TO privilegeManager

生成的 角色拥有管理权限的所有权限。使用以下查询,以命令的形式列出角色privilegeManager的所有权限

SHOW ROLE privilegeManager PRIVILEGES AS COMMANDS
表 43. 结果
命令

"GRANT PRIVILEGE MANAGEMENT ON DBMS TO `privilegeManager`"

行数:1

DBMS EXECUTE权限

用于过程和用户定义函数执行的 DBMS 权限可以通过 Cypher 管理命令分配。它们可以像其他权限一样被授予、拒绝和撤销。

有关语法描述的更多详细信息,请参阅Cypher管理命令语法

表 44. 执行权限命令语法
命令 描述
GRANT [IMMUTABLE] EXECUTE PROCEDURE[S] name-globbing[, ...]
  ON DBMS
  TO role[, ...]

使指定的 角色能够执行给定的过程。

GRANT [IMMUTABLE] EXECUTE BOOSTED PROCEDURE[S] name-globbing[, ...]
  ON DBMS
  TO role[, ...]

使指定的 角色能够在执行给定的过程时使用提升的权限。

GRANT [IMMUTABLE] EXECUTE ADMIN[ISTRATOR] PROCEDURES
  ON DBMS
  TO role[, ...]

使指定的 角色能够执行用@Admin注释的过程。这些过程将以提升的权限执行。

GRANT [IMMUTABLE] EXECUTE [USER [DEFINED]] FUNCTION[S] name-globbing[, ...]
  ON DBMS
  TO role[, ...]

使指定的 角色能够执行给定的用户定义函数。

GRANT [IMMUTABLE] EXECUTE BOOSTED [USER [DEFINED]] FUNCTION[S] name-globbing[, ...]
  ON DBMS
  TO role[, ...]

使指定的 角色能够在执行给定的用户定义函数时使用提升的权限。

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
表 45. 结果
命令

"GRANT EXECUTE PROCEDURE db.schema.* ON DBMS TO `procedureExecutor`"

行数: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
表 46. 结果
命令

"DENY EXECUTE PROCEDURE dbms.cluster* ON DBMS TO `deniedProcedureExecutor`"

"GRANT EXECUTE PROCEDURE * ON DBMS TO `deniedProcedureExecutor`"

行数:2

dbms.cluster.checkConnectivitydbms.cluster.cordonServerdbms.cluster.protocolsdbms.cluster.readReplicaToggledbms.cluster.routing.getRoutingTabledbms.cluster.secondaryReplicationDisabledbms.cluster.setAutomaticallyEnableFreeServersdbms.cluster.uncordonServer过程被阻止,以及任何其他以dbms.cluster开头的过程。

EXECUTE BOOSTED PROCEDURE权限

在执行过程时使用提升的权限的能力可以通过EXECUTE BOOSTED PROCEDURE权限来实现。拥有此权限的用户在执行与名称通配匹配的过程时,不会受到其其他权限的限制。EXECUTE BOOSTED PROCEDURE权限仅影响提升,而不影响过程的执行。因此,还需要为过程授予EXECUTE PROCEDURE权限。

从 Neo4j 5.0 开始,需要EXECUTE PROCEDUREEXECUTE BOOSTED PROCEDURE才能以提升的权限执行过程。这与 Neo4j 4.x 不同,在 Neo4j 4.x 中,只需要EXECUTE BOOSTED PROCEDURE

GRANT EXECUTE PROCEDURE * ON DBMS TO boostedProcedureExecutor;
GRANT EXECUTE BOOSTED PROCEDURE db.labels, db.relationshipTypes ON DBMS TO boostedProcedureExecutor

因此,拥有角色boostedProcedureExecutor的用户可以运行db.labelsdb.relationshipTypes过程并拥有完全权限,查看图中的所有内容,而不仅仅是用户拥有TRAVERSE权限的标签和类型。如果没有EXECUTE PROCEDURE,则根本无法执行任何过程。

生成的 角色具有允许以提升的权限执行过程db.labelsdb.relationshipTypes以及以用户自己的权限执行所有其他过程的权限

SHOW ROLE boostedProcedureExecutor PRIVILEGES AS COMMANDS
表 47. 结果
命令

"GRANT EXECUTE PROCEDURE * ON DBMS TO `boostedProcedureExecutor`"

"GRANT EXECUTE BOOSTED PROCEDURE db.labels ON DBMS TO `boostedProcedureExecutor`"

"GRANT EXECUTE BOOSTED PROCEDURE db.relationshipTypes ON DBMS TO `boostedProcedureExecutor`"

行数:3

与授予权限一样,单独拒绝EXECUTE BOOSTED PROCEDURE只会影响提升,而不会影响过程的执行。这可以在以下示例中看到

示例 1. 授予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
表 48. 结果
命令

"DENY EXECUTE BOOSTED PROCEDURE db.labels ON DBMS TO `deniedBoostedProcedureExecutor1`"

"GRANT EXECUTE PROCEDURE * ON DBMS TO `deniedBoostedProcedureExecutor1`"

行数:2

示例 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
表 49. 结果
命令

"DENY EXECUTE PROCEDURE db.labels ON DBMS TO `deniedBoostedProcedureExecutor2`"

"GRANT EXECUTE BOOSTED PROCEDURE * ON DBMS TO `deniedBoostedProcedureExecutor2`"

行数:2

示例 3. 授予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
表 50. 结果
命令

"DENY EXECUTE BOOSTED PROCEDURE db.labels ON DBMS TO `deniedBoostedProcedureExecutor3`"

"GRANT EXECUTE BOOSTED PROCEDURE * ON DBMS TO `deniedBoostedProcedureExecutor3`"

行数:2

示例 4. 示例 1 到 3 中的权限将如何影响过程的输出?

假设有一个名为myProc的过程。

对于拥有EXECUTE PROCEDURE权限的用户,此过程返回结果AB;对于拥有EXECUTE BOOSTED PROCEDURE权限的用户,此过程返回结果ABC

现在,调整示例 1 到 3 中的权限以应用于此过程,并显示返回的结果。使用示例 1 中的权限,授予EXECUTE PROCEDURE *并拒绝EXECUTE BOOSTED PROCEDURE myProcmyProc过程返回结果AB

使用示例 2 中的权限,授予EXECUTE BOOSTED PROCEDURE *并拒绝EXECUTE PROCEDURE myProc,不允许执行myProc过程。

使用示例 3 中的权限,授予EXECUTE BOOSTED PROCEDURE *并拒绝EXECUTE BOOSTED PROCEDURE myProc,不允许执行myProc过程。

为了进行比较,当授予

  • EXECUTE PROCEDURE myProcmyProc过程返回结果AB

  • EXECUTE BOOSTED PROCEDURE myProc:不允许执行myProc过程。

  • EXECUTE PROCEDURE myProcEXECUTE BOOSTED PROCEDURE myProcmyProc过程返回结果ABC

EXECUTE ADMIN PROCEDURE权限

执行管理过程(用@Admin注释)的能力可以通过EXECUTE ADMIN PROCEDURES权限来实现。此权限等同于为每个管理过程授予EXECUTE PROCEDUREEXECUTE BOOSTED PROCEDURE权限。任何新添加的admin过程都将自动包含在此权限中。以下查询显示了如何授予此权限的示例

GRANT EXECUTE ADMIN PROCEDURES ON DBMS TO adminProcedureExecutor

拥有角色adminProcedureExecutor的用户可以运行任何admin过程并拥有提升的权限。生成的 角色具有允许执行所有管理过程的权限。

使用以下查询,以命令的形式列出角色adminProcedureExecutor的所有权限

SHOW ROLE adminProcedureExecutor PRIVILEGES AS COMMANDS
表 51. 结果
命令

"GRANT EXECUTE ADMIN PROCEDURES ON DBMS TO `adminProcedureExecutor`"

行数:1

为了将此与EXECUTE PROCEDUREEXECUTE BOOSTED PROCEDURE权限进行比较,请重新访问myProc过程,但这次将其作为admin过程,当允许执行时,它将返回结果ABC

从仅授予EXECUTE PROCEDURE myProcEXECUTE BOOSTED PROCEDURE myProc权限的用户开始,不允许执行myProc过程。

但是,对于授予EXECUTE ADMIN PROCEDURES或同时授予EXECUTE PROCEDURE myProcEXECUTE BOOSTED PROCEDURE myProc权限的用户,myProc过程将返回结果ABC

任何被拒绝的EXECUTE权限都将导致不允许执行该过程。在这种情况下,拒绝EXECUTE PROCEDUREEXECUTE BOOSTED PROCEDUREEXECUTE ADMIN PROCEDURES都没有关系。

EXECUTE USER DEFINED FUNCTION权限

可以通过EXECUTE USER DEFINED FUNCTION权限授予执行用户定义函数 (UDF) 的能力。拥有此权限的角色可以执行与名称通配匹配的UDF。

EXECUTE USER DEFINED FUNCTION权限不适用于内置函数,内置函数始终可执行。

示例 5. 执行用户定义函数

以下查询展示了如何授予此权限的示例

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
表 52. 结果
命令

"GRANT EXECUTE FUNCTION apoc.coll.* ON DBMS TO `functionExecutor`"

行数:1

要允许执行除少数UDF之外的所有UDF,您可以授予EXECUTE USER DEFINED FUNCTIONS *权限并拒绝不需要的函数。

示例 6. 执行用户定义函数

以下查询允许执行除以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
表 53. 结果
命令

"DENY EXECUTE FUNCTION apoc.any.prop* ON DBMS TO `deniedFunctionExecutor`"

"GRANT EXECUTE FUNCTION * ON DBMS TO `deniedFunctionExecutor`"

行数:2

apoc.any.propertyapoc.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 USER DEFINED FUNCTIONEXECUTE BOOSTED USER DEFINED FUNCTION才能以提升的权限执行函数。这与 Neo4j 4.x 不同,在 Neo4j 4.x 中,只需要EXECUTE BOOSTED USER DEFINED FUNCTION

EXECUTE BOOSTED USER DEFINED FUNCTION权限不适用于内置函数,因为它们没有提升权限的概念。

示例 7. 执行提升的用户定义函数

以下查询展示了如何授予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
表 54. 结果
命令

"GRANT EXECUTE FUNCTION * ON DBMS TO `boostedFunctionExecutor`"

"GRANT EXECUTE BOOSTED FUNCTION apoc.any.properties ON DBMS TO `boostedFunctionExecutor`"

行数:2

DBMS SETTING权限

可以通过SHOW SETTING权限授予显示配置设置的能力。拥有此权限的角色可以查询与名称通配匹配的配置设置。

有关语法描述的更多详细信息,请参阅Cypher管理命令语法

表 55. 设置权限命令语法
命令 描述
GRANT [IMMUTABLE] SHOW SETTING[S] name-globbing[, ...]
  ON DBMS
  TO role[, ...]

使指定的权限能够查询给定的配置设置。

以下查询展示了如何授予此权限的示例

GRANT SHOW SETTING server.bolt.* ON DBMS TO configurationViewer

拥有configurationViewer角色的用户然后可以查询server.bolt命名空间中的任何设置。

更新后的角色configurationViewer的权限仅允许查询server.bolt命名空间中的设置。使用以下查询将角色configurationViewer的所有权限列为命令

SHOW ROLE configurationViewer PRIVILEGES AS COMMANDS
表 56. 结果
命令

"GRANT SHOW SETTING server.bolt.* ON DBMS TO `configurationViewer`"

行数: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
表 57. 结果
命令

"DENY SHOW SETTING dbms.security* ON DBMS TO `deniedConfigurationViewer`"

"GRANT SHOW SETTING * ON DBMS TO `deniedConfigurationViewer`"

行数: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
表 58. 结果
命令

"GRANT ALL DBMS PRIVILEGES ON DBMS TO `dbmsManager`"

行数:1

过程、用户定义函数和设置的名称通配

过程、用户定义函数和设置名称的名称通配是文件名扩展的通配的简化版本。它只允许两个通配符:*?,它们用于多个和单个字符匹配。在这种情况下,*表示0个或多个字符,?匹配正好一个字符。

名称通配受Cypher 手册 → 命名规则和建议的约束,但例外的是它可以包含点、星号和问号,而无需使用反引号进行转义。

用点分隔的名称通配的每一部分都可以单独转义。例如,mine.`procedureWith%`是允许的,但mine.procedure`With%`不是。此外,请注意,即使转义,通配符也表现为通配符。例如,使用`*`等同于使用*,因此允许执行所有函数或过程,而不仅仅是名为*的过程或函数。

给定以下过程列表

  • 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.exampleProceduremine.private.exampleProcedure,但不能运行其他过程。

GRANT EXECUTE PROCEDURE mine.*.exampleProcedure? ON DBMS TO globbing3

拥有globbing3角色的用户可以运行过程mine.public.exampleProcedure1mine.private.exampleProcedure1mine.private.exampleProcedure2,但不能运行其他过程。

GRANT EXECUTE PROCEDURE *.exampleProcedure ON DBMS TO globbing4

拥有globbing4角色的用户可以运行过程your.exampleProceduremine.public.exampleProceduremine.private.exampleProcedure,但不能运行其他过程。

GRANT EXECUTE PROCEDURE mine.public.exampleProcedure* ON DBMS TO globbing5

拥有globbing5角色的用户可以运行过程mine.public.exampleProceduremine.public.exampleProcedure1mine.public.exampleProcedure42,但不能运行其他过程。

GRANT EXECUTE PROCEDURE `mine.public.with#*§Characters`, mine.private.`with#Spec???§Characters` ON DBMS TO globbing6

拥有globbing6角色的用户可以运行过程mine.public.with#Special§Charactersmine.private.with#Special§Characters,但不能运行其他过程。

名称通配可以完全或部分转义。*?在这两种情况下都被解释为通配符。