将密码包含在 中时,SQLDriverConnect 有时会失败

Posted

技术标签:

【中文标题】将密码包含在 中时,SQLDriverConnect 有时会失败【英文标题】:SQLDriverConnect fails sometimes when enclosing the password in 将密码包含在 中时,SQLDriverConnect 有时会失败 【发布时间】:2013-06-17 10:09:26 【问题描述】:

根据 SQLDriverConnect 的documentation,

由于连接字符串和初始化文件语法,应避免包含字符 [](),;?*=!@ 的关键字和属性值没有用大括号括起来。

将包含任何字符 [](),;?*=!@ 的大括号 () 括起来的 DSN 或连接字符串值原封不动地传递给驱动程序。

在 SQLServer 中使用连接字符串 DSN=%s;UID=%s;PWD=%s 有效 - 事实上,如果存在某些特殊字符,则不在 中包含密码会失败。但是,对 MS Access 使用相同的字符串会因“密码无效”而失败,并且在删除 时有效。它也不适用于 Oracle。

如果包含在 中的字符串原封不动地传递给服务器,那么它不应该工作吗?还是我错过了什么?

【问题讨论】:

在 Linux 上,使用 DG4ODBC 连接到 ODBC 时,Oracle 不会传递 @ 符号。不确定这在 Windows 上是否相同,但如果可能的话,我也很想知道如何去做。 我不了解 Oracle,但 Access 对特殊(或可接受的)字符和分隔符有自己的规则。尝试使用方括号 [] 而不是花括号 。但是 Access 不允许在密码中包含某些字符 - 我还没有找到具体是什么。 【参考方案1】:

SQLDriverConnect's Access-specific page 声明:

PWD 关键字不应包含任何特殊字符(请参阅 SQLGetInfo 返回值中的 SQL_SPECIAL_CHARACTERS)。

在连接到 Access 时调用 SQLGetInfo function 并将 SQL_SPECIAL_CHARACTERS 作为 InfoType 参数传递应该返回@Andrew Gibson 提到的禁止字符。

knowledge base article 的“更多信息”部分列出了不建议在 Access 应用中使用的特殊字符。

IBM 的 DB2 有一个同名的SQLGetInfo function,具有相同的参数列表,并采用相同的 InfoType 常量来返回特殊字符,其中列出为:

除 a...z、A...Z、0...9 和下划线以外的所有字符

【讨论】:

以上是关于将密码包含在 中时,SQLDriverConnect 有时会失败的主要内容,如果未能解决你的问题,请参考以下文章

当内容包含在流布局中时,如何将单选按钮或复选框及其标签保持在一起

TypeError: unhashable type: 'list' 当我想将一些属性值包含到列表中时

尝试将 boost.serialization 包含到我的 VS 项目中时遇到问题

sh 获取S3上相同目录的密码(在NFS目录中时)

当我将 HTML 放入“包含”中时,为啥我的 javascript 不起作用?

当您将合约存储在映射中时,实际存储了啥?