传奇3架设EI报错用户(null)登录失败未与信任SQL关联及ODBC密码空解决

来源: 作者: 点击:
你这段日志里关键信息就一句:

1:30:14 … EOleException … 用户 '(null)' 登录失败。原因: 未与信任 SQL Server 连接相关联。

后面 MudUtil.pas / svMain2.pas / StartTimerTimer / _Server_JOB_ItemGen 那些调用栈只是 EI(ei_20061128.exe)在 StartTimer 阶段去连库失败炸出来的,不是根因。根因就是 EI 通过 OLE DB / ODBC 去连 SQL Server 时,SQL Server 当前处于“仅 Windows 身份验证”模式,不接受 sa 这类 SQL 登录账号,于是登录名被当成空 '(null)' 拒绝,抛出 80040E4D 那类 OLE 异常。

一、先把 SQL Server 身份验证模式改对(必做)
1. 打开“企业管理器”(SQL2000)或 SSMS(2005/2008)。
2. 左侧展开“Microsoft SQL Servers → SQL Server 组”,右键你的服务器实例 → 属性 → 安全性。
3. 身份验证选:“SQL Server 和 Windows”(混合模式),不是“仅 Windows”。
4. 确定后会提示重启 SQL Server 服务,点是;或者手动进 services.msc 重启 MSSQLSERVER / 对应实例服务。
5. 展开 安全性 → 登录名 → 右键 sa → 属性:
• 密码设成你服务端里写的那个(比如 123456,别带前后空格)

• 取消“强制实施密码策略”“强制密码过期”

• 状态页:登录 = 已启用

6. 重启完在服务里确认 SQL Server (MSSQLSERVER) 真在跑,没跑 EI 必炸。

如果企业管理器本身因为“仅 Windows”连不进去,走注册表强改:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer
右侧 LoginMode 从 1 改成 2(2=混合模式),改完重启 SQL 服务。

二、EI 这边的连接配置要对齐(2006 版 ei_20061128 特性)
老 EI 不是纯 ODBC 走的,它是 ADO + SQLOLEDB.1 直连,配置一般在同目录:
- !setup.txt
• Config.ini / DBConfig.ini

• DBServer.ini 里的 SQLPassword / DBPwd

找 [SQL] 段,按这样写:
Provider=SQLOLEDB.1
DataSource=(local) (有实例名就写 机器名\实例名,如 MYPC\SQLEXPRESS)
InitialCatalog=Account (你还原的账号库名,常见 Account / MudDB)
UserID=sa
Password=你刚设的sa密码
PersistSecurityInfo=True

注意:ei_20061128 这种 2006 老引擎认 SQLOLEDB.1,别用 MSDASQL/ODBC 桥接,不然也容易空登录名。

三、ODBC 数据源里 SA 密码输入后下次仍为空——这是正常的
Windows ODBC 管理器(尤其系统 DSN)默认不在 UI 里回显保存的 SQL 登录密码,点“配置”再看密码框就是空的,只要“测试数据源”能成功就行。真正参与连接的是 EI 自己的配置文件和密码,不是 ODBC 框里那串星号。只要满足下面条件就不用管它:
- 系统 DSN 名称(如 Account、MudDB、game3g)和 EI 配置里引用的名字一致
• 建 DSN 时选的是“使用 SQL Server 登录 ID 和密码”

• 测试连接成功

• EI 配置文件的 Password 和 SQL 里 sa 密码一字不差

如果你服务端其实是直接 SQLOLEDB 连、根本不依赖 ODBC DSN,那 ODBC 里密码空着也无所谓。

四、还连不上的补充排查
1. SQL 服务没起 / 实例名错:services.msc 看 MSSQLSERVER 或 MSSQL$实例 状态;EI 里 DataSource 别乱填 ".",本地默认实例写 (local) 或 127.0.0.1,命名实例写 127.0.0.1\SQLEXPRESS。
2. TCP/IP 协议没开:SQL Server 网络实用工具 / 配置管理器里把 TCP/IP 启用,端口 1433,本地架设防火墙放行 1433。
3. 库没还原:Account、Conlog、Game3g、Manage 等六个核心库要从服务端备份还原进去,空实例 EI 一样起不来。
4. 启动顺序:先 DBServer → LoginSrv → 最后 ei_20061128.exe,全部管理员权限跑,别用兼容模式乱套。
5. 密码复制带入全角空格、换行、BOM:用记事本看 !setup.txt 最稳。

按上面把身份验证改成混合模式 + sa 启用 + EI 配置密码对齐,那条 EOleException “未与信任 SQL Server 连接相关联” 就不会再出了,StartTimerTimer 能正常进 _Server_JOB_ItemGen,EI 正常跑图。