Проблемы ODBC в SQL 2000 → 2005 Обновление

Этот wiki-пост описывает как проблему, так и решение. Я хотел опубликовать это для других, которые могут иметь похожие проблемы, поскольку я не мог найти ничего конкретного, чтобы решить эту проблему в другом месте.

Недавно мы обновили нашу базу данных SQL Server 2000 до SQL Server 2005. Одна из баз данных на сервере является базой для базы данных MS Access. База данных MS Access использует сквозные запросы через ODBC с DSN-less для подключения к SQL Server.

Ниже приведен пример строки подключения DSN-less:

ODBC; DRIVER=SQL Server;SERVER=servername;APP=Microsoft® Access (Pass Through
    Query);DATABASE=databasename;Network=DBMSSOCN;ConnectionTimeout=20;
    Trusted_Connection=Yes

После обновления мы обнаружили, что пользователям не удалось выполнить сквозные запросы и отображалась следующая ошибка:

ODBC - подключение к SQL Server 'failed

Первоначально это было проблемой разрешения, поскольку повышение привилегий для входа сервера SQL Server на роль сервера sysadmin облегчало проблему (но, очевидно, это не очень хорошее решение).

После вывода логинов из роли sysadmin мы обнаружили, что при подключении к SQL Server через Management Studio логин может выполнять хранимые процедуры. Тот же самый логин не может быть из MS Access. Это указывало на то, что MS Access делал, пытаясь выполнить хранимые процедуры, а не проблему с разрешением.

Мы выполнили трассировку на сервере с помощью Profiler, и это показало, что MS Access пытается выполнить следующую команду перед сохраненным выполнением proc:

DBCC TRACEON(208)

Похоже, что эта команда не выполнялась до выполнения хранимой процедуры. Исследования в Интернете показали, что DBCC TRACEON (208) эквивалентен использованию команды "SET QUOTED IDENTIFIERS ON", и что в SQL 2005 priveledges для запуска этой команды DBCC было отменено.

После дальнейших исследований мы нашли ссылки на MS Query, имеющие аналогичную проблему, и что компонент APP строки подключения должен быть изменен с "MS Query" на что-то еще.

По подозрению мы изменили наш компонент APP строки подключения ODBC, и MS Access больше не пытался выполнять DBCC TRACEON (208) до выполнения хранимой процедуры.

После дальнейшего тестирования мы отследили проблему до символа "авторского права", включенного в компонент APP:

APP=Microsoft® Access (Pass Through Query)

Удалив символ авторского права, все было хорошо с соединением, и приложение работало так, как это было ранее сделано на SQL 2000.

Надеюсь, что это поможет кому-либо еще с аналогичной проблемой.

Ответы

Ответ 1

Разве это не знак зарегистрированного товарного знака?

Я считаю, что вы попали на один из серверов sql server 2005 для защиты от атак типа odbc. Поскольку в Интернете нет ничего об этом, вероятно, что-то MS обрабатывается внутренне.