自由编码的数据源密码不起作用

Liberty encoded datasource password not working

我正在尝试保护 Liberty 20.0.0.3 docker 图像,但无法获得数据源工作的编码密码。纯文本密码工作正常。

这是我到目前为止尝试过的方法:

securityUtility encode --encoding=aes mypa$$word
{aes}ADPrOj1GfH/9Am3TSqT7MLN0+sRPkXHUAy7RIk+dbRmZR0fEQTEkzHv1lDTnGhGeaA==

在我的数据源配置中,我有:

<dataSource id="DS1" jndiName="jdbc/DS1" transactional="true">
    <jdbcDriver libraryRef="MSSQL"/>
    <properties.microsoft.sqlserver serverName="myserver" instanceName="myinstance" databaseName="mydatabase" user="myuser" password="{aes}ADPrOj1GfH/9Am3TSqT7MLN0+sRPkXHUAy7RIk+dbRmZR0fEQTEkzHv1lDTnGhGeaA==" />
</dataSource>

给出:

### Cause: java.sql.SQLException: Login failed for user 'myuser'. ClientConnectionId:d521779d-9316-4adf-ab61-9118cf66a940 DSRA0010E: SQL State = S0001, Error Code = 18,456

然后我将配置更改为:

<dataSource id="DS1" jndiName="jdbc/DS1" transactional="true">
    <jdbcDriver libraryRef="MSSQL"/>
    <containerAuthData user="myuser" password="{aes}ADPrOj1GfH/9Am3TSqT7MLN0+sRPkXHUAy7RIk+dbRmZR0fEQTEkzHv1lDTnGhGeaA==" />
    <properties.microsoft.sqlserver serverName="myserver" instanceName="myinstance" databaseName="mydatabase" />
</dataSource>

然后我得到

### Cause: java.sql.SQLException: Login failed for user ''. ClientConnectionId:34a029da-e38a-4d54-a943-9c975009ccba DSRA0010E: SQL State = S0001, Error Code = 18,456

最后,我尝试将密码移至 bootstrap.properties 并用作 属性

bootstrap.properties
pwd={aes}ADPrOj1GfH/9Am3TSqT7MLN0+sRPkXHUAy7RIk+dbRmZR0fEQTEkzHv1lDTnGhGeaA==

<dataSource id="DS1" jndiName="jdbc/DS1" transactional="true">
    <jdbcDriver libraryRef="MSSQL"/>
    <properties.microsoft.sqlserver serverName="myserver" instanceName="myinstance" databaseName="mydatabase" user="myuser" password="${pwd}" />
</dataSource>

### Cause: java.sql.SQLException: Login failed for user 'myuser'. ClientConnectionId:d521779d-9316-4adf-ab61-9118cf66a940 DSRA0010E: SQL State = S0001, Error Code = 18,456

我是 运行 docker 容器上的 securityUtility 命令,因此不应该有任何 OS 会导致问题的差异。我的实际密码确实包含一个 $ 字符,但它会被丢弃吗?我还阅读了应该检查代码页兼容性,如何在 docker 图像终端上执行此操作?

根据 securityUtility 命令的 this knowledge center doc,一些操作系统需要在提供的参数周围加上单引号。我注意到如果我在 Mac、

上尝试以下操作
./securityUtility encode --encoding=aes mypa$$word

./securityUtility encode --encoding=aes 'mypa$$word'

它们产生不同的输出。 而且,当我解码它们时, 前者解码为:

mypa15652word

而后者解码为

mypa$$word

如果你想知道 15652 是从哪里来的,如果我 运行

echo $$

在 Mac 命令提示符下,我返回 15652,这看起来是当前进程 ID。

尝试在对密码进行编码时添加单引号,看看是否有帮助。