sql-server – SQL 2000中的ODBC问题 – > 2005升级

这个维基文章概述了一个问题和一个解决方案。我想发布这个可能有类似问题的其他人,因为我没有找到任何具体解决这个问题在别的地方。

我们最近将SQL Server 2000数据库升级到SQL Server 2005.服务器上的一个数据库是MS Access数据库的后端。 MS Access数据库使用传递查询,通过无DSN的ODBC连接到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 — connection to ‘SQL Server
‘ failed

这最初似乎是一个权限问题,因为升级SQL服务器登录的权限到sysadmin服务器角色减轻了问题(但显然这不是一个很好的解决方案)。

将登录退出sysadmin角色后,我们发现当通过Management Studio连接到SQL Server时,登录可以执行存储过程。 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”更改为其他。

我们改变了ODBC连接字符串的APP组件,并且在存储过程执行之前,MS Access不再尝试执行DBCC TRACEON(208)。

经过进一步测试,我们将问题跟踪到APP组件中包含的“版权”符号:

APP=Microsoft® Access (Pass Through Query)

通过删除版权符号,所有的连接和应用程序的工作原理与之前在SQL 2000上完成的一样。

希望这有助于别人有类似的问题。

这不是注册商标的符号吗?

我相信你打了一个sql server 2005的防御基于odbc的攻击。由于互联网上没有任何内容,因此内部可能会处理MS。

http://stackoverflow.com/questions/1364779/odbc-problems-in-sql-2000-2005-upgrade

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:sql-server – SQL 2000中的ODBC问题 – > 2005升级