【问题标题】:Connectivity issue to Sybase DB from Perl script从 Perl 脚本到 Sybase DB 的连接问题
【发布时间】:2020-11-25 11:15:08
【问题描述】:

我必须将我的 Perl 脚本连接到新构建的 Sybase 服务器版本 - 16.0.03.08.1019

Error - login  Failed (due to encrypt password issue)

之前脚本是用 Perl 编写的:

$conn = Sybase::DBlib->new($user,$pass,$server,"$dbase Handle");
$conn->sql("use $dbase");

我在网上搜索了所有写有EncryptPassword=1的地方。

我尝试了以下两种方法,但都没有成功。

$conn = Sybase::DBlib->new($user,$pass,$server,"$dbase Handle","EncryptPassword=1");
$conn = Sybase::DBlib->new("EncryptPassword=1",$user,$pass,$server,"$dbase Handle");

我的问题是,在 Perl 脚本中在哪里使用 EncryptPassword=1。我在正确的地方使用它吗?

【问题讨论】:

    标签: perl sybase


    【解决方案1】:

    哇! DBlib - 这让我回来了。当我最后一次使用 DBlib 时(大约在 1995 年),我列出的任务之一是用 CTlib 替换所有 DBlib 的使用——这是 Sybase 旨在替换 DBlib 的新技术。不久之后,系统再次被改写为使用DBIDBD::Sybase - 这是二十多年来从 Perl 程序与 Sybase 数据库通信的推荐方式。您会注意到,sybperl(它是包含 Sybase::DBlib 和 Sybase::CTlib 的 CPAN 发行版)的最新版本是十年前的事了。我很确定 Sybase 自己从本世纪开始就不再支持 DBlib。

    所以,请记住,您使用的古老技术基本上已经过时且不应该被使用,有什么可以在不重写整个系统的情况下帮助您的吗?

    也许吧。

    查看Sybase::DBlib 的文档,我看到了如何编写对new() 的调用的示例:

    $dbh = new Sybase::DBlib [$user [, $pwd [, $server [, $appname [, {additional attributes}]]]]]
    

    忽略它使用任何理性程序员都会避免使用的 new Class 语法这一事实 - Class->new() 版本是这样的:

    $dbh = Sybase::DBlib->new([$user [, $pwd [, $server [, $appname [, {additional attributes}]]]]])
    

    请注意末尾的“附加属性”字段。我敢打赌那是你的东西需要去的地方。另请注意,它是{ additional attributes } - 所以它看起来需要一个哈希引用。

    所以你想要的语法似乎是这样的:

    $conn = Sybase::DBlib->new($user, $pass, $server, "$dbase Handle", {
      EncryptPassword => 1,
    });
    

    请注意,这里有很多警告。尤其重要的是,鉴于 Sybase::DBlib 十年来一直不受支持,如果它根本不支持加密密码,我一点也不感到惊讶。

    但它可能会起作用。这可能是你最大的希望。

    请尽一切可能更新您的代码库,以使用长期以来不受支持的工具和库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-07
      • 2023-03-09
      • 1970-01-01
      • 2012-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      相关资源
      最近更新 更多