SQL0727N 查询视图结果时出现错误 Data Virtualization

若您所处的环境高度依赖基于用户组的访问控制,则可能遇到 SQL0727N 错误。

症状

查询视图时返回 SQL0727N 错误消息。

SQL0727N  An error occurred during implicit system action type "3". 
Information returned for the error includes SQLCODE "-142", SQLSTATE "     " 
and message tokens "".  SQLSTATE=56098

原因

当基于群组的访问控制和授权被广泛使用时,可能会出现此问题。 当查询基于虚拟表创建的视图时,若同时满足某些其他条件,则会发生此错误。 具体而言,视图创建者对底层表的访问权限基于其所属组的成员身份。 访问这些视图时,系统会检查用户对该视图的访问权限,以及视图创建者对该视图所基于的底层表的访问权限。 由于该视图创建者访问底层表依赖于外部身份提供商,因此在等待重新验证期间,该视图被标记为无效。

有关详细信息,请阅执行DDL语句时对组特权使用的限制或绑定 packages8。

解决问题

  1. 如果错误是由被标记为无效的视图导致的,具有管理员角色的用户可以解决导致该视图被标记为无效的情况。 当使用基于组的访问权限时,通常管理员必须向用户授予SELECT权限,而不是或除了向组授予权限之外。

    您还可以为对象授予所有角色或所有 Data Virtualization 用户的公共访问权限,然后通过在组上定义的数据保护规则来限制访问。

  2. 当采取纠正措施时,在该对象上 SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS() 运行操作将重新验证该对象。 随后对该对象的访问操作成功完成。 此操作需要具有管理员角色的用户 Data Virtualization 执行必要步骤。 执行该程序必须遵循此顺序。
CALL SYSHADOOP.BIG_SQL_SERVICE_MODE('ON');
CALL SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS(object-type, object_schema, object_name);
CALL SYSHADOOP.BIG_SQL_SERVICE_MODE('OFF');

有关更多信息,请参阅下列资源。

  1. ADMIN_REVALIDATE_DB_OBJECTS 过程 - 重新验证无效的数据库对象
  2. auto_reval -“自动重新验证和失效”配置参数