准备 ServiceNow® 实例

安装 Snowflake Connector for ServiceNow®V2 之前,必须设置 ServiceNow® 实例。请完成以下步骤:

ServiceNow® 实例访问权限

  • 确保 ServiceNow® 实例公开可用。该连接器不适用于隐藏在 VPN 后面的实例。

  • 如果您为 ServiceNow® 实例使用了 IP 地址访问控制 (https://docs.servicenow.com/bundle/washingtondc-platform-security/page/administer/login/task/t_AccessControl.html),则无法成功安装连接器。有关更多信息,请参阅 社区文章 (https://community.snowflake.com/s/article/Why-Snowflake-doesn-t-share-static-IP-address-with-customer)。

ServiceNow® 用户

确定或创建用于连接器的 ServiceNow® 用户。

要连接到 ServiceNow® 实例,该连接器必须作为 ServiceNow® 用户向此实例进行身份验证。选择一个满足以下要求的 ServiceNow® 用户:

  • 用户名不能包含冒号 (:)。

  • 用户必须有权读取您计划引入的 ServiceNow® 表中的所有记录。访问控制列表 (ACLs) 不能向此用户隐藏这些表中的任何记录。

  • 用户必须拥有下表中的所有行的读取权限,才能启用架构检测:

    • sys_db_object (带有 namesuper_classsys_id 字段),

    • sys_glide_object (带有 namescalar_typesys_id 字段),

    • sys_dictionary (带有 elementinternal_typenamesys_id 字段)。

  • 要使用正确的引入策略,用户必须拥有下表中所有行的读取权限:

    • sys_table_rotation (带有 namesys_id 字段)。

  • 用户必须具有以下内容的读取权限,才能不使用成本效益较低的“截断和加载”引入模式:

    • 以下日志表中的 sys_updated_on 字段:

      • sys_db_object

      • sys_glide_object

      • sys_dictionary

      • sys_table_rotation

      • (该日志表通常是 sys_audit_delete)。

备注

仅当用户是 交互式用户 (https://docs.servicenow.com/bundle/washingtondc-platform-administration/page/administer/users-and-groups/concept/c_NonInteractiveSessions.html) 时,才能通过向 ServiceNow® 进行 OAuth 身份验证来配置 Snowsight 中的连接。如果为 ServiceNow® 用户禁用了 Web service access only 设置,则该用户是交互式用户。

仅当您使用 SQL 命令配置连接时,才能将 OAuth 身份验证用于非交互式用户。在这种情况下,您无法使用 Snowsight 登录 ServiceNow® 或获得 OAuth 刷新令牌。

设置列索引以优化性能

如果您计划引入和同步包含 sys_updated_on 字段的 ServiceNow® 表,建议在该列上设置索引。有关设置索引的信息,请参阅 ServiceNow® 文档中的 创建表索引 (https://docs.servicenow.com/bundle/washingtondc-application-development/page/administer/table-administration/task/t_CreateCustomIndex.html)。

通过用户界面创建索引后,索引的构建可能需要一些时间。索引构建过程作为后台任务运行。

如果实例含有大型表,Snowflake 建议联系 ServiceNow® 客户支持部门,以询问为大型表构建索引的最佳方法。

可选步骤

  • 如果您计划使用 OAuth 身份验证方法,并且将 只读角色 (https://docs.servicenow.com/bundle/washingtondc-platform-administration/page/administer/user-administration/concept/c_ReadOnlyRole.html) 分配给 ServiceNow® 用户,请确保 glide.security.snc_read_only_role.tables.exempt_create 系统属性的值列表中包含 oauth_credential 表。

    sys_properties 表中,创建或编辑 glide.security.snc_read_only_role.tables.exempt_create 属性。有关编辑此属性的更多详细信息,请参阅 ServiceNow 知识库 (https://support.servicenow.com/kb?id=kb_article_view&sysparm_article=KB0783404)。

    要了解如何添加新的系统属性,请参阅 ServiceNow® 文档中的 添加系统属性 (https://docs.servicenow.com/bundle/washingtondc-platform-administration/page/administer/reference-pages/reference/r_AvailableSystemProperties.html#t_AddAPropertyUsingSysPropsList)。

  • 某些对于核心功能不重要的连接器过程使用 ServiceNow® 端点 <service_now_instance>/<table_name>.do?SCHEMA to retrieve table schemas. This endpoint requires the admin 角色。有关此角色的更多信息,请参阅 ServiceNow® 文档中的 基础系统角色 (https://docs.servicenow.com/bundle/washingtondc-platform-administration/page/administer/roles/reference/r_BaseSystemRoles.html)。如果使用没有此角色的用户配置连接器,则基于此端点的过程将无法执行。`受影响的过程<accessing-data>`_ 对此要求有适当的注释。

  • 要允许传播已删除的记录,请将 sys_audit_delete 表或自定义日志表用作已删除记录的信息源。

    备注

    请注意,连接器必须能够访问所有日志表记录,否则安装可能会失败。而且,其他表中的记录删除可能不正确。

    如果日志表的行被 ACLs 隐藏,连接器的行为将不可预测。即使安装成功,在后续过程中也可能无法正确同步某些删除操作。

    • 要使用 sys_audit_delete,请执行以下步骤:

      1. no_audit_delete 字典属性 (https://docs.servicenow.com/bundle/washingtondc-application-development/page/administer/reference-pages/concept/c_DictionaryAttributes.html) 设置为 false

      2. 确保该连接器的 ServiceNow® 用户有权访问 sys_audit_delete 表,以及此表中的 documentkeytablenamesys_idsys_created_on 字段。

    • 要使用自定义日志表,请执行以下步骤:

      1. 创建一个名为 snowflake_connector_journal 的日志表,使其包含名为 documentkeytablename 的字符串字段。

      2. 确保该连接器的 ServiceNow® 用户有权访问 snowflake_connector_journal 表,以及此表中的 u_documentkeyu_tablenamesys_idsys_created_on 字段。

      3. 创建一个名为 RecordChange 的脚本,使其包含以下代码:

        var RecordChange = Class.create();
        
        RecordChange.prototype= {
          initialize :function() {},
          captureChange :function(tableName, docID) {
            var changeCapture = new GlideRecord('u_snowflake_connector_journal');
            changeCapture.initialize();
            changeCapture.setValue('u_documentkey', docID);
            changeCapture.setValue('u_tablename', tableName);
            changeCapture.insert();
          },
          type :'RecordChange'
        };
        
        Copy
      4. 定义一个业务规则,以获取记录的删除:

        (function executeRule(current, previous /*null when async*/) {
            new RecordChange().captureChange(current.getTableName(), current.getUniqueValue());
        })(current, previous);
        
        Copy
      5. 对于要传播已删除记录的每个表,请将此业务规则配置为在删除记录后运行。

      备注

      该连接器仅能够同步经过审核的已删除记录。未调用 DBDelete.setWorkflow() 的删除操作不会引入到 Snowflake 中。

      请参阅 ServiceNow® 产品文档,以了解有关使用 DBDelete.setWorkflow() 的更多信息。

      另请注意以下有关已删除记录的信息:

      • 对于具有 no_audit_delete=true 字典属性的表,系统不会跟踪记录删除。

      • 默认情况下,系统不会跟踪带有 sys 前缀的表的记录删除。

      • 仅当引用字段位于已审核的表上时,该连接器才能引入通过级联记录删除来删除的记录。请参阅 ServiceNow® 产品文档,以了解有关级联记录删除的更多信息。

后续步骤

完成以上过程后,请按照 使用 Snowsight 安装和配置连接器 或者 使用 SQL 命令安装和配置连接器 中的步骤操作。

语言: 中文