Не удалось загрузить ошибку adalsql.dll при вызове `Invoke-sqlcmd`

У меня VS2015 с SSDT. установлен вместе с SSMS и модуль PowerShell SqlServer (который включает команду invoke-sqlcmd), и все же, если я попробуйте выполнить запрос к хранилищу данных SQL Azure следующим образом:

invoke-sqlcmd  -Query "Select top 5 * from customer"  -ConnectionString "Server=tcp:my.database.windows.net,1433;Database=Customer;  Authentication=Active Directory Integrated; Encrypt=True; "

Я получаю следующую ошибку:

invoke-sqlcmd : Unable to load adalsql.dll (Authentication=ActiveDirectoryIntegrated). Error code: 0x2. For more information, see
http://go.microsoft.com/fwlink/?LinkID=513072
At line:1 char:1
+ invoke-sqlcmd  -Query "Select top 5 * from vwOffer"  -ConnectionStrin ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Invoke-Sqlcmd], SqlException
    + FullyQualifiedErrorId : SqlExectionError,Microsoft.SqlServer.Management.PowerShell.GetScriptCommand

invoke-sqlcmd :
At line:1 char:1
+ invoke-sqlcmd  -Query "Select top 5 * from vwOffer"  -ConnectionStrin ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ParserError: (:) [Invoke-Sqlcmd], ParserException
    + FullyQualifiedErrorId : ExecutionFailureException,Microsoft.SqlServer.Management.PowerShell.GetScriptComman

Если я попытаюсь установить adalsql.dll напрямую, я получу сообщение о том, что A higher version already exists и Я вижу, что обе версии dll можно найти здесь:

 C:\Windows\SysWOW64\adalsql.dll
 C:\Windows\System32\adalsql.dll

и все же, invoke-sqlcmd не может его найти. Любая идея, как либо (A) зарегистрировать существующую dll, чтобы invoke-sqlcmd мог ее найти, либо (B) удалить ее, чтобы ее можно было переустановить?

Между прочим, я могу использовать аутентификацию Active Directory с 32-разрядным SQLCMD.exe, поэтому я знаю, что 32-разрядная dll работает нормально. Это просто 64-битная dll, которая не загружается должным образом...


person Jthorpe    schedule 08.08.2017    source источник
comment
У меня точно такая же проблема. Только что я удалил библиотеку аутентификации Active Directory для SQL Server из appwiz.cpl и переустановил, и это работает? Вот установщик, который я использовал: microsoft.com/en-us /download/confirmation.aspx?id=48742   -  person Bill Sambrone    schedule 09.08.2017
comment
Если вы опубликуете ответ с приведенным выше и включите удаление через settingsAdd or Remove Programs, я приму это как ответ. Я бился все утро, пытаясь понять, как переустановить его...   -  person Jthorpe    schedule 09.08.2017


Ответы (5)


Так вот, эта проблема меня тоже напрягала. Я не понимаю, как это произошло, но, возможно, это просто совпадение, что это произошло, когда я установил последнюю версию SSMS. Мое исправление заключалось в следующем:

  1. Перейдите к установке или удалению программ

  2. В маленьком окне поиска введите sql или просто найдите: Библиотека аутентификации Active Directory для SQL Server.

Примечание. Этого не будет в списке установленных программ Windows, если вы установили Visual Studio 2019. Вы можете запустить тот же установщик, вызвав MsiExec.exe /I{6BF11ECE-3CE8-4FBA-991A-1F55AA6BE5BF} из командной строки.

  1. Удалите этого маленького парня

  2. Перейдите сюда и загрузите последнюю версию библиотеки ADAL (выберите x64):
    https://www.microsoft.com/en-us/download/confirmation.aspx?id=48742

  3. Ради интереса, перезагрузись

  4. Теперь ваш материал должен корректно загружать adalsql.dll!

Обновление № 3, 13 июля 2020 г.. Установка старой версии работает, но уязвима для удаления установщиками SSMS и VS2019. Причина, по которой новая версия ADAL не работает, заключается в том, что ее установщику не удалось добавить запись реестра, указывающую на 64-разрядную версию adal.dll. Ниже я добавил ответ, который включает отсутствующее значение реестра, которое вы можете добавить самостоятельно. Как только это будет сделано, вам больше никогда не понадобится танцевать этот танец. - @Тулло_x86

