使用 MS SQL Express 登录:成功!迁移工具包登录:失败?

Posted

技术标签:

【中文标题】使用 MS SQL Express 登录:成功!迁移工具包登录:失败?【英文标题】:Login Using MS SQL Express: Success! Migration Toolkit login: fail? 【发布时间】:2010-11-03 02:05:49 【问题描述】:

(我在 mysql 论坛上的相同帖子没有回复,所以我希望在这里有更好的运气)

我正在尝试为朋友迁移 MS SQL 数据库。我没有对机器的物理访问权限,也没有管理员访问权限 - 只是一个读/写用户。

在 XP 中使用“SQL Server Management Express”,我可以轻松地使用 IP/用户/密码登录。我可以浏览表格,运行查询。很简单。

当我启动迁移工具包,选择 MS SQL 并尝试连接时,我收到以下错误:

---- 连接到源数据库并检索模式名称。初始化 JDBC 驱动程序 ... 驱动程序类 MS SQL JDBC驱动打开连接... 联系 jdbc:jtds:sqlserver://MYSERVERIP:1433/MYDATABASE;user=MYUSERNAME;password=MYPASSWORD;charset=utf-8;domain= 架构名称列表无法 已检索(错误:0)。 ReverseEngineeringMssql.getSchemata : 用户 'MYUSERNAME' 登录失败。 细节: net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:365) net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2781) net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2224) net.sourceforge.jtds.jdbc.TdsCore.login(TdsCore.java:599) net.sourceforge.jtds.jdbc.ConnectionJDBC2.(ConnectionJDBC2.java:331) net.sourceforge.jtds.jdbc.ConnectionJDBC3.(ConnectionJDBC3.java:50) net.sourceforge.jtds.jdbc.Driver.connect(Driver.java:178) java.sql.DriverManager.getConnection(未知 资源) java.sql.DriverManager.getConnection(未知 资源) com.mysql.grt.modules.ReverseEngineeringGeneric.establishConnection(ReverseEngineeringGeneric.java:141) com.mysql.grt.modules.ReverseEngineeringMssql.getSchemata(ReverseEngineeringMssql.java:99) sun.reflect.NativeMethodAccessorImpl.invoke0(Native 方法) sun.reflect.NativeMethodAccessorImpl.invoke(未知 资源) sun.reflect.DelegatingMethodAccessorImpl.invoke(未知 资源) java.lang.reflect.Method.invoke(未知 资源) com.mysql.grt.Grt.callModuleFunction(未知 来源)


有什么想法吗?我已经三重检查了登录详细信息,没有骰子。我缺司机吗?服务器设置很奇怪吗?不知道从这里去哪里。

提前致谢。

更新: 我下载并运行了 dbVisualizer(它也使用 JDBC)并使用相同的 SQL 身份验证信息正常连接......这告诉我它不是服务器,并且没有花哨的 MSFT 东西。

但仍然不知道下一步该做什么......

【问题讨论】:

【参考方案1】:

我明白了,有一个博客的错误描述几乎相同

http://house9.blogspot.com/2007/12/mysql-migration-toolkit.html

另外,为了运行该工具,您需要访问权限

掌握 INFORMATION_SCHEMA

我建议执行查询(这应该由您的管理员完成)

use [master]
GO
GRANT SELECT ON SCHEMA::[INFORMATION_SCHEMA] TO [MYUSERNAME]
GO
use [master]
GO
GRANT VIEW DEFINITION ON SCHEMA::[INFORMATION_SCHEMA] TO [MYUSERNAME]
GO

最后,如果您授予了这些权限,但您遇到了同样的错误,请让您的系统管理员运行 SQL Profiler,然后运行您的工具并查看它尝试执行哪些查询以及那里发生了哪些 SQL 或安全异常(如果任何)

【讨论】:

它是 SQL Express,所以不能选择 Profiler 我用的是SQL express客户端,但是服务器是SQL 2000【参考方案2】:

您的连接字符串是否在参数值中包含特殊(非字母数字)字符?如果是这样,请尝试对它们进行 urlencoding(如 / => %2f)和/或将它们括在大括号中

【讨论】:

不,连接字符串中没有特殊字符。【参考方案3】:

我认为 SQL Server 的特定数据库或表缺少权限。 前一段时间我在 dts 迁移中遇到了同样的问题。

用户需要对 MSDB 或 sysdtspackag 表的读取权限。

我认为您的问题类似于“无法检索架构名称列表”,可能您的用户对某些系统表的权限不足。

【讨论】:

谢谢,理查德。系统管理员确认我拥有这些权限。【参考方案4】:

检查你的 SQL 服务器是否“监听”了 ip、tcp 协议和端口 1433。

尝试执行

telnet server_ip_addres 1433

如果 telnet 窗口将关闭 - SQL 服务器不会监听 ip、端口或 tcp。如果您有权访问“SQL Server 配置管理”或服务器注册表,则可以根据需要直观地找到信息(配置管理 - 协议、TCP/IP、IP 地址、端口)和正确的连接字符串。以防万一您正在使用的 jdbc 驱动程序 link to doc。

【讨论】:

嘿 Foxy,感谢您的回复。 1433 是开放和倾​​听的。 (使用上面的 telnet 字符串确认,并与管理员核实)。 1.您的 SQL 是否在“混合模式”(基于用户名/密码的身份验证)下工作?该模式隐含在您的连接字符串 (msdn.microsoft.com/en-us/library/ms143705.aspx) 中。 2.你是连接到默认实例(也暗示连接字符串)还是命名实例(msdn.microsoft.com/en-us/library/ms143744(SQL.90).aspx)? 1) 允许用户名/密码验证——这就是我使用 SQL 管理和 dbVisualizer 进行连接的方式。 2) 打印@@servername 返回“专用” 最后的想法 - 检查您是否拥有最新版本的 jtds 驱动程序,或者至少您能够使用相同的 jdbc 驱动程序 (jtds) 并使用相同的设置连接到 SQL。

以上是关于使用 MS SQL Express 登录:成功!迁移工具包登录:失败?的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 给出 SQL Server 错误“登录超时已过期”,然后连接成功

在 MS Access 中使用 SQL Server Express 引擎

如何将文本列转换为 MS SQL Express 中的整数列?

MS Access 2007 查询不在 SQL Server 2008 上运行

什么是MS SQL Server 2005 Express的jTDS JDBC Connect URL

登录成功后重定向express js路由