Python 为什么使用Windows身份验证使用AzureML dataprep登录MS SQL失败?

Python 为什么使用Windows身份验证使用AzureML dataprep登录MS SQL失败?,python,sql-server,azure,azure-authentication,Python,Sql Server,Azure,Azure Authentication,我尝试在Azure笔记本中使用连接到MS SQL数据库,如中所述,使用,使用表单代码 import azureml.dataprep as dprep secret = dprep.register_secret(value="[SECRET-PASSWORD]", id="[SECRET-ID]") ds = dprep.MSSQLDataSource(server_name="[SERVER-NAME]", database_name="[D

我尝试在Azure笔记本中使用连接到MS SQL数据库,如中所述,使用,使用表单代码

import azureml.dataprep as dprep

secret = dprep.register_secret(value="[SECRET-PASSWORD]", id="[SECRET-ID]")

ds = dprep.MSSQLDataSource(server_name="[SERVER-NAME]",
                       database_name="[DATABASE-NAME], [PORT]",
                       user_name="[DATABASE-USERNAME]",
                       password=secret)
设置
[DATABASE-USERNAME]
等于
MYWINDOWSDOMAIN\\mywindowusername
,密码
[SECRET-password]
与我的Windows密码一致(即尝试使用Windows身份验证)

在使用

dataflow = dprep.read_sql(ds, "SELECT top 100 * FROM [dbo].[MYTABLE]")
dataflow.head(5)
我明白了

ExecutionError:登录失败

我可以在没有Windows身份验证的情况下连接到其他数据库。我做错了什么?

MSSQLDataSource
实例有一个属性,
credentials\u type
,默认为
SERVER
。在执行查询之前,请尝试将其显式设置为
WINDOWS
。此外,端口应与服务器名称一起指定

import azureml.dataprep as dprep

windows_domain = 'localhost'
windows_user = 'my_user'
windows_password = 'my_password'

secret = dprep.register_secret(value=windows_password, id="password")

ds = dprep.MSSQLDataSource(server_name="localhost",
                   database_name="myDb",
                   user_name=f'{windows_domain}\{windows_user}',
                   password=secret)

ds.credentials_type = dprep.DatabaseAuthType.WINDOWS

dataflow = dprep.read_sql(ds, "SELECT top 100 * FROM [dbo].[MYTABLE]")
dataflow.head(5)
考虑将其用作连接到该数据库的变通/替代解决方案(相同的
dataflow
语法将起作用):

编辑:请注意,
dataprep
的用法已被弃用,
sqlalchemy
可以作为替代方法使用

将熊猫作为pd导入
从sqlalchemy导入创建引擎
def mssql_引擎(用户=“[DATABASE-USERNAME]”,
password=“[SECRET-password]”,
host=“[SERVER-NAME],[PORT]”,
db=“[DATABASE-NAME]”:
引擎=创建引擎(f'mssql+pyodbc://{user}:{password}@{host}/{db}?驱动程序=SQL+Server')
回程发动机
query=“选择…”
df=pd.read\u sql(查询,mssql\u引擎())

您是否尝试使用其他数据库工具访问数据库?像
datagrip
?嗨!想坚持使用
dataprep
(我可以使用ODBC驱动程序访问数据库),但想在这里使用AzureML工具。你检查过Azure中SQL数据库的防火墙设置吗?应该可以(?)啊,谢谢,但仍然失败,执行错误:无法连接到指定的数据库。最后我放弃了(参见我自己关于如何“解决”这一问题的回答)@Davidifocco我稍微修改了上面的答案。我可以成功地使用它在本地PC上对sql express数据库进行windows身份验证/查询。我没有完整的域可供使用,但本地windows身份验证工作正常。实际上,经过进一步测试,指定的windows凭据似乎与服务器身份验证无关n、 如果没有提供windows凭据,查询将失败,但提供无效凭据没有任何区别-身份验证使用运行python进程的windows用户。我不确定这在linux上如何工作-对windows身份验证的支持似乎非常有限。
import azureml.dataprep as dprep
secret = dprep.register_secret(value="[SECRET-PASSWORD]", id="[SECRET-ID]")

ds = dprep.MSSQLDataSource(server_name="[SERVER-NAME],[PORT]",
               database_name="[DATABASE-NAME]",
               user_name="[DATABASE-USERNAME]",
               password=secret)