Почему мой вход в MS SQL с помощью AzureML dataprep с использованием проверки подлинности Windows завершается неудачно?
Я попытался подключиться к базе данных MS SQL с помощью azureml.dataprep
в записной книжке Azure, как описано в https://docs.microsoft.com/en-us/azure/machine-learning/service/how-to-load-data# load-sql-data, используя MSSqlDataSource, используя код вида
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\\MYWINDOWSUSERNAME
а пароль [SECRET-PASSWORD]
совпадает с моим паролем Windows (т. MYWINDOWSDOMAIN\\MYWINDOWSUSERNAME
попытке использовать проверку подлинности Windows).
После запуска запроса с
dataflow = dprep.read_sql(ds, "SELECT top 100 * FROM [dbo].[MYTABLE]")
dataflow.head(5)
я получил
ExecutionError: Ошибка входа.
Я мог бы подключиться к другим базам данных без проверки подлинности Windows нормально. Что я делаю неправильно?
Ответы
Ответ 1
Рассмотрите возможность использования аутентификации SQL-сервера в качестве обходного/альтернативного решения для подключения к этой базе dataflow
будет работать тот же синтаксис dataflow
):
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)
Ответ 2
Вот MS Doc на MSSQLDataSource
. MSSQLDataSource
имеют свойство credentials_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)