Server错过管理权限账号密码如何做,Windows身份验

 

SQLSERVER误删Windows登录用户验证方式使用Windows身份验证的解决方法

今天看到这篇文章:没有了SA密码,无法Windows集成身份登录,DBA怎么办?

想起来之前着急哥问我的一个问题,一个DBA删除了Windows登录用户,而且SQLSERVER服务器的验证方式是Windows身份验证

怎麽办??

我当时给他的答复是:重装系统数据库master

今天看到这篇文章没有了SA密码,无法Windows集成身份登录,DBA怎么办?,有思路了

图片 1

图片 2


假设我们遇到很糟糕的情况

sa被禁用,服务器身份验证为Windows身份验证模式,Windows登录用户被删,没有其他sysadmin角色的登录用户

图片 3

图片 4

图片 5

步骤一

停掉SQLSERVER:在命令行 net stop mssqlserver

图片 6

步骤二

转到SQLSERVER的安装目录

图片 7

图片 8

然后加上/m /f   参数

 

步骤三:以为单用户模式启动SQLSERVER

图片 9

步骤四:打开SSMS

这时候一定不要马上进行连接,需要点击取消,然后在左上角的点击新建查询,这个步骤跟DAC(专用管理员连接)的步骤是一样的

图片 10

图片 11

你会发现用Windows登录用户这时候可以登录

步骤五:执行下面的SQL脚本

 1 --打开xp_cmdshell功能
 2 EXEC [sys].[sp_configure] @configname = 'xp_cmdshell', -- varchar(35)
 3     @configvalue = 1 -- int
 4 RECONFIGURE WITH override
 5 
 6 
 7 --修改注册表,修改身份验证为混合验证方式
 8 USE [master]
 9 GO
10 EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'SoftwareMicrosoftMSSQLServerMSSQLServer', N'LoginMode', REG_DWORD, 2
11 GO
12 
13 --创建登录名
14 CREATE LOGIN [计算机名Administrator] FROM WINDOWS;
15 GO
16 
17 --赋予登录名的权限为sysadmin
18 USE master
19 GO
20 EXEC [sys].[sp_addsrvrolemember] @loginame = '计算机名Administrator', -- sysname
21     @rolename = sysadmin -- sysname
22 
23 --关闭xp_cmdshell功能
24 EXEC [sys].[sp_configure] @configname = 'xp_cmdshell', -- varchar(35)
25     @configvalue = 0 -- int
26 RECONFIGURE WITH override

这时候身份验证方式已经改为混合验证方式

 

步骤六:关掉SQLSERVER,再重新启动

图片 12

打开SQLSERVER配置管理器,启动SQLSERVER

图片 13

步骤七:登录SQLSERVER

回到SSMS,可以看到这时候恢复正常了

图片 14

图片 15


总结

感谢博客园里的i6first,之前一直以为无法子了,想不到他想到了用单用户模式启动的方法来进入SQLSERVER

 

参考文章:GRANT 服务器权限 (Transact-SQL)

 

如有不对的地方,欢迎大家拍砖o(∩_∩)o 

 

2014-2-26补充:

在进行上面操作之前,SQL BROSWER服务一定要开启,否则在进行步骤四的时候会提示数据库处于单用户模式,不能登录!!

 

2014-11-20补充:

今晚某童鞋找到我,说他禁用了Windows登录用户和sa,无办法再登录SQLSERVER,服务器上跑着百万PV的网站

停机的话电话就会打爆,他使用了本文的方法,可惜不奏效

详细讲解:

如果禁用了sa和禁用了Windows登录用户(注意:是禁用不是删除)

那么使用上述方法的时候,在启动SQLSERVER的时候会报错:Windows帐户 计算机名/Administrator 已被禁用

解决方法:在Windows上新建一个 Administrator组的Windows帐户 比如 test帐户,隶属于Administrator组**

然后切换Windows登录用户到test ,使用上面的方法,用“管理员身份运行” CMD,以/m /f 启动sqlserver

用sqlcmd 进入命令行就可以了

原理:sqlserver里的Windows帐户是跟Windows的帐户用SID绑定映射的

SQL首先使用你当前登录的Windows帐户来登录sqlserver,这样就导致了当Windows帐户被禁用的话他不会使用sa来登录(也就是其他拥有sysadmin权限的

登录用户来登录,不考虑SQL登录验证)

我这里的方法是切换到别的Windows帐户下,这样SQL就找不到当前Windows帐户跟SQL里面的登录用户的SID登录映射

SQLSERVER就会使用sa来登录

 

 

 

Windows2003 SQL2005解决系统Administrator密码不知道的问题

今天上班的时候,有个同事说不知道谁设置了开机密码,那台电脑一直没有开机密码的他现在进不了桌面

那台电脑没有光驱,而我手头上启动U盘又没有,不然用winpe自带的密码破解工具破解开机密码了

