基于角色的访问控制 (RBAC)

您可以使用与标准数据库相同的 RBAC 功能来管理复合数据库及其组成部分的访问权限。但是,复合数据库的 RBAC 工作方式与标准数据库之间存在一些差异。

数据库访问控制

复合数据库及其组成部分都需要定义数据库访问权限。必须明确授予对组成部分的访问权限。有关授予数据库访问权限的更多信息,请参阅 数据库 ACCESS 权限

基于角色的访问控制

不支持对复合数据库的所有组成部分定义统一的基于角色的访问控制。相反,适用以下原则:

  • 需要针对组成部分所指向的数据库定义权限。

  • 如果组成部分是远程别名,则应用的 RBAC 规则为连接到远程 DBMS 的用户的规则。

示例

以下示例说明了如何管理复合数据库的访问控制和基于角色的访问控制。您将创建一个包含两个组成部分的复合数据库 cineasts:一个本地数据库 cineasts.latest 和一个远程数据库 cineasts.upcoming。然后,您将创建一个用户并定义必要的访问权限,以便该用户能够以 USE 子句目标的形式访问本地和远程组成部分。最后,您将限制 minor 角色的用户在本地组成部分上,以及 remoteUser 用户在远程组成部分上访问标签为 PG18 的电影。

创建复合数据库及其组成部分

  1. 创建复合数据库 cineasts

    CREATE COMPOSITE DATABASE cineasts
  2. 为本地数据库创建组成部分 cineasts.latest

    CREATE ALIAS cineasts.latest
      FOR DATABASE `movies-latest`
  3. 为远程数据库创建组成部分 cineasts.upcoming

    CREATE ALIAS cineasts.upcoming
      FOR DATABASE upcoming
      AT 'neo4j+s://location:7687'
      USER remoteUser
      PASSWORD 'password'

创建用户 alice 并授予访问权限

创建一个用户并授予其必要的角色,以便作为 USE 子句的目标访问这些组成部分。

  1. 创建一个用户 alice 以访问复合数据库及其组成部分

    CREATE USER alice SET PASSWORD 'password' CHANGE NOT REQUIRED;
  2. 创建一个访问本地组成部分 cineasts.latest 所需的角色,并将其授予用户 alice

    CREATE ROLE localAccess;
    GRANT ROLE localAccess TO alice;
    
    GRANT ACCESS ON DATABASE cineasts TO localAccess;
    GRANT ACCESS ON DATABASE `movies-latest` TO localAccess;
  3. 创建一个访问远程组成部分 cineasts.upcoming 所需的角色,并将其授予用户 alice

    CREATE ROLE remoteAccess;
    GRANT ROLE remoteAccess TO alice;
    
    GRANT ACCESS ON DATABASE cineasts TO remoteAccess;
    GRANT ACCESS ON DATABASE cineasts.upcoming TO remoteAccess;

在远程 DBMS 上创建用户 remoteUser 并授予访问权限

此外,在远程组成部分上创建一个不同的用户,并授予该用户对远程 DBMS 上目标数据库或数据库别名的访问权限。以下步骤需要在位于 neo4j+s://location:7687 的远程 DBMS 上执行。

  1. 在远程 DBMS 上创建一个用户 remoteUser

    CREATE USER remoteUser SET PASSWORD 'password' CHANGE NOT REQUIRED;
  2. 创建一个访问远程组成部分 cineasts.upcoming 所需的角色,并将其授予远程 DBMS 上的用户 remoteUser

    CREATE ROLE remoteRole;
    GRANT ROLE remoteRole TO remoteUser;
    GRANT ACCESS ON DATABASE upcoming TO remoteRole;

限制复合数据库组成部分上的权限

限制任何具有 localAccess 角色的用户读取标签为 PG18 的电影

DENY MATCH { description } ON GRAPH `movies-latest` NODES PG18 TO localAccess

限制复合数据库远程组成部分上的权限

通过限制远程数据库 upcomingremoteRole 角色的访问权限,禁止用户 remoteUser 读取标签为 PG18 的电影

DENY MATCH { description } ON GRAPH upcoming NODES PG18 TO remoteRole

适用于 remoteUser 的规则同样适用于任何在本地 DBMS 上访问 cineasts.upcoming 的用户。

使用复合数据库

现在,用户 alice 可以将复合数据库 cineasts 及其组成部分 cineasts.latestcineasts.upcoming 作为 USE 子句的目标进行访问。但是,由于分别在本地数据库的 localAccess 角色和远程数据库的 remoteUser 用户上定义了限制,alice 将无法从这两个组成部分中读取标签为 PG18 的电影。

USE cineasts.latest
MATCH (movie:Movie)
RETURN movie.title AS title
  UNION
USE cineasts.upcoming
MATCH (movie:Movie)
RETURN movie.title AS title

上述查询将返回来自两个组成部分的所有电影标题,标签为 PG18 的电影除外。