FreeTDS - TSQL терпит неудачу, когда пароль задан в опции, но успешно при вводе?

tsql ubuntu odbc freetds

382 просмотра

1 ответ

31 Репутация автора

Я пытаюсь подключиться к MS SQL Server через PHP 5.6 с сервером Ubuntu 16.04. Я вынужден использовать эту версию PHP, чтобы обеспечить совместимость с «древним» приложением.

Я установил PHP 5.6 и его модули (pdo, pdo_mysql, readline и т. Д.) Через PPA ondrej без каких-либо проблем, но я не смог найти и установить пакет модуля 'mssql.so', необходимый для приложения, которое я пробую сделать работу.

Вот почему я решил использовать драйверы ODBC (и PDO_ODBC) для подключения к базе данных.

Для этого я установил freetds с помощью unixodbc и настроил мои файлы так:

Файл odbcinst.ini:

введите описание изображения здесь

Файл odbc.ini:

введите описание изображения здесь

и, наконец, файл 'freetds.conf':

введите описание изображения здесь

Хорошо, я полагаю, что все мои файлы хорошо настроены, но следующая часть становится немного странной, позвольте мне объяснить вам: когда я пытаюсь подключиться к базе данных MS SQL, используя tsql и не давая пароль в опции, а набирая его, когда спросил, связь работает:

введите описание изображения здесь

Но когда я пытаюсь дать тот же пароль, что и опция (-P), он не работает (я пробовал как минимум 10 раз с правильным паролем) !!!

введите описание изображения здесь -> tsql не удалось открыть сеанс для пользователя 'WIPSOS-PHP'

Та же проблема возникает, когда я пытаюсь использовать isql с одним из моих коннекторов, которые я настроил в файле 'odbc.ini':

введите описание изображения здесь

Кажется, это связано с паролем , но я не могу найти проблему, не могли бы вы мне помочь?

Автор: Luc Ettlinger Источник Размещён: 19.07.2016 09:43

Ответы (1)


0 плюса

31 Репутация автора

Решение

Я нашел частичный ответ, и он был эффективно связан с паролем: кажется, что специальные символы плохо интерпретируются, когда присутствуют в пароле, заданном для опции -P команды tsql.

Поэтому, в зависимости от вашей оболочки , вы должны экранировать эти символы в строке, которая завершает опцию. В моем случае, используя bash, мне пришлось использовать '\' для экранирования специального символа:

tsql -S hostname -D Database -U User -P pa\$\$word

И теперь это работает!

введите описание изображения здесь

Но когда я пытаюсь экранировать специальные символы с '\' в файле 'odbc.ini', это все равно не работает:

введите описание изображения здесь

Мой следующий вопрос: «Как экранировать специальный символ в файле .ini?» или "Что-то не так в моей конфигурации?"

РЕДАКТИРОВАТЬ: я знаю, что это было давно, но у меня была проблема конфигурации, связанная с именем хоста в файле "freetds.conf". Фактически, я использовал DNS-имя локальной сети сервера вместо его IP-адреса (который работает).

Я надеюсь, что моя проблема по крайней мере поможет некоторым людям, с TSQL и FreeTDS нелегко справиться ...

Автор: Luc Ettlinger Размещён: 19.07.2016 12:38
Вопросы из категории :
32x32