SQL Server遗失管理权限账号密码怎么办?
假如一个SQL Server实例只允许“SQL身份认证”模式登录数据库,而糟糕的是你忘记了sa的密码(sa出于安全考虑应该被禁用,这里仅仅为了描述问题)或其它具有sysadmin角色的登录名的密码?个人就遇到这样一个案例,HK一同事在一台测试服务器安装了一个测试用途的SQL Server数据库,然后这个同事离职前没有交接这个测试服务器任何信息。那现在就麻烦了。我没有任何权限,我如何获取sysadmin的权限呢?或者还有比较多的场景需要你获取数据库的sysadmin权限,例如你想干点坏事.... 其实这个问题也不难,只要你有这个SQL Server数据库的所在的服务器的操作系统管理员权限。
首先说明一下,下面脚本在SQL Server 2012、2014环境下都测试过,下面来一起看看如何在只有操作系统的管理员权限的情况下获取数据库的sysamdin权限。
其实在阐述这个问题前,可能要先说一下账号([builtin\administrators]),在SQL Server 2005的版本中,数据库中[builtin\administrators]登录名默认拥有sysadmin角色,所以,如果是SQL Server 2005数据库,只要你有操作系统的管理员权限,那么其实你就可以以Windows身份认证登录数据库(前提是服务器允许Windows身份认证登录),登录后修改sa账号密码即可,但是后续版本中都剔除了内置系统帐户([builtin\administrators])。那么通常的方法如何做呢?
其实只要你有操作系统的管理员权限,那么借助sqlcmd工具,很容易也很简单就能获取拥有sysadmin角色的账号。
1:首先必须单用户模式启动SQL Server实例(注意,要以管理员权限运行cmd窗口,否则可能遇到权限问题),否则sqlcmd就会遇到类似这样的问题
C:\Windows\system32>sqlcmd
Sqlcmd: Error: Microsoft ODBC Driver 11 for SQL Server : Login failed for user '
xxx\xxxx’..
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.
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登录即可。如下所示:
当然你也可以创建一个账号授予sysadmin角色。完全没有问题。
C:\>sqlcmd -E
1> CREATE LOGIN [xxx\xxx] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]
2> GO
1> ALTER SERVER ROLE [sysadmin] ADD MEMBER [xxx\xxx]
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权限。
最新文章
- [转载]大型网站应用中 MySQL 的架构演变史
- BZOJ 2705: [SDOI2012]Longge的问题 [欧拉函数]
- java程序打包成jar
- 如何配置网络使得宿主机能够访问VM数据库?
- [WPF实用技巧]如何使WPF的TreeView节点之间有连线
- 那些年我们一起过的JS闭包,作用域,this,让我们一起划上完美的句号。
- 动手学servlet(三) 请求头和响应头信息
- Obective-C之宏定义
- 转载 How to Encrypt connection string in web.config
- SQL语言学习-数据定义语言
- 【读书笔记】《未来闪影》罗伯特·J·索耶
- 最大流算法之EK(最短路径增广算法)
- 巧用php中的array_filter()函数去掉多维空值
- hadoop 有那些发行版本
- ElasticSearch权威指南学习(映射和分析)
- python全栈开发day34-线程Thread
- 基于CentOS搭建Nginx 静态网站
- POJ 2135.Farm Tour 消负圈法最小费用最大流
- HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters\AllowRemoteConnection
- Javascript全栈技术架构
热门文章
- webstorm基础使用
- Java后端工程师必备书单(含大后端方向相关书籍)
- java各种集合的线程安全
- DHCP服务器的搭建
- spring_07使用spring的特殊bean、完成分散配置
- 蓝桥杯试题----- 打印大X
- Docker 系列六(Docker Swarm 项目).
- for循环与forEach性能思考
- 远程连接centos7 上的mysql报(ERROR 2003 (HY000): Can't connect to MySQL server on '168.x.x.x' (10060) )
- js 依据“;”折行