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

Schema 访问控制

访问非默认 Schema 中的资源,普通用户需要两类权限:Schema 的USAGE,以及操作目标资源所需的权限。

前提条件

  • 示例用户alice已创建、已加入服务组且具有CONNECT。
  • /finance/orders已存在;使用其他资源时,替换示例路径。
  • 使用具有ADMIN角色的账号连接 Graph 服务执行授权。用户创建和邀请步骤见为用户配置访问权限。

授权示例

例如,要允许alice查询图/finance/orders,需要同时授予以下权限:

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

'''
GRANT MATCH ON GRAPH /finance/orders TO USER alice
'''
  • USAGE允许alice查看和使用 Schema /finance。
  • MATCH允许alice查询图/finance/orders。

只有USAGE时,alice不能查询图;只有MATCH时,alice也不能进入 Schema /finance。

权限检查规则

对 Schema 中的对象执行操作,用户必须同时具备:

  • 对该对象所属 Schema 的访问权限,即系统自动提供或通过授权获得的USAGE。
  • 目标操作所需的权限。

目标操作所需的权限可以直接授予在目标对象上,也可以来自上级资源。例如,Schema 上的MATCH ANY GRAPH允许查询该 Schema 中的所有图。完整的适用范围请参见权限参考。

同级对象类型之间没有权限依赖。例如,用户具有/finance的USAGE和图/finance/orders的MATCH后即可查询该图,无需再获得该图所使用图类型的权限。

Note

Schema 访问控制适用于 Schema 及其中的对象,不适用于临时图、内置 Procedure 和内置 Function。

获取 Schema 访问权限

用户可以通过系统规则自动获得 Schema 访问权限,也可以通过USAGE授权获得访问权限:

用户或条件 Schema 访问权限的来源
拥有ADMIN角色的用户 自动拥有所有 Schema 的访问权限。
当前 Schema Owner(所有者) 自动拥有该 Schema 的访问权限。
访问/default_schema的任意用户 自动拥有/default_schema的访问权限。
直接或通过角色获得USAGE的用户 拥有指定 Schema 的访问权限。

以下设置不会自动授予父级 Schema 的访问权限:

  • 将 Schema 或其中的图设置为用户的主 Schema、主图。
  • 成为 Schema 中某个图、图类型、UDP 或 UDF 的 Owner。
  • 仅获得服务组的CONNECT。

授予 Schema 访问权限

可以将USAGE直接授予用户:

GRANT USAGE ON SCHEMA /finance TO USER alice

为了简化权限管理,建议将USAGE和目标操作所需的权限授予角色,再将角色授予用户:

'''
CREATE ROLE IF NOT EXISTS finance_reader
'''

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

'''
GRANT MATCH ON GRAPH /finance/orders TO ROLE finance_reader
'''

'''
GRANT ROLE finance_reader TO USER alice
'''

在本示例中,alice可以访问/finance并查询/finance/orders,无需拥有该图所使用图类型的权限。如果角色只有USAGE,alice可以选择/finance,但不能查询orders。

只有 Schema Owner 和拥有ADMIN角色的用户可以授予或撤销该 Schema 的USAGE。完整的用户授权流程请参见为用户配置访问权限,命令语法请参见 GRANT 和 REVOKE。

撤销 Schema 访问权限

撤销直接授予用户的访问权限:

REVOKE USAGE ON SCHEMA /finance FROM USER alice

撤销通过角色提供的访问权限:

REVOKE USAGE ON SCHEMA /finance FROM ROLE finance_reader

如果用户无法通过其他方式获得 Schema 访问权限,权限变更生效后会发生以下变化:

  • 受影响的用户不再看到该 Schema。
  • 现有会话不能继续访问该 Schema 及其中的对象。
  • SHOW CURRENT_SCHEMA和SHOW CURRENT_GRAPH不再显示会话中不可访问的 Schema 和图。
  • Schema 中对象的权限和 Owner 信息保持不变。
  • 重新授予USAGE即可恢复 Schema 访问权限,无需重新授予未发生变化的对象权限。

访问权限变更

Schema Owner

Schema Owner 自动获得的访问权限不能被撤销。

执行ALTER OWNER SCHEMA后:

  • 新 Owner 自动获得 Schema 访问权限。
  • 原 Owner 失去由 Schema Owner 身份提供的访问权限。此前直接或通过角色获得的USAGE仍然有效;如果没有此类授权,则必须获得USAGE才能继续访问该 Schema。
  • 下级对象的 Owner 和权限不受影响。

更多信息,请参见 ALTER OWNER。

主 Schema 和主图

主 Schema 和主图是用户建立连接后默认使用的 Schema 和图。将某个 Schema 设置为用户的主 Schema,或将某个图设置为用户的主图,都不会授予该用户父级 Schema 的USAGE。

用户失去主 Schema 的全部访问权限后:

  • 用户无法通过新会话或现有会话访问该主 Schema 或主图。
  • SESSION RESET SCHEMA会清空当前 Schema,而不是将其重置为无权访问的主 Schema。
  • 如果主图位于无权访问的 Schema 中,SESSION RESET GRAPH会清空当前图。
  • 用户可以显式切换到/default_schema:
    SESSION SET SCHEMA /default_schema
    

管理员也可以为用户设置其他可访问的主 Schema。更多信息,请参见 ALTER USER。

/default_schema

所有用户都隐式拥有/default_schema的USAGE,不能显式授予或撤销该权限:

'''
GRANT USAGE ON SCHEMA /default_schema TO USER alice
'''

'''
REVOKE USAGE ON SCHEMA /default_schema FROM USER alice
'''

以上命令都会返回权限不足错误。