person Bill Sambrone    schedule 10.08.2017
comment
Я только что столкнулся с той же проблемой, запустив сценарий Powershell с использованием Azure Active Directory для добавления пользовательских разрешений к ряду баз данных SQL. Предложение Билла определило работу, так что +1. - person jl.; 18.08.2017
comment
Каждое чертово обновление SSMS мне нужно возвращаться к этому ответу, так как каждый раз они его ломают! Я хотел бы проголосовать больше одного раза - person trailmax; 18.05.2018
comment
К вашему сведению, я получил это с 14.x ADAL. Установка 13.x в соответствии с рекомендациями решена. Не нужно было перезагружаться. - person w00ngy; 06.12.2018
comment
Я обнаружил, что простой ремонт решил ту же проблему без перезагрузки. Счастливый. - person Eric Patrick; 02.02.2019
comment
Это больше не отображается после установки Visual Studio 2019. Запись в разделе «Приложения и функции» удаляется, даже если у вас все еще установлен VS2017. - person Tullo_x86; 31.05.2019
comment
Однако вы можете удалить версию VS2019, запустив MsiExec.exe /I{6BF11ECE-3CE8-4FBA-991A-1F55AA6BE5BF} из командной строки и выбрав Удалить в мастере. - person Tullo_x86; 31.05.2019
comment
Обновление: я опубликовал ответ, который позволяет вам быть защищенным от SSMS и VS, уничтожающих старую версию adalsql.dll, добавляя отсутствующую запись реестра установщика ADAL: stackoverflow.com/a/62883624/130200 - person Tullo_x86; 13.07.2020

Удивительно простое решение этой надоедливой проблемы

  1. Убедитесь, что у вас действительно установлен ADAL (достаточно существования C:\Windows\system32\adal.dll)

  2. Вставьте это в файл .reg:

     Windows Registry Editor Version 5.00
    
     [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSADALSQL]
     "TargetDir"="C:\\Windows\\System32\\adal.dll"
    
  3. Дважды щелкните файл .reg, чтобы установить это значение.

Готово. Иди празднуй!

Объясните, WTF происходит. Почему это необходимо?

Эта ошибка возникает из-за того, что адаптер .NET для SQL Server не может найти adal.dll. Но почему это? Он установлен, да?

Что ж, установщик последней версии ADAL (в комплекте с VS 2019 и последней версией SQL Serer Management Studio) добавляет запись реестра для 32-разрядной версии DLL (в C:\Windows\SysWOW64\adal.dll), но не< /strong> добавьте запись для 64-битной версии (которая устанавливается в C:\Windows\system32\adal.dll). Если вы создадите и запустите свое приложение в 32-битном режиме, вы никогда не увидите этот манифест ошибки.

Это просто ошибка в программе установки ADAL. Предположительно, Microsoft не обнаружила его, поскольку и Visual Studio, и SSMS являются 32-разрядными приложениями и поэтому не ищут 64-разрядную версию.

person Tullo_x86    schedule 13.07.2020
comment
Спасибо, это решило досадную проблему для меня. Хотел бы я проголосовать еще около дюжины раз. - person Brad Crandell; 25.09.2020
comment
После десятого раза, когда это было ошеломлено — и в общей сложности рабочий день, потраченный на устранение его последствий, — я вспомнил, что видел сообщение в блоге со ссылкой на ключи реестра для ADAL, и отправился на его поиски. Каково же было мое удивление, когда установщик просто забыл! - person Tullo_x86; 08.10.2020

В моем случае виновником был VS 2019. Он имеет более новую версию пакета ADALSQL. Для меня это был путь «C:\ProgramData\Microsoft\VisualStudio\Packages\sql_adalsql, версия = 16.0.61903.25110, чип = x64, язык = en-US», который я удалил и установил нужную версию для решения проблемы.

Надеюсь это поможет!

person kiran    schedule 30.04.2019
comment
Самый простой способ удалить версию VS2019 — использовать установщик Windows, чтобы запустить мастер установки, используя его ссылку GUID и выбрав «Удалить». Это больше не отображается после установки Visual Studio 2019. Запись в разделе «Приложения и функции» удаляется, даже если у вас все еще установлен VS2017. В командной строке запустите MsiExec.exe /I{6BF11ECE-3CE8-4FBA-991A-1F55AA6BE5BF}. - person Tullo_x86; 31.05.2019

В моем случае программа добавления/удаления не показывала никаких установленных экземпляров «Библиотеки аутентификации Active Directory». Тем не менее, попытка установить библиотеку не даст результата была установлена ​​более новая версия.

Я освободился, открыв редактор реестра (regedt32) и воспользовавшись функцией поиска из

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer

ищу adalsql.

Это получило хит с содержащими ключи

DisplayName: Active Directory Authentication Library for SQL Server
DisplayVersion: 15.0.1300.359

вместе с, что важно, путем к соответствующему установщику. Для меня это было что-то вроде c:\windows\installer\4c334521.msi. Я запустил этот msi и, наконец, смог «удалить». После этого запуск установщика по ссылке «библиотека» выше, наконец, заработал.

person Tommy    schedule 03.05.2019

Или, если вы планируете обновить SSMS в настоящее время, просто удалите «Библиотеку аутентификации Active Directory для SQL Server» и восстановите SSMS.

В следующий раз, когда вы обновите SSMS, ничего не сломается. SSMS приносит свою собственную adalsql.dll и знает, как обновить ее при обновлении SSMS. Но если вы установили adalsql с чем-то другим (или с помощью https://www.microsoft.com/en-us/download/confirmation.aspx?id=48742), SSMS каким-то образом не работает.

person petoulachi    schedule 30.05.2018