修改域名惹的祸,Server错过处理权限账号密码怎

假如一个SQL Server实例只允许“SQL身份认证”模式登录数据库,而糟糕的是你忘记了sa的密码(sa出于安全考虑应该被禁用,这里仅仅为了描述问题)或其它具有sysadmin角色的登录名的密码?个人就遇到这样一个案例,HK一同事在一台测试服务器安装了一个测试用途的SQL Server数据库,然后这个同事离职前没有交接这个测试服务器任何信息。那现在就麻烦了。我没有任何权限,我如何获取sysadmin的权限呢?或者还有比较多的场景需要你获取数据库的sysadmin权限,例如你想干点坏事.... 其实这个问题也不难,只要你有这个SQL Server数据库的所在的服务器的操作系统管理员权限。

转载自我的博客:修改域名惹的祸

 

做了一件很脑残的事,神不知鬼不觉,我将一台存储重要数据的服务器的域名修改了,该服务器是在Hyper-V中创建的VM,修改VM的域名之后,部署在该VM上SQL Server实例就没有权限访问了,通常的管理员账户也访问不了,本地的Administrator账户没有密码,心想,这下完了,捅了这么大的娄子,服务器上1TB的数据怎么搞?虽然,数据最终被成功转移,但是,过程十分曲折,禁不住感慨:当年欠的技术,必须一点点学回来。情怀不说了,上干货。

首先说明一下,下面脚本在SQL Server 2012、2014环境下都测试过,下面来一起看看如何在只有操作系统的管理员权限的情况下获取数据库的sysamdin权限。

VM上安装的操作系统是Windows Server 2012 R2 Data Center,使用我的管理员账户登录,登陆失败。在登录界面弹出警告消息: “The security database on the server does not have a computer account for this workstation trust relationship”。有这么一堵墙横亘在我面前,就是项目组不记得本地管理员账户 Administrator 的密码。

 

图片 1

其实在阐述这个问题前,可能要先说一下账号([builtinadministrators]),在SQL Server 2005的版本中,数据库中[builtinadministrators]登录名默认拥有sysadmin角色,所以,如果是SQL Server 2005数据库,只要你有操作系统的管理员权限,那么其实你就可以以Windows身份认证登录数据库(前提是服务器允许Windows身份认证登录),登录后修改sa账号密码即可,但是后续版本中都剔除了内置系统帐户([builtinadministrators])。那么通常的方法如何做呢?

既然VM不能访问,而我又必须登录到VM,心里有点虚,Windows Server的安全系统是纸老虎吗?不管怎么样,不能不战而被吓倒,首先要解决的问题是如何破解本地管理员Administrator的密码。VM上存储的数据不能被破坏,只能通过Windows镜像文件尝试修改操作系统。如何重置本地管理员的密码?感谢老黄的协助。

 

step1,修改VM的Firmware,从DVD驱动器加载Windows的镜像文件

其实只要你有操作系统的管理员权限,那么借助sqlcmd工具,很容易也很简单就能获取拥有sysadmin角色的账号。

图片 2

 

step2,当出现以下界面时,按下任意键,从DVD驱动器加载镜像文件

1:首先必须单用户模式启动SQL Server实例(注意,要以管理员权限运行cmd窗口,否则可能遇到权限问题),否则sqlcmd就会遇到类似这样的问题

图片 3

 

step3,点击“Repair your computer”,利用镜像文件修复计算机

C:Windowssystem32>sqlcmd

图片 4

Sqlcmd: Error: Microsoft ODBC Driver 11 for SQL Server : Login failed for user '

step4,选择Troubleshoot,在这里能够使用高级工具修复操作系统

xxxxxxx’..

图片 5

C:>net stop mssqlserver

The SQL Server (MSSQLSERVER) service is stopping.

The SQL Server (MSSQLSERVER) service was stopped successfully.

 

 

C:>net start mssqlserver /m"SQLCMD"

The SQL Server (MSSQLSERVER) service is starting.

The SQL Server (MSSQLSERVER) service was started successfully.

step5,从高级选项中,选择命令行(Command Prompt)进行高级故障排除操作

图片 6

图片 7

 

step6,进入命令行界面,修改VM开机加载的辅助程序

 

进入到System32目录下,先将辅助程序Utilman重命名为Utilman_bak,然后将cmd复制为Utilman。

2:然后在另外一个cmd窗口使用sqlcmd登录数据库

百度百科:utilman.exe是一个系统进程,为Windows辅助工具管理器程序。

C:>

 

C:>

 

C:>sqlcmd -E

 

1> ALTER LOGIN sa WITH PASSWORD='qWeR123456';

 

2> GO

 

