ODBC работает только с sudo

632
Peter

У меня проблемы с unixODBC. Я установил последнюю версию и в настоящее время работает только с sudo. Для тестирования ODBC я использовал isql. Пример:

# isql -v testTable [IM002][unixODBC][Driver Manager]Data source name not found, and no default driver specified [ISQL]ERROR: Could not SQLConnect 

С sudo

# sudo isql -v testTable +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ 

Почему это и как я могу использовать это без sudo?

Примечание: я не использовал sudoпри установке. И я установил его как рут и пытаюсь использовать как рут.

ОБНОВИТЬ

# ls -ltr /usr/local/psql/etc/odbcinst.ini ls: cannot access /usr/local/psql/etc/odbcinst.ini: No such file or directory # ls -ltr /etc/odbcinst.ini -rw-r--r-- 1 root root 740 28 nov 8,04 /etc/odbcinst.ini 

Содержание /etc/odbcinst.ini

~]# cat /etc/odbcinst.ini   # Driver from the postgresql-odbc package # Setup from the unixODBC package [PostgreSQL] Description = ODBC for PostgreSQL Driver = /usr/lib/psqlodbcw.so Setup = /usr/lib/libodbcpsqlS.so Driver64 = /usr/lib64/psqlodbcw.so Setup64 = /usr/lib64/libodbcpsqlS.so FileUsage = 1   # Driver from the mysql-connector-odbc package # Setup from the unixODBC package [MySQL] Description = ODBC for MySQL Driver = /usr/lib/libmyodbc5.so Setup = /usr/lib/libodbcmyS.so Driver64 = /usr/lib64/libmyodbc5.so Setup64 = /usr/lib64/libodbcmyS.so FileUsage = 1 

Обновить /etc/odbc.ini

[myDSN] Description = MySQL Connection Driver = MySQL Database = testTable User = mysql Password = ****** Port = 3310 Server = localhost Socket = /var/lib/mysql/mysql.sock 

Еще одно обновление. Без sudo:

odbcinst -j -bash: /usr/local/bin/odbcinst: No such file or directory 

С судо

sudo odbcinst -j unixODBC 2.3.1 DRIVERS............: /etc/odbcinst.ini SYSTEM DATA SOURCES: /etc/odbc.ini FILE DATA SOURCES..: /etc/ODBCDataSources USER DATA SOURCES..: /root/.odbc.ini SQLULEN Size.......: 8 SQLLEN Size........: 8 SQLSETPOSIROW Size.: 8 
0

1 ответ на вопрос

1
netniV

Проверьте /etc/odbcinst.ini, /etc/odbc.ini, ~ / .odbc.ini и $ ODBCINI, чтобы увидеть, какие права назначены. Я полагаю, что пользователь, выполняющий команду, может не иметь прав на один из этих файлов или даже не иметь определенного источника данных, если он был создан под другим пользователем.

Взято из распространенных сообщений об ошибках и что такое odbc.ini и что мне в него вставить? Более того, проверьте /etc/odbc.ini и ~ / .odbc.ini пользователя, к которому вы добавили DSN, а также пользователя, под которым вы работаете. Если они одинаковы, вам нужно сделать это только один раз.


Распространенные сообщения об ошибках

[iODBC] [Driver Manager] Имя источника данных не найдено и драйвер по умолчанию не указан. Не удалось загрузить драйвер, SQLSTATE = IM002

Есть несколько причин, по которым это сообщение может появиться. Лучшее решение - проследить, что происходит: ваше приложение было связано с libiodbc, который пытался найти файл odbc.ini тем или иным способом - либо через переменную среды ODBCINI, либо через запасные пути (обычно это / etc / odbc.ini, в зависимости от того, как он был скомпилирован). Вы должны проверить, что такой файл существует в подходящем месте и доступен ли он (особенно если ваше приложение запускается с другими привилегиями пользователя - например, apache / php работает как пользователь www-data).

Кроме того, возможно, что iODBC нашел подходящий файл odbc.ini, но ни один из найденных файлов не содержит запрошенный DSN. Проверьте синтаксис вашего запроса - правильна ли строка подключения ODBC и существует ли запрашиваемый DSN? См. Также раздел этого часто задаваемого вопроса, озаглавленный «Что такое odbc.ini и что мне в него вставить?».


Что такое odbc.ini

Odbc.ini - это основной файл конфигурации, в котором хранятся все ваши DSN и большая часть параметров конфигурации ODBC. В iODBC есть путь поиска для поиска такого файла конфигурации: сначала проверяется переменная среды ODBCINI, чтобы определить, указывает ли она на подходящий файл, или ~ / .odbc.ini (аналогично пользовательским DSN в Windows), а затем / etc / odbc.ini («общесистемный») - это резервные местоположения.

Файл odbc.ini состоит из 3 частей: набора параметров ODBC, списка DSN, а затем самих определений источника данных, таким образом:

[ODBC Data Sources]  PostgreSQL native localhost = PostgreSQL native driver  PostgreSQL OpenLink localhost = PostgreSQL over OpenLink multi-tier  [PostgreSQL native localhost]  Driver = /usr/lib/postgresql/lib/libodbcpsql.so  Host = localhost  Server = localhost  ServerName = localhost  Database = tim  UserName = tim  UID = tim  Port = 5432  [PostgreSQL OpenLink localhost] Description = PostgreSQL, over openlink MT  Driver = /opt/openlink/lib/oplodbc.so  ServerType = PostgreSQL95  Host = localhost  Database = tim  Username = tim  LastUser = tim  User = tim FetchBufferSize = 99  [ODBC]  ;Trace = 1  ;TraceFile = /tmp/odbctrace.log ;Debug = 1 ;DebugFile = /tmp/odbcdebug.log  

Список источников данных ODBC соотносится с файлом odbcinst.ini (или переменной среды ODBCINSTINI): для каждого значения, используемого в качестве описания драйвера, в odbcinst.ini должен быть соответствующий раздел, содержащий список драйверов и библиотеки установки (чтобы помочь с графической конфигурацией с использованием iodbcadm-gtk, а также используется для отображения поля ввода в случае, если во время соединения представлено недостаточно параметров).

Список атрибутов зависит от драйвера, как показано выше: собственный драйвер postgresql вызывает их по-разному, чем многоуровневый openlink, поэтому вам нужно проверить это в документации вашего драйвера.

С iODBC, если вы загрузили / установили / скомпилировали его, у вас также есть графический интерфейс на основе GTK для настройки ваших DSN ODBC: запустите iodbcadm-gtk.

Комментарии не для расширенного обсуждения; этот разговор был [перемещен в чат] (http://chat.stackexchange.com/rooms/69395/discussion-on-answer-by-netniv-odbc-working-only-with-sudo). DavidPostill 6 лет назад 0

Похожие вопросы