Db2允许使用
SET ENCRYPTION PASSWORD 'mysecretpw'
这避免了必须在每个ENCRYPT()/ DECRYPT()用法上设置密码。
但是,如何在完成工作后删除密码,以便使用相同连接的其他代码部分无法使用我的密码?
SET ENCRYPTION PASSWORD ''
会导致问题:第二次调用得到“没有密码设置”。 SQL20143N / SQLSTATE 51039即使它确实使用" SET ENCRYPTION PASSWORD' mysecretpw'"再次设置了正确的密码。再次使用ENCRYPT / DECRYPT之前... Db2还说你必须指定6到127字节之间的密码... 那么如何正确清除密码?
答案 0 :(得分:0)
SET ENCRYPTION PASSWORD
的Db2 LUW文档(版本11.1)没有明确说明,但产品允许您将密码设置为空字符串,结果是该连接中的后续加密/解密操作将返回-20143平方英尺。当我使用CLP测试此行为时,它在Db2 LUW上的行为与预期一致。
因此,虽然Z / OS的Db2和SET ENCRYPTION PASSWORD
的i-series的Db2都明确提到了密码的空字符串行为(并且Db2 LUW知识中心没有),但是看起来所有三个代码库都有与将密码设置为空字符串的结果相同的行为。
如果你有一个测试用例证明即使在使用SET ENCRYPTION PASSWORD
到有效的正确密码之后你得到了一个-20143 sqlcode,那么也许你应该发布那个测试用例或者用IBM打开一个PMR。如果您的代码是多线程的,您可能会得到意外的结果,因为密码在特殊寄存器中并且更改它不在事务控制之下,因此可能存在时序问题。
在单连接方案中,通过断开会话或将其设置为空字符串,可以删除密码,而在CLP中,当我将密码设置为空时,产品似乎表现得像我预期的那样string,然后将其设置为同一连接的有效密码。