为一个用户锁定访问旧 SQL Server 2000 数据库

Access old SQL Server 2000 database locked for one user

我有一个旧的 Delphi 应用程序,它使用 SQL Server 2000 Developer Edition,没有 Windows 身份验证访问权限,也没有 sa 用户,只有一个用户在服务器,appuser,只有应用程序可以使用此用户和密码访问服务器和数据库。

我尝试使用 sqlcm 将本地管理员添加到服务器(以单用户模式启动 SQL 服务器),但 SQL Server 2000 不支持它。

连接字符串在 setting.ini 文件中加密

我正在寻找解密连接字符串或将 Windows 管理员用户添加到 SQL 服务器作为管理员

我想在不中断 delphi 应用程序的情况下将另一个数据库附加到同一台服务器

1) 您也可以尝试使用一些内核调试器和调试 Delphi 应用程序在将密码发送到服务器之前从内存中查找和读取解密的密码。您需要深入了解汇编语言才能对其进行调试。

2) 正如 SMor 在评论中所述,尝试将数据文件和事务日志重新附加到您控制下的其他 SQL 实例。

I've tried to add the local admin to the server using sqlcm (starting SQL Server in single-user mode), but it's not supported in SQL Server 2000.

SQLServer 2000支持单用户模式,所以传统的解锁方式SQLServer box应该也适用

可以通过

启用
  1. 通过运行

    在控制台启动服务
    sqlservr.exe -m
    
  2. 通过控制台客户端工具连接:

    osql -E -S.
    

    这一步的挑战是建立第一个用户连接,因为该服务处于 "Single User" 模式,因此它将接受第一个并拒绝所有其他传入连接

  3. 添加登录名

    EXEC master..sp_addlogin @loginame='Domain\Account'
    
  4. 正在授予 SYSADMIN 登录权限

    EXEC master..sp_addsrvrolemember @loginame = N'Domain\Account', @rolename = N'sysadmin'
    
  5. 停止服务,点击CTRL-C

  6. 正常启动服务,通过客户端工具连接并附加另一个数据库

This article 描述了如何通过筛选 sqlservr.exe 进程的转储文件来获取 windows 2000 实例中任何活动会话的密码。

总的来说你:

  1. 从名为 ProcDump v9.0
  2. 的 Microsoft Sysinternals 下载此进程转储实用程序
  3. 以本地管理员身份登录并打开命令提示符
  4. 执行这条命令: procdump -ma sqlservr.exe

  5. 下载Strings

  6. 在procdump文件夹中找到生成的.dmp文件,重命名为file.dmp然后执行这个命令: strings file.dmp > dump.txt

  7. 用记事本打开 dump.txt 并搜索与用户名相连的主机名。您应该在该字符串后立即找到密码。