Проблема с подключением к Sybase DB из сценария Perl - PullRequest
1 голос
/ 05 августа 2020

Мне нужно подключить свой 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");

Мой вопрос: , где использовать EncryptPassword=1 в скрипте Perl. Правильно ли я использую его?

1 Ответ

2 голосов
/ 05 августа 2020

Вау! DBlib - это возвращает меня назад. Когда я в последний раз работал с DBlib (примерно в 1995 году), одна из задач в моем списке заключалась в замене всего использования DBlib на CTlib - новой технологии Sybase, предназначенной для замены DBlib. Вскоре после этого система была снова переписана для использования DBI и DBD :: Sybase - что было рекомендованным способом взаимодействия с базами данных Sybase из программ Perl на протяжении более двадцати лет. . Обратите внимание, что самый последний выпуск syb perl (который является дистрибутивом CPAN, содержащим Sybase :: DBlib и Sybase :: CTlib) был более десяти лет как go. Я почти уверен, что сама 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}]]]]])

Обратите внимание на поле «дополнительные атрибуты» в конце. Бьюсь об заклад, это то место, где нужно go. Также обратите внимание, что это { additional attributes } - так что похоже, что он ожидает ссылку ha sh.

Таким образом, вероятно, что синтаксис, который вы хотите, следующий:

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

Примечание что в этом есть огромные оговорки. Не в последнюю очередь, учитывая, что Sybase :: DBlib не поддерживается в течение десяти лет, я бы не удивился, если бы он вообще не поддерживал зашифрованные пароли.

Но это может сработать. Вероятно, это ваша лучшая надежда.

И, пожалуйста, сделайте все, что в ваших силах, чтобы обновить кодовую базу, чтобы использовать инструменты и библиотеки, которые не поддерживались так долго.

...