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

问题描述

我正在尝试保护Liberty 20.0.0.3泊坞窗映像,并且无法获得数据源正常工作的编码密码。纯文本密码可以正常工作。

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

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,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,456

我正在docker容器上运行securityUtility命令,因此不应有任何会引起问题的操作系统差异。我的实际密码确实包含$字符,所以可以扔掉它吗?我还阅读了应检查的代码页兼容性,如何在docker映像终端上做到这一点?

解决方法

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

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

vs

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

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

mypa15652word

而后者会解码为

mypa$$word

如果您想知道15652的来源,我是否可以运行

echo $$

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

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