使用Windows身份验证从RHEL连接到SQL Server数据库

时间:2017-04-19 13:18:47

标签: sql-server unix driver windows-authentication

我在Superset(来自Airbnb)的安装工作了两周,用于虚拟RHEL机器上的数据可视化以及与SQL Server数据库的连接。但由于我猜测驱动程序的问题,我仍然无法连接到此数据库。我尝试了很多东西,我想知道你是否有解决方案,关于我需要的驱动程序,关于配置的修改等... 有人告诉我有关jTDS驱动程序的信息。也许我需要这样的东西,但对于python。如果您有任何想法,这就是我已经做过的事情。

1)我试图从Superset连接到数据库:

SQL Alchemy URI:mssql://user:password@fr0-iacls-190.eu.company.corp:10001/dbname

ERROR : {"error": "Connection failed!\n\n
The error message returned was:\n(pyodbc.Error) ('IM002', '[IM002] [unixODBC][DriverManager]
Data source name not found, and no default driver specidied (0) (SQLDriverConnect)')"}

2)我尝试使用mssql + pymssql几乎一样:

SQL Alchemy URI:mssql+pymssql://user:password@fr0-iacls-190.eu.company.corp:10001/dbname

ERROR:{"error":"Connection failed!\n\n
The error message returned was:\n(pymssql.OperationalError) (18456, 'DB-Lib error message 20018,
severity 14:\\nGeneral SQL Server error: Check messages from the SQL Server\\n
DB-Lib error message 20002, severity 9:\\n Adaptive Server connection failed (fr0-iacls-190.eu.company.corp:10001)\\n')"}

3)我尝试从虚拟RHEL机器上的终端连接到数据库:

# tsql -S fr0-iacls-190.eu.company.corp -U user
  Password:
  locale is "en_US.UTF-8"
  locale charset is "UTF-8"
  using default charset "UTF-8"
  20^C

这里我有一个定时器,每秒增加一个数字。我在20秒后停止了这个例子。

4)最后我尝试了一个像这样的python脚本:

import pyodbc
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=fr0-iacls-190.eu.company.corp;DATABASE=dbname;UID=;PWD=password')

空UID是另一个StackOverflow帖子中使用的提示。

# python connect.py
  Traceback (most recent call last):
  File "connect.py", line 2, in <module>
  cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=fr0-iacls-190.eu.company.corp;DATABASE=dbname;UID=;PWD=password')
  pyodbc.Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'SQL Server' : file not found (0) (SQLDriverConnect)")

要完成,我读了两个文件,odbc.ini和odbcinst.ini,但我不知道它们是否在好目录(/ etc)中。我不是在root(〜)上工作,而是在root的父目录中工作(cd~ /..)...

如有必要,以下是两个文件:

ODBC.INI

;
;  odbc.ini
;
[ODBC Data Sources]
JDBC = Sybase JDBC Server

[JDBC]
Driver          = /usr/local/lib/libtdsodbc.so
Description     = Sybase JDBC Server
Trace           = No
Servername      = JDBC
Database        = pubs2
UID             = guest

[Default]
Driver          = /usr/local/lib/libtdsodbc.so

ODBCINST.INI

[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

[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

[MSSQLTest]
Driver = ODBC Driver 13 for SQL Server
Server = [http:]fr0-iacls-190.eu.company.corp[,10001]
#
# Note:
# Port is not a valid keyword in the ~/.odbc.ini file
# for the Microsoft ODBC driver on Linux
#

[ODBC Driver 13 for SQL Server]
Description=Microsoft ODBC Driver 13 for SQL Server
Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.1.so.4.0
UsageCount=1

非常感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:0)

要尝试的一些事项:

更正python连接字符串:

你有/etc/odbcinst.ini[ODBC Driver 13 for SQL Server]的别名MS SQL驱动程序,因此在你的python代码中你应该使用它,而不是SQL Server

import pyodbc
cnxn = pyodbc.connect('Driver={ODBC Driver 13 for SQL Server};Server=fr0-iacls-190.eu.company.corp;Port=10001;Database=dbname;UID=user;PWD=password')

使用正确的凭据替换userpassword

使用isql使用odbc.ini测试连接:

通常使用odbcinst.ini设置驱动程序配置,然后使用odbc.ini设置数据库实例(引用驱动程序),因此odbc.ini的有效输入可能是:

[friendly_database_name]
Description=A description to help you remember what this connection is for
Server=fr0-iacls-190.eu.company.corp
Port=10001
Database=dbname
UID=user
PWD=password

如果您安装了isql(如果没有安装unixODBC包的一部分),那么您可以测试:

$ isql -3 -v friendly_database_name

确保没有防火墙阻止您:

我不确定为什么tsql命令失败了,它应该返回1>提示符。确保您可以建立与数据库服务器的telnet连接:

$ telnet fr0-iacls-190.eu.company.corp 10001

应该给你类似的东西:

Trying 12.34.56.78...
Connected to fr0-iacls-190.eu.company.corp.
Escape character is '^]'

然后转到ctrl + ]并输入quit退出(或者ctrl + c取消,如果telnet测试失败,则取消。)< / p>