在 Windows 上,如何以 Active Directory 用户身份从 JupyterLab 连接到 SQL Server?

问题描述 投票:0回答:1

我们有一个在 Windows 上运行的 JupyterLab 实例,我们希望按照以下参考连接到 SQL Server 上的数据源:

我们已经在 Windows 上安装了 Microsoft ODBC Driver for SQL Server v18,并且以下 iPython 语句在

.ipynb
文件中完成正常。

import pyodbc
print("Imported pyodgc")

接下来,我们需要构造连接字符串并尝试获得第一个 happy pass 连接。上面的参考提供了以下示例源代码。

# Establish the connection
server = '<server>.database.windows.net'
database = '<database>'
username = '<username>'
password = '<password>'
driver= '{ODBC Driver 18 for SQL Server}'
conn = pyodbc.connect('DRIVER=' + driver + ';SERVER=' +
    server + ';PORT=1433;DATABASE=' + database +
    ';UID=' + username + ';PWD=' + password)
print(conn)
conn.close()

如果使用上面的源码,我们期望得到连接字符串

DRIVER={ODBC Driver 18 for SQL Server};SERVER=<server>.database.windows.net;PORT=1433;DATABASE=<database>;UID=<username>;PWD=<password>

但是,在我们的组织中,我们通过用户的 Active Directory 凭据连接到 SQL Server。例如,我们授予用户

DOMAIN\username
访问权限,然后该用户登录Windows并启动SQL Server Management Studio。这样程序就以用户身份运行了
DOMAIN\username
。因此,客户端将无需输入用户名和密码即可连接。

我们正在尝试将上述工作方式转化为 Jupyter 环境并使其发挥作用。因此,我们构造了以下连接字符串。

DRIVER={ODBC Driver 18 for SQL Server};SERVER=<server>.database.windows.net;PORT=1433;DATABASE=<database>

但是,我们得到了以下错误。并且,驱动程序似乎将

user
视为空字符串并导致登录失败。

---------------------------------------------------------------------------
InterfaceError                            Traceback (most recent call last)
Cell In[16], line 1
----> 1 conn = pyodbc.connect(connect_str)

InterfaceError: ('28000', "[28000] [Microsoft][ODBC Driver 18 for SQL Server]
[SQL Server]Login failed for user ''. (18456) (SQLDriverConnect); [28000] 
[Microsoft][ODBC Driver 18 for SQL Server][SQL Server]Login failed for user ''. (18456)")

我们想知道是否可以使用运行用户的 Active Directory 凭据从 Jupyter 到 SQL Server 建立连接,以及如何连接。

我们感谢任何提示和建议。

sql-server odbc jupyter-lab
1个回答
0
投票

通过以下连接字符串建立工作连接:

DRIVER={ODBC Driver 18 for SQL Server}; SERVER=<server>; DATABASE=<database>; Trusted_Connection=yes

所以,感谢@AlwaysLearning,解决方案的关键是

Trusted_Connection

© www.soinside.com 2019 - 2024. All rights reserved.