欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

恢复SQL Server实例连接

程序员文章站 2022-06-13 23:49:24
...

问题: 开启SQL Server 2008之后,本地管理员组不再需要手动添加,因为在安装的时候已经默认添加。你甚至只需要把当前用户手动添加到本地管理员用户即可。这意味着,特别是如果你不使用混合认证模式(或者忘记了sa密码),你可能会被拒绝登录自己的SQL Serve

问题:

开启SQL Server 2008之后,本地管理员组不再需要手动添加,因为在安装的时候已经默认添加。你甚至只需要把当前用户手动添加到本地管理员用户即可。这意味着,特别是如果你不使用混合认证模式(或者忘记了sa密码),你可能会被拒绝登录自己的SQL Server实例。我遇到过一个情景,一个职员离开,但是他的windows账号,只拥有SQL Server管理员权限,会完全阻塞系统。当然也只有这个人知道sa密码。作为本地管理员甚至域管理员将对你没有帮助。

典型的解决方案是以单用户模式重启SQL Server。但是,这将要求一定时间的停机。对于某些系统,这是不可接受的。并且依靠管理服务器的需要,可能没有切实可行的等待维护服务器的计划。

一个更加极端的方法是关闭SQL Server,复制所有MDF/LDF文件,安装新的SQL Server实例,并附加所有用户数据库。除了停机时间外,你还要面对重新创建系统数据库、登录名、连接服务器、作业和其他数据库以外的元素以使得系统能够重新使用。另外,除非你卸载旧的实例,不然新的实例需要使用命名实例,会导致所有客户端应用都需要跟着升级。

解决方案:

使用以下方法可以无痛、不停机解决上面问题:PsExec。但是这不是它的主要设计目标。它允许你以NT AUTHORITY\SYSTEM账号运行程序,和“常规”管理员账号不同——具有天生访问SQL Server的权限。

这个进程的使用非常简单。登录SQL Server运行的服务器,并要具有本地管理员权限的账号。下载并打开PsExec.exe。以管理员身份打开。执行下列命令,注意路劲填写你SQL Server Management Studio 的实际路径:

PsExec -s -i "C:\Program Files(x86)\Microsoft SQL Server\110\Tools\Binn\ManagementStudio\Ssms.exe"

命令告诉PsExec以管理员(-s)和交互式(-i)来运行SSMS。

如果你不是管理员,会返回一条错误信息。你必须同意许可条款才能继续操作。当登录SSMS后,会提示你连接的服务器。你需要注意要用windows认证模式登录,并且用户名是硬编码的,如:NT AUTHORITY\SYSTEM:

恢复SQL Server实例连接

当你登录以后,展开【对象资源管理器】,可以看到你是以NT AUTHORITY\SYSTEM来连接:

恢复SQL Server实例连接

现在,你可以进入【安全性】→【登录名】,然后把你的账号添加为sysadmin。添加其他管理账号,修改sa密码,和其他能使你的实例处于可控状态的事情。

警告:

你必须假装成NTAUTHORITY\SYSTEM 的本地管理员。你必须禁用UAC。必须可以远程操作,但是自从主要精力放到虚拟机之后,我没测试过。

如果你更改了sa密码。并且外部程序使用sa账号,你需要升级这些程序。可以参考:a tip for updating the password used in maintenance plans. 使用CTRL+C退出命令行。

结论:

PsExec可以解决很多让你头疼的问题。也希望在安装SQL Server的时候添加足够的管理员,以便减少上述问题的出现。