Perl - 数据库连接密码中的分号使应用程序失败

问题描述 投票:0回答:1

我们的 Perl 应用程序编译为 exe,执行以下操作:

  • 从ini文件中读取大量参数(包括数据库名+用户名+密码)
  • 使用指定参数连接到数据库并进行一些维护工作

问题:最近管理员在服务器上更改了密码,新密码包含“;” (分号)字符。这使得 Perl 应用程序在尝试连接 DB2 数据库时总是失败。 因此,当 shell 脚本工作正常、win32 应用程序工作正常、.net 组件使用新密码工作正常时,看起来有点奇怪。但只有这个 Perl 可执行文件总是无法连接 db2 db。

我做了一个小实验 - 在本地临时环境中设置相同的密码,我看到了完全相同的效果 - shell 脚本和 win32 应用程序工作正常,但只有 Perl 应用程序失败。 然后我用“-”替换了密码中的分号,现在 Perl 应用程序可以正常工作(所有其他应用程序和脚本也可以使用任何密码值正常工作)。 因此,看起来问题正是出在“;”上。 Perl 应用程序密码中的字符!

有关 Perl 应用程序的信息

请注意:我向 Perl 应用程序添加了调试输出,并且确认传递到 DBI-connect 调用中的密码字符串 100% 有效。因此,带分号的值已从 ini 文件正确加载,并且似乎在 DBI-connect 内部的某处失败。

仅供参考: 用于连接数据库的一段代码:

$pdbh = DBI->connect($dsn, $init::user, $init::passwd);

我们收到的错误消息:

DBI connect('Txxxx','build',...) failed: [IBM][CLI Driver] SQL30082N  Security processing failed with reason "24" ("USERNAME AND/OR PASSWORD INVALID").  SQLSTATE=08001

问题是

  1. 是否可以屏蔽字符串值中的分号字符,以使 DBI(或 DBD::DB2 ?)模块即使在密码中使用分号也能正确连接 db2 数据库?
  2. 从理论上讲 - DBI-connect(...) 这样的函数内带有分号的字符串可能会出现什么问题?
  3. 调用 Perl 函数时,字符串值中的哪些其他字符可能会导致问题?
perl dbi
1个回答
0
投票

DB2 文档 说 DB2 密码中不能有分号。

© www.soinside.com 2019 - 2024. All rights reserved.