我正在尝试使用Windows身份验证模式/活动目录模式和Python从Linux机器连接到SQL数据库。
drivers = [item for item in pyodbc.drivers()]
driver = drivers[-1]
print("driver:{}".format(driver))
server = '10.0.1.49'
database = 'QE2S_LASA01'
uid = ''
pwd = ''
Trusted_Connection ='yes'
TrustServerCertificate = 'yes'
Encrypt = 'yes'
Integrated_Security = 'SSPI'
con_string = f'DRIVER={driver};SERVER={server};DATABASE={database};UID={uid};PWD={pwd};Trusted_Connection={Trusted_Connection};TrustServerCertificate={TrustServerCertificate};Encrypt={Encrypt};Integrated_Security={Integrated_Security};'
print(con_string)
cnxn = pyodbc.connect(con_string)
cursor=cnxn.cursor()
cursor.execute("SELECT @@VERSION as version")
while 1:
row=cursor.fetchone()
if not row:
break
print(row.version)
但是我得到了这个:
neouser@inpvm01:/DATA-HDD01/ingestion/neo_ingestion/NEO-LASA$ python3 python_table_import.py
driver:ODBC Driver 18 for SQL Server
DRIVER=ODBC Driver 18 for SQL Server;SERVER=10.0.1.49;DATABASE=QE2S_LASA01;UID=ITSERVICESm53132;PWD=Dallastexas+6;Trusted_Connection=yes;TrustServerCertificate=yes;Encrypt=yes;Integrated_Security=SSPI;
Traceback (most recent call last):
File "python_table_import.py", line 52, in <module>
cnxn = pyodbc.connect(con_string)
pyodbc.Error: ('HY000', '[HY000] [Microsoft][ODBC Driver 18 for SQL Server]SSPI Provider: No Kerberos credentials available (default cache: FILE:/tmp/krb5cc_1051) (851968) (SQLDriverConnect)')
是否有任何方法可以在脚本中禁用Kerberos,以便它使用脚本中提到的UID和密码登录?
MS SQL使用两种模式:名称/密码和Windows身份验证。
如果您使用Windows Authentication, MS SQL期望通过SSO登录(基于登录到与Kerberos相关的操作系统),并且不可能向DB连接字符串添加名称和密码。
如果您使用名称/密码,你必须在连接字符串中提到这些信息(Name/Passwd)。
回到您的示例,似乎您使用MS SQL模式Windows身份验证,在这种情况下需要SSO (Kerberos),并且您无法在DB连接字符串中设置名称和密码。
如果您需要删除单点登录(与Kerberos相关),您必须将MS SQL的模式从Windows身份验证更改为名称/密码,然后您可以指定登录的名称/密码(小提醒,在这种情况下,DB连接字符串中的名称和密码将不同于登录到域/操作系统)。