问题描述
我正在尝试保护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。
在编码密码时尝试添加单引号,看看是否有帮助。