幸亏那台电脑是开发机而且安装了SQLSERVER2005,幸亏他记得SQLSERVER的sa用户和密码,那就有戏了o(∩_∩)o

输入下面的SQL语句,添加一个Administrator组别的系统用户

--打开高级选项,看Ole Automation Procedures OLE自动化开启了没有
EXEC [sys].[sp_configure] @configname = 'show advanced options', -- varchar(35)
@configvalue = 1 -- int
RECONFIGURE WITH override
GO

--查看是否开启
EXEC [sys].[sp_configure] 

--如果没有就开启
EXEC [sys].[sp_configure] @configname = 'Ole Automation Procedures', -- varchar(35)
@configvalue = 1 -- int
RECONFIGURE WITH override
GO

 

--添加一个hack用户,所属用户组为Administrators
DECLARE @shell INT
EXEC SP_OAcreate 'wscript.shell',@shell out
EXEC SP_OAMETHOD @shell,'run',null, 'net user hack  /add'
EXEC SP_OAMETHOD @shell,'run',null, 'net localgroup Administrators hack /add'

--或者直接改密码,不添加用户
EXEC SP_OAMETHOD @shell,'run',null, 'net user hack  123456'

 

用hack用户进入系统,hack的密码为空,然后进入计算机-》右键-》管理-》本地用户和组-》把administrator的密码设置为空,

然后打开任务管理器,点击“用户”标签,在用户界面,选中hack用户,右键-》断开,Windows弹出对话框说hack用户的Windows会话会终结,

数据不能保存,选择“是”,然后弹出登录对话框,在用户名的输入框里输入“administrator”,密码输入框为空密码,成功登录桌面了

幸亏知道SQLSERVER数据库安全的一些知识,不然真的要重装系统了,整个过程都是利用了OLE自动化,他相当于给你一个cmd环境,让你

可以输入cmd命令

-------------------------------------------华丽的分割线----------------------------------------------------

其实我觉得SQLSERVER使用Windows服务来写这个理念是挺好的,不用开机启动然后需要双击sqlserver.exe来运行

用Windows服务的话,开机就启动了都不用进入桌面

我上司跟我说比较大型的平台软件一般都会用Windows服务来编写,将关键核心部分用Windows服务来运行,就像我们公司的软件

图片 16

大部分核心功能都用Windows服务来运行的,不过用Windows服务也有不好的地方,就是如果服务启动不起来了,您的软件也运行不了,就像SQLSERVER

像一些杀毒软件,管家软件也会用Windows服务来编写,好像360安全卫士也是,如下图

图片 17

 

用完之后记得把 Ole Automation Procedures OLE自动化  关闭,不然被其他人利用就麻烦了

如有不对的地方,欢迎拍砖 o(∩_∩)o

 

 

2014-4-24补充:

如果是用远程桌面登录的话,必须要为帐号添加一个密码

使用下面的语句

net user 用户名 密码 /add 建立用户 

或者更改当前已存在的管理员账户的密码  修改naruto的密码为123456

net user naruto 123456

 

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

问题描述:

 

本地装了两个实例,一个是SQLEXPRESS,可以正常操作。但是另一个开发常用的实例MSSQLSERVER却连Windows身份验证都报错,报的错误也是很奇葩,怎么会找不到Administrator那,我登录计算机进来就用的这个账号。

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

详细错误如下:

 

无法连接到 xxx。

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

用户 'xxxAdministrator' 登录失败。 (.Net SqlClient Data Provider)

 

有关帮助信息,请单击:  

服务器名称: xxx
错误号: 18456
严重性: 14
状态: 1
行号: 65536

解决方案:

 

首先在微软上搜索18456,找到了这个错误的详细说明,地址

看完之后得出了一个结论,似乎跟这个账号的权限有关,需要给这个Administrator 赋一个sqlserver里面的管理员的权限,sysadmin。然后就想先用sa登录,然后给这个用户赋权。

 

可是问题又来了,sa密码我也不知道!

 

无解,只好询问同事,同事发了一个连接,

问题完美得到解决。

 

大概思路是这样:

1,先停服务

2,通过cmd,以单用户模式登录sqlserver,理论参考)

3,给Administrator 用户 赋权

4,关闭cmd,重启服务

 

打开Sqlserver,以Windows身份登录,完美,进去了。然后在修改sa的密码即可。

 

 

 

 

 

 

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

 

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

 

C:Windowssystem32>sqlcmd

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

xxxxxxx’..

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.

图片 18

 

 

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

C:>

 

C:>

 

C:>sqlcmd -E

 

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

 

2> GO

 

1>

 

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

 

图片 19

 

 

图片 20

 

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

 

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

 

或者SQL认证账号

 

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>

 

 

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

 

本文由星彩网app下载发布于星彩彩票app下载,转载请注明出处:Server错过管理权限账号密码如何做,Windows身份验

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