1>
C:
cd WindowsSystem32
ren Utilman.exe Utilman_bak.exe
copy cmd.exe  Utilman.exe

 

这样做的原理是:修改VM开机加载的辅助程序,在Windows登录界面上有轻松访问(Ease of access)辅助工具。当我们从登录界面点击轻松访问时,Windows会启动命令行工具(cmd),此时,虽然我们没有方法登录到Windows Server中,但是,我们拥有系统的最高权限,通过cmd,我们可以进行高级的故障排除,或者你想干的任何事。

参数-E 表示 [-E trusted connection]  默认即是-E,如上所示,进去修改sa的密码,然后登录测试发现sa被禁用了,使用SQL语句允许sa登录即可。如下所示:

图片 8

 

step7,重启VM,重置Administrator的密码

图片 9

上述设置完成之后,重启VM,正常进入到登录界面,点击登录界面的轻松访问(Ease of access)辅助工具,

 

图片 10

 

由于辅助工具的执行文件被替换为cmd,Windows会启动命令行工具,在命令行工具中,通过net user命令,重置Administrator的密码

图片 11

图片 12

 

step8,使用Administrator的新密码登录VM

当然你也可以创建一个账号授予sysadmin角色。完全没有问题。

图片 13

 

终于,我还是成功登录VM了,在第一时间打开SSMS,登录SQL Server的默认实例 VMxxx,发现登录不上,SQL Server抛出以下错误消息:

C:>sqlcmd -E

1> CREATE LOGIN [xxxxxx] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]

2> GO

1> ALTER SERVER ROLE [sysadmin] ADD MEMBER [xxxxxx]

2> GO

图片 14

 

认真查看该错误消息,当建立到SQL Server的连接时,出现网络相关或指定实例的错误,SQL Server实例找不到或者不可访问。在域中,虽然使用本地管理员账户登录默认实例,但是,由于域名服务器的存在,仍然会出现本地管理员登录不了本地的SQL Server默认实例,根本原因是建立的网络连接路由不到指定的SQL Server的实例名。在本机上,我们可以不通过网络路由器,直接使用localhost,或 点(.)登录本机 ,经过几番曲折,SSMS登录成功,终于打开数据库,喜极而泣。

或者SQL认证账号

但是,这不是真实的情况,实际上,在登录SQL Server失败时,我走了另外一条曲折的路。因为,当时的我有点慌张,误以为是权限的问题,过程虽然曲折,但是,还是挺有趣,用到DAC( Dedicated Administrator Connection,专用管理员连接)为本机增加数据库的管理员权限。

 

step1,在命令行工具中关闭SQL Server服务

C:>sqlcmd -E

1> CREATE LOGIN [test1] WITH PASSWORD=N'Qw123456', DEFAULT_DATABASE=[master], DE

FAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF

2> GO

1>

2>

3> ALTER SERVER ROLE [sysadmin] ADD MEMBER [test1]

4> GO

1>
net stop MSSQLServer

 

图片 15

 

step2,通过单用户模式启动SQL Server服务,只允许sqlcmd登录SQL Server实例

是否感觉有点太简单了,太不安全了?  系统管理员轻松就获取了数据库的管理员权限。 这个功能怎么感觉都不太合理!试想,如果系统被入侵了,分分钟就能获取数据库的sysadmin权限。

net start MSSQLServer -msqlcmd

 

图片 16

-msqlcmd:该参数指定以单用户模式打开MSSQLServer服务,只允许sqlcmd程序登录该服务

step3,使用DAC连接到SQL Server实例

sqlcmd -A

图片 17

-A:Logs in to SQL Server with a Dedicated Administrator Connection (DAC). This kind of connection is used to troubleshoot a server.

step4,将本地管理员授予sysadmin角色,如果本地管理员不是SQL Server实例的Login,需要新建Windows域登录名

create login [VMxxxAdministrator]
from windows
with default_database=master;
go
alter server role sysadmin
add member [VMxxxAdministrator]
go

图片 18

授予Administrator数据库管理员的权限之后,使用SQL Server的默认实例名依然登录不上,后来,静下心来,仔细看了看登录失败的错误信息,才恍然大悟,特写一篇随笔,记录一下自己无意“放火”和曲折“救火”的经历。在这里很感谢项目经理麦扣的包容,老黄的协助,谢谢!

参考文档:

class="underline">破解windows系统开机登录密码的一种方法

class="underline">SQLSERVER误删除了Windows登录用户验证方式使用Windows身份验证的解决方法

sqlcmd Utility.aspx)

本文由星彩网app下载发布于星彩彩票app下载,转载请注明出处:修改域名惹的祸,Server错过处理权限账号密码怎

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。