使用 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 上运行