代码之家  ›  专栏  ›  技术社区  ›  Joseph Van Riper

unixODBC/Postgres密码神秘登录错误

  •  0
  • Joseph Van Riper  · 技术社区  · 7 年前

    我使用odbcinst和正确的模板文件来生成我的.odbc.ini文件。我知道这是正确的,因为我用它用不同的用户名/密码组合连接到不同服务器上的不同Postgres数据库。”在我的开发机器上工作,”俗话说。

    在这个目标机器上,我已经更改了服务器、用户名和密码以匹配我希望它连接的位置。

    因此,在bash命令行上,我使用以下方法进行测试:

    $ isql -v myDSN

    这就产生了:

    [28000][unixODBC]FATAL:  password authentication failed for user "myUser"
    [ISQL]ERROR: Could not SQLConnect
    

    呃,好吧,让我们试试这个:

    $ isql -v myDSN myUser myPassword

    这将产生:

    +---------------------------------------+
    | Connected!                            |
    |                                       |
    | sql-statement                         |
    | help [tablename]                      |
    | quit                                  |
    |                                       |
    +---------------------------------------+
    SQL>
    

    Neato,但当“myPassword”被剪切和粘贴以确保它是相同的时,就相当神秘了。

    好的,那么,在我的二进制文件中,我可以使用以下命令,而不是使用'DSN=myDSN'作为传递到命令行的连接字符串:

    $ my_bin --myArgs --dsn Driver={PostgreSQL\ Unicode}\;Servername=myServer\;Database=myDatabase\;UID=myUser\;PWD=myPassword
    

    [unixODBC]FATAL:  password authentication failed for user "myUser"
    

    (当然,使用 --dsn DSN=myDSN

    此密码正确。如果我使用所有三个命令行参数进行调用,我可以建立连接并在isql中使用它。但是,由于某种原因,在这种环境下,其他一些东西阻止了我正确地做这件事。

    在这个连接的实际密码中,我使用了一个“#”字符。这是唯一一个能以任何方式引起问题的奇怪的角色。我知道bash在命令行中并没有对它做任何奇怪的处理,因为我在可执行文件的stdout中看到它被引用了,我已经尝试在它前面加上\以确保它被正确地转义,以防bash对它做了不愉快的事情。

    我不能用isql做我想做的事。。。我可能请求的数据集需要一些C++(或类似的)爱好。

    再调查一些,我做了以下工作:

    1. 将.odbc.ini文件更改为使用相同的服务器和数据库,但更改了登录名以匹配失败的登录名。然后,我将该角色/密码添加到dev Postgres引擎中,与目标Postgres引擎上的目标帐户匹配。这个失败了。因此,我认为问题可能与密码有关。

    有什么建议吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Joseph Van Riper    7 年前

    这个连接正确。