Python 为什么使用Windows身份验证使用AzureML dataprep登录MS SQL失败?
我尝试在Azure笔记本中使用连接到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
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)