跳转至
开发版采用单机部署,无需产品 License 文件。需要多机部署或大规模性能测试? 了解企业版

为用户配置访问权限

将用户加入服务组,再授予连接、Schema 访问和资源操作权限。本页以允许user1查询/finance/transactions为例,介绍完整授权流程。

前提条件

  • 用户已在 Meta 服务中创建、处于启用状态且未被锁定。更多信息,请参见用户管理。
  • 您已使用目标服务组的 Owner(所有者)账号连接 Graph 服务。该账号具有内置角色ADMIN。
  • 待访问的 Schema 和资源已经存在;示例使用/finance/transactions,请按实际路径替换。

Note

如果用户已加入服务组,跳过示例中的INVITE USER。本文的角色授权和直接授权两种方式任选一种。

选择直接授权或角色授权

方式 适用场景 后续管理
角色授权(推荐) 多个用户承担相同职责 修改角色,统一调整这些用户的权限。
直接授权 单个用户临时或个别授权 单独调整该用户的权限。

用户从直接授权和角色中获得的权限会合并生效。只要其中一个来源仍提供某项权限,用户就仍可执行相应操作。

使用角色配置访问权限

以下操作由具有ADMIN角色的用户在 Graph 服务的 GQL 客户端中执行。示例创建角色finance_reader;如已有同名角色,请先检查其已有权限。

  1. 邀请用户加入当前服务组:

    INVITE USER user1
    
  2. 创建用于查询图的角色:

    CREATE ROLE IF NOT EXISTS finance_reader COMMENT "Read finance graphs"
    
  3. 向角色授予连接权限:

    GRANT CONNECT TO ROLE finance_reader
    
  4. 授予非默认 Schema 的访问权限和图查询权限:

    '''
    GRANT USAGE ON SCHEMA /finance TO ROLE finance_reader
    '''
    
    '''
    GRANT MATCH ON GRAPH /finance/transactions TO ROLE finance_reader
    '''
    

    USAGE允许用户查看和引用/finance,MATCH允许用户查询图transactions。对于普通用户,查询该图需要同时具有这两个权限。

  5. 将角色授予用户:

    GRANT ROLE finance_reader TO USER user1
    
  6. 等待权限变更同步后,使用user1重新连接,并执行以下语句验证访问权限是否生效:

    '''
    SESSION SET SCHEMA /finance
    '''
    
    '''
    SESSION SET GRAPH transactions
    '''
    
    '''
    MATCH (n) RETURN n LIMIT 1
    '''
    

查询应成功,最多返回一条点记录。图为空时返回空结果,也表示查询权限检查已通过。

直接向用户授予权限

如果权限只适用于单个用户,可以省略角色并直接授权。例如:

查看直接授权示例
'''
INVITE USER user1
'''

'''
GRANT CONNECT TO USER user1
'''

'''
GRANT USAGE ON SCHEMA /finance TO USER user1
'''

'''
GRANT MATCH ON GRAPH /finance/transactions TO USER user1
'''

直接授权不会创建自定义角色。使用SHOW PRIVILEGES FOR USER user1查询时,直接授权记录的role列为空。

常见授权场景

以下示例可分别使用。“只允许连接”包含邀请步骤;其余示例要求用户已加入服务组,且对应的图和 Schema 已存在。

只允许用户连接服务组

查看授权示例
'''
INVITE USER user1
'''

'''
GRANT CONNECT TO USER user1
'''

此时用户可以建立连接,但没有获得 Schema 中资源的操作权限。

查询默认 Schema 中的图

查看授权示例
'''
CREATE ROLE IF NOT EXISTS movie_reader COMMENT "Read movie graph"
'''

'''
GRANT CONNECT TO ROLE movie_reader
'''

'''
GRANT MATCH ON GRAPH /default_schema/movie TO ROLE movie_reader
'''

'''
GRANT ROLE movie_reader TO USER user1
'''

所有用户都隐式拥有/default_schema的USAGE,无需也不能显式授予该权限。

读写指定图

查看授权示例
'''
CREATE ROLE IF NOT EXISTS finance_writer COMMENT "Read and write transactions"
'''

'''
GRANT CONNECT TO ROLE finance_writer
'''

'''
GRANT USAGE ON SCHEMA /finance TO ROLE finance_writer
'''

'''
GRANT MATCH, INSERT, UPDATE, DELETE ON GRAPH /finance/transactions TO ROLE finance_writer
'''

'''
GRANT ROLE finance_writer TO USER user1
'''

仅授予业务需要的操作。例如,只追加数据的用户通常不需要DELETE。

访问 Schema 中的所有图

查看授权示例
'''
CREATE ROLE IF NOT EXISTS finance_analyst COMMENT "Read all finance graphs"
'''

'''
GRANT CONNECT TO ROLE finance_analyst
'''

'''
GRANT USAGE, MATCH ANY GRAPH ON SCHEMA /finance TO ROLE finance_analyst
'''

'''
GRANT ROLE finance_analyst TO USER user1
'''

MATCH ANY GRAPH允许查询该 Schema 中的所有图,包括以后创建的图。它不会授予写入或管理权限。

撤销访问权限

根据权限来源,可以撤销用户的角色:

REVOKE ROLE finance_reader FROM USER user1

或者撤销角色中的权限:

REVOKE MATCH ON GRAPH /finance/transactions FROM ROLE finance_reader

撤销后,以目标用户执行原操作验证结果。如果仍可访问,检查其他角色、直接授权、Owner 身份和上级资源权限是否提供相同权限。

Note

撤销CONNECT只阻止建立新会话,不会终止已有会话。要立即断开连接,请使用 SHOW SESSIONS 查找会话,再使用 KILL SESSION 终止会话。

更多信息