SQL Server连接字符串中列出的多个端口

时间:2010-05-14 14:18:55

标签: sql-server vb6 connection-string

我有一个遗留的VB6应用程序,其中servername,databasename,username等在INI文件中定义,但连接字符串的端口号(默认为1433)在应用程序中是硬编码的。它被移动到一个新的sql server后端,运行不同的端口号。我试图避免必须改变和重新编译需要重新测试,文档等的应用程序。我尝试更改INI文件,以便为我放入的新服务器:SERVERNAME \ INSTANCE,NEWPORTNUMBER

这有效地构建了与Data Source = SERVERNAME \ INSTANCE,NEWPORTNUMBER,1433的连接;

当我运行应用程序时,它似乎正常工作,因为它连接到数据库。在我看来,1433部分被忽略了。这是一个有效的假设还是会导致我在这里看不到的问题?

编辑:在VB6代码中构建连接字符串的字符串方式是:

ConnectString = "Provider=MSDataShape;Trusted_Connection=Yes;Data Source=" & SERVER & ",1433;Initial Catalog=" & DATABASE & ";Data Provider=SQLOLEDB.1;Extended Properties=""Network=DBMSSOCN"""

与SERVER&从INI文件中提取DATABASE值。

5 个答案:

答案 0 :(得分:0)

我不确定使用连接字符串的每个库都必须以相同的方式解析它。我认为可能有一个库解析该连接字符串,只是丢弃最后一个端口号,另一个可能会导致无效端口号的错误。哪些库正在使用该连接字符串?

如果您正在使用集成安全性,那么您可以将INI文件中的数据源设置为“SERVERNAME,PORT; Password =”,并让SQL服务器忽略未使用集成安全性的密码密钥。也就是说,如果构造连接字符串的代码不检查那样的东西。噢,威尔·里卡德斯似乎已经说过了。

答案 1 :(得分:0)

端口1433通常会覆盖INSTANCENAME。 (MS blog Referenceanother

我看到3个选项:

  • 正在忽略实例名称,并且您正在连接到端口1433上的默认实例
  • 命名实例侦听端口1433
  • 您有一个客户端别名(不相信这个)

答案 2 :(得分:0)

我们能看到创建连接字符串的代码吗?

是否存在需要使用TCP / IP连接到SQL Server的网络原因?

我的猜测是你只需要包含一个;在服务器名称/实例名称之后,只保留端口号。这将导致端口号成为连接字符串中的无关数据。我认为这只是被忽略了。您可以通过创建test.udl文件并双击它来自己测试创建连接字符串 - 按照向导进行操作。完成后,连接字符串位于udl文件中,您可以使用记事本查看。

当然,如果您正在寻找连接字符串的语法,可以在connectionstrings.com上查找它们

答案 3 :(得分:0)

  1. 下载免费的HEX编辑器
  2. 在某处保存原始exe的副本 安全
  3. 在HEX编辑器中打开exe
  4. 找到1433并将其更改为您的 新端口号
  5. 一旦它起作用,你就不必重新测试所有东西(就像你在重新编译时那样) 如果新的端口号不是四位数,则比较棘手(阻力最小的路径:将其更改为四位端口)

    我过去以这种方式改变了连接字符串。 VB6 exe总是使用DBCS,所以你可能必须使用十六进制编辑器,直到你弄清楚如何以正确的方式使用搜索功能。

    如果端口号存储为整数,则查找起来可能比较困难,但仍然可以(查找附近的字符串以获取线索)。

答案 4 :(得分:0)

显然这个应用程序很快被黑客攻击。尝试使用像SERVER="{your_server},{your_port};FooBar="

这样的简单连接字符串注入来破解它