问题描述

问题描述/异常栈

在登记数据源开启源账号映射,但是在数据传输中并未使用源账号映射的账号,而是使用的登记数据源的账号(在数据传输参数中添加ndi.show-argument=true,日志会打印用户名)

解决方案

1)打开easyops,找到数据传输服务,找到配置并打开

FAQ-数据传输使用源账号映射的账号 - 图1

2)找到backend选项并点击更多

FAQ-数据传输使用源账号映射的账号 - 图2 FAQ-数据传输使用源账号映射的账号 - 图3

3)找到修改的参数subSysActAuth.enable,显示为false,修改为true

FAQ-数据传输使用源账号映射的账号 - 图4

4)修改完后先点击下方的更新当前配置组,然后点击全部组件应用该版本

FAQ-数据传输使用源账号映射的账号 - 图5

5)对数据传输进行同步配置操作

FAQ-数据传输使用源账号映射的账号 - 图6

6)同步配置完成后可在审计中查看同步成功与否

FAQ-数据传输使用源账号映射的账号 - 图7

问题原因

如下图所示,控制台的数据源登记处可以选择源系统账号鉴权。

FAQ-数据传输使用源账号映射的账号 - 图8

理论上,开启了源系统账号鉴权的数据源,需要配置源系统账号映射。
在传输任务试运行的情况下,会读取源系统账号映射处的项目账号的源系统用户名和源系统密码去执行任务,如果没配置直接报错;
在离线开发开发模式的情况下,会读取源系统账号映射处的用户账号的源系统用户名和源系统密码去执行任务,如果没配置直接报错;
在离线开发线上模式的情况下,会读取源系统账号映射处的项目账号的源系统用户名和源系统密码去执行任务,如果没配置直接报错;
2、参数控制
但是,为了不影响引用了开启源系统账号鉴权的数据源老任务的执行调度,传输设置了两个参数,可以通过easyops设置来控制是否接入源系统账号鉴权以及是否使用数据源登记的账号密码去做兜底。
subSysActAuth.enable 代表数据传输是否接入源系统账号鉴权。
useDsInfoIfUserNoActAuth.enable 代表是否使用数据源登记的账号密码为没配置源系统用户名和密码的用户做兜底,去执行任务。
这两个参数默认都为false
所以实际上会有三种情况

1subSysActAuth.enable-设置为false:不接入源系统账号鉴权

2subSysActAuth.enable-设置为trueuseDsInfoIfUserNoActAuth.enable-设置为false:接入源系统账号鉴权,提交任务的用户没有源系统账号则任务报错。(相当于彻底开启了源系统账号鉴权的功能)

3subSysActAuth.enable-设置为trueuseDsInfoIfUserNoActAuth.enable-设置为true:接入源系统账号鉴权,提交任务的用户没有源系统账号则使用数据源登记的账号。(相当于开启了源系统账号鉴权的同时使用数据源登记的账号密码做了兜底)

FAQ-数据传输使用源账号映射的账号 - 图9

更新参数并且同步配置之后,可以到数据传输的/api/v1/config/fronted/global接口查看这两个参数是否成功更新。

FAQ-数据传输使用源账号映射的账号 - 图10


作者:常惠渊