ODBC 仅与 sudo 配合使用

ODBC 仅与 sudo 配合使用

我在使用 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注意:安装时我没有使用过。我以 root 身份安装它并尝试以 root 身份使用它。

更新

# 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

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

答案1

检查 /etc/odbcinst.ini、/etc/odbc.ini、~/.odbc.ini 和 $ODBCINI,查看分配了哪些权限。我认为运行该命令的用户可能没有这些文件之一的权限,或者如果数据源是在其他用户下创建的,则可能甚至没有定义数据源。

取自常见错误消息什么是 odbc.ini 以及我应该在其中放入什么? 此外,检查您添加 DSN 的用户以及您以该用户身份运行的 /etc/odbc.ini 和 ~/.odbc.ini。如果这些是相同的,则只需执行一次。


常见错误消息

[iODBC][驱动程序管理器]未找到数据源名称且未指定默认驱动程序。无法加载驱动程序,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(类似于 Windows 上的用户 DSN),然后 /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 的 GUI 来配置您的 ODBC DSN:运行 iodbcadm-gtk。

相关内容