Этот вики-пост описывает как проблему, так и решение. Я хотел опубликовать это для других, у которых могут быть похожие проблемы, так как я не мог найти ничего конкретно для решения этой проблемы в другом месте.
Недавно мы обновили нашу базу данных SQL Server 2000 до SQL Server 2005. Одна из баз данных на сервере является серверной для базы данных MS Access. База данных MS Access использует сквозные запросы через ODBC без DSN для подключения к SQL Server.
Пример строки подключения без DSN показан ниже:
ODBC; DRIVER=SQL Server;SERVER=servername;APP=Microsoft® Access (Pass Through
Query);DATABASE=databasename;Network=DBMSSOCN;ConnectionTimeout=20;
Trusted_Connection=Yes
После обновления мы обнаружили, что пользователи не могут выполнять сквозные запросы и отображают следующую ошибку:
ODBC — не удалось подключиться к «SQL Server»
Первоначально казалось, что это проблема с разрешениями, поскольку повышение привилегий входа в систему SQL-сервера до роли сервера sysadmin облегчило проблему (но, очевидно, это не лучшее решение).
После возврата логинов из роли системного администратора мы обнаружили, что при подключении к SQL Server через Management Studio логин может выполнять хранимые процедуры. Сам же войти не смог изнутри MS Access. Это указывало на то, что MS Access делал при попытке выполнить хранимые процедуры, а не на проблему с разрешениями.
Мы запустили трассировку на сервере с помощью Profiler, и это показало, что MS Access пытается выполнить следующую команду до выполнения хранимой процедуры:
DBCC TRACEON(208)
Похоже, эта команда не удалась до выполнения хранимой процедуры. Исследования в Интернете показали, что DBCC TRACEON(208) эквивалентен использованию команды 'SET QUOTED IDENTIFIERS ON', и что в SQL 2005 права на выполнение этой команды DBCC были отозваны.
После дальнейших исследований мы обнаружили ссылки на MS Query, имеющие аналогичную проблему, и что компонент APP строки подключения должен быть изменен с «MS Query» на что-то другое.
По наитию мы изменили наш компонент APP в строке подключения ODBC, и MS Access больше не пытался выполнить DBCC TRACEON(208) до выполнения хранимой процедуры.
После дальнейшего тестирования мы отследили проблему до символа «авторское право», включенного в компонент APP:
APP=Microsoft® Access (Pass Through Query)
После удаления символа копирайта все было хорошо с соединением, и приложение работало так же, как и раньше на SQL 2000.
Надеюсь, это поможет любому, у кого есть похожая проблема.