2 votes

ODBC ne fonctionne qu'avec sudo

J'ai des problèmes avec unixODBC. J'ai installé la dernière version et actuellement elle ne fonctionne qu'avec sudo . Pour tester l'ODBC, j'ai utilisé isql . Exemple :

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

Con sudo

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

Pourquoi et comment l'utiliser sans sudo ?

Note : Je n'ai pas utilisé sudo tout en l'installant. Je l'ai installé en tant que root et j'essaie de l'utiliser en tant que root.

UPDATE

# 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

Contenu de /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

Mise à jour /etc/odbc.ini

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

Une autre mise à jour. Sans sudo :

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

Avec sudo

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

2voto

netniV Points 261

Vérifiez /etc/odbcinst.ini, /etc/odbc.ini, ~/.odbc.ini et $ODBCINI pour voir quels droits sont attribués. Je pense que l'utilisateur qui exécute la commande n'a peut-être pas les droits sur l'un de ces fichiers, ou n'a peut-être même pas défini la source de données si elle a été créée sous un autre utilisateur.

Tiré de Messages d'erreur courants et Qu'est-ce qu'un odbc.ini et que dois-je y mettre ? De plus, vérifiez les fichiers /etc/odbc.ini et ~/.odbc.ini de l'utilisateur auquel vous avez ajouté le DSN, ainsi que de l'utilisateur sous lequel vous vous exécutez. S'ils sont identiques, vous n'aurez à le faire qu'une seule fois.


Messages d'erreur courants

[iODBC][Driver Manager]Nom de la source de données non trouvé et pas de défaut pilote par défaut. Le pilote n'a pas pu être chargé, SQLSTATE=IM002

Il y a plusieurs raisons pour lesquelles ce message peut apparaître. La meilleure solution est de est de retracer ce qui se passe : votre application a été liée à la librairie avec libiodbc, qui a essayé de trouver un fichier odbc.ini d'une manière ou d'une autre d'une manière ou d'une autre - soit par la variable d'environnement ODBCINI ou les chemins de repli (typiquement /etc/odbc.ini, selon la façon dont il a été compilé). compilé). Vous devez vérifier qu'un tel fichier existe dans un emplacement approprié, et qu'il est accessible (particulièrement si votre application application s'exécute avec des privilèges d'utilisateur différents - par exemple, apache/php s'exécute en tant que www-data).

De plus, il se peut que iODBC ait trouvé un fichier odbc.ini mais aucun des fichiers trouvés ne contient le DSN que vous avez demandé. Vérifiez la syntaxe de votre demande - la chaîne de connexion ODBC est-elle correcte, et le DSN que vous demandez existe-t-il ? Voir aussi la section de cette FAQ, ci-dessus, intitulée `Qu'est-ce qu'un odbc.ini et qu'est-ce que je dois y mettre?'.


Qu'est-ce qu'un odbc.ini ?

Un odbc.ini est le fichier de configuration principal dans lequel tous vos DSNs et DSN et une grande partie des paramètres de configuration ODBC. recherche pour trouver un tel fichier de configuration : d'abord, la variable d'environnement d'environnement ODBCINI est inspectée pour voir si elle pointe vers un fichier fichier approprié, ou ~/.odbc.ini (analogue aux DSNs d'utilisateur sur Windows) alors /etc/odbc.ini ("system-wide") sont des emplacements de repli.

Le fichier odbc.ini comprend 3 parties : un ensemble d'options ODBC, une liste de DSNs, et ensuite les définitions des sources de données elles-mêmes, ainsi :

[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 

La liste des sources de données ODBC est en corrélation avec le fichier odbcinst.ini (ou la variable d'environnement ODBCINSTINI) : pour chaque valeur utilisée comme description du driver il doit y avoir une section correspondante dans le fichier odbcinst.ini listant à la fois le pilote et la bibliothèque de configuration (pour aider à la configuration graphique) graphique à l'aide de iodbcadm-gtk, et également utilisé pour afficher une boîte de d'options insuffisantes présentées au moment de la connexion).

La liste des attributs dépend du pilote, comme le montre l'exemple ci-dessus. pilote postgresql natif les appelle différemment de openlink multi-tier, donc vous devez vérifier avec la documentation de votre pilote.

Avec iODBC, en supposant que vous l'ayez téléchargé/installé/compilé, vous avez également également une interface graphique basée sur GTK pour configurer vos DSN ODBC : exécutez iodbcadm-gtk.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X