DBMS 权限

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

privileges grant and deny syntax dbms privileges
图 1. GRANTDENY DBMS 权限的语法

您只能向现有角色授予、拒绝或撤销权限。

授予 ALL DBMS PRIVILEGES

您可以将 ALL DBMS PRIVILEGES 权限授予某个角色。
ALL DBMS PRIVILEGES 权限等同于授予以下权限:

  • 创建、删除、分配、移除和显示角色。

  • 创建、更改、删除、显示和模拟用户。

  • 创建、更改、重命名、删除和显示认证规则。

  • 创建、更改、重命名、删除和显示数据库及别名。

  • 启用、更改、重命名、重新分配、取消分配、删除和显示服务器。

  • 显示、分配和移除权限。

  • 以提升的权限执行所有过程。

  • 以提升的权限执行所有用户自定义函数。

  • 显示所有配置设置。

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

GRANT [IMMUTABLE] ALL [[DBMS] PRIVILEGES]
    ON DBMS
    TO role[, ...]

例如,要授予角色 dbmsManager 所有 DBMS 能力,请使用以下查询:

GRANT ALL DBMS PRIVILEGES ON DBMS TO dbmsManager;

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

SHOW ROLE dbmsManager PRIVILEGES AS COMMANDS;
表 1. 结果
command(命令)

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

行:1

过程、用户自定义函数和设置的名称通配符 (Name-globbing)

过程、用户自定义函数和设置名称的名称通配符是文件名扩展通配符的简化版本。它仅允许使用两个通配符:*?,分别用于匹配多个字符和单个字符。在此上下文中,* 表示 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,但不能运行其他过程。

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