我可以使用unixodbc而不会对我的默认用户造成任何问题。但是当我切换到另一个用户时,我收到了一个错误。
[centos@ ~]$ odbcinst -q -s
[ODBC]
[Amazon Redshift DSN 32]
[centos@ ~]$ su ruser
Password:
[ruser@ centos]$ odbcinst -q -s
odbcinst: SQLGetPrivateProfileString failed with Unable to find component name.
在两个用户中都设置了环境变量:
AMAZONREDSHIFTODBCINI=/etc/amazon.redshiftodbc.ini
ODBCSYSINI=/usr/local/odbc
ODBCINI=/etc/odbc.ini
LD_LIBRARY_PATH=/usr/local/lib
LD_PRELOAD=/usr/local/lib/libodbcinst.so
Odbc配置如下:
[ruser@ centos]$ odbcinst -j
unixODBC 2.3.4
DRIVERS............: /usr/local/odbc /odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/odbc /odbc.ini
FILE DATA SOURCES..: /usr/local/odbc /ODBCDataSources
USER DATA SOURCES..: /etc/odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
顺便说一下,我不明白为什么上面的路径中有空格。我不知道是否有办法改变它们。有什么想法可以解决这个问题?两个用户的整体odbc配置似乎相同。
答案 0 :(得分:0)
我在Centos上发现了完全相同的问题,在这里我可以使用默认的centos
用户进行连接,而不能使用任何其他用户。
我能够通过将工作用户(或系统)odbc.ini
和odbcinst.ini
文件复制到另一个用户的主目录中来解决此问题(我将其重命名为分别为.odbc.ini
和.odbcinst.ini
:
〜/ .odbc.ini
[MSSQLTest]
Driver = ODBC Driver 17 for SQL Server
Server = tcp:<ip of server>
〜/ .odbcinst.ini
[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.2.so.0.1
UsageCount=1
最后,我只需要在~/.bashrc
文件中设置以下environment variables,就可以建立连接。
export ODBCSYSINI="<full path to user folder, which would be the evaluated path of {echo ~}>"
export ODBCINSTINI=".odbcinst.ini"
export ODBCINI="<full path to user folder, which would be the evaluated path of {echo ~}>/.odbc.ini"
由于某种原因,我无法使用~
来引用用户文件夹,因此我不得不在环境变量中手动指定完整的用户路径,因此需要完整的.bashrc
文件很简单:
export ODBCSYSINI="/home/mitch"
export ODBCINSTINI=".odbcinst.ini"
export ODBCINI="/home/mitch/.odbc.ini"
通过此设置,我现在可以运行以下命令并成功连接:
$ isql -v MSSQLTest <sql server username> <sql server password>
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>