准备 ServiceNow® 实例¶
安装 Snowflake Connector for ServiceNow®V2 之前,必须设置 ServiceNow® 实例。请完成以下步骤:
ServiceNow® 实例访问 – 确保您的 ServiceNow® 实例已为使用做好准备
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
(带有name
、super_class
、sys_id
字段),sys_glide_object
(带有name
、scalar_type
、sys_id
字段),sys_dictionary
(带有element
、internal_type
、name
、sys_id
字段)。
要使用正确的引入策略,用户必须拥有下表中所有行的读取权限:
sys_table_rotation
(带有name
和sys_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 theadmin
角色。有关此角色的更多信息,请参阅 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
,请执行以下步骤:将
no_audit_delete
字典属性 (https://docs.servicenow.com/bundle/washingtondc-application-development/page/administer/reference-pages/concept/c_DictionaryAttributes.html) 设置为false
。确保该连接器的 ServiceNow® 用户有权访问
sys_audit_delete
表,以及此表中的documentkey
、tablename
、sys_id
和sys_created_on
字段。
要使用自定义日志表,请执行以下步骤:
创建一个名为
snowflake_connector_journal
的日志表,使其包含名为documentkey
和tablename
的字符串字段。确保该连接器的 ServiceNow® 用户有权访问
snowflake_connector_journal
表,以及此表中的u_documentkey
、u_tablename
、sys_id
、sys_created_on
字段。创建一个名为
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' };
定义一个业务规则,以获取记录的删除:
(function executeRule(current, previous /*null when async*/) { new RecordChange().captureChange(current.getTableName(), current.getUniqueValue()); })(current, previous);
对于要传播已删除记录的每个表,请将此业务规则配置为在删除记录后运行。
备注
该连接器仅能够同步经过审核的已删除记录。未调用
DBDelete.setWorkflow()
的删除操作不会引入到 Snowflake 中。请参阅 ServiceNow® 产品文档,以了解有关使用
DBDelete.setWorkflow()
的更多信息。另请注意以下有关已删除记录的信息:
对于具有
no_audit_delete=true
字典属性的表,系统不会跟踪记录删除。默认情况下,系统不会跟踪带有
sys
前缀的表的记录删除。仅当引用字段位于已审核的表上时,该连接器才能引入通过级联记录删除来删除的记录。请参阅 ServiceNow® 产品文档,以了解有关级联记录删除的更多信息。
后续步骤¶
完成以上过程后,请按照 使用 Snowsight 安装和配置连接器 或者 使用 SQL 命令安装和配置连接器 中的步骤操作。