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

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

Недавно мы обновили нашу базу данных 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.

Надеюсь, это поможет любому, у кого есть похожая проблема.


person Community    schedule 01.09.2009    source источник
comment
Отличная работа по устранению неполадок и времени, чтобы опубликовать его. Бьюсь об заклад, у вас меньше волос, чем было, когда эта проблема впервые возникла...   -  person David-W-Fenton    schedule 02.09.2009
comment
Спасибо, что поделились этим. Не могли бы вы разделить его на вопрос и ответ? Это лучше послужит дизайну SO.   -  person John Smithers    schedule 02.09.2009
comment
Это ответ? Если да, то отметьте!   -  person djangofan    schedule 02.09.2009
comment
Прекрасная работа! Но этот вопрос навсегда останется в списке без ответа, если какой-либо ответ не будет опубликован и не получит хотя бы один голос.   -  person Bill Karwin    schedule 03.09.2009


Ответы (1)


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

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

person Community    schedule 03.09.2009
comment
Да, возможно, вы правы в том, что символ является зарегистрированным товарным знаком, а не символом авторского права. Это было одно или другое, но зарегистрированные торговые марки подходят лучше, и я удалил это из связей сейчас, поэтому не могу вернуться и проверить. Ваше здоровье - person Jayden; 03.09.2009