1. 前言
在使用MSSQL Server时,我们通常需要连接数据库或者进行一些维护操作。如果忘记或丢失了数据库密码,就需要通过快速查询的方式找回密码。本文将介绍如何快速查询MSSQL数据库密码。
2. 使用SQL Server Management Studio查询密码
2.1 通过SQL Server Management Studio登录数据库
在使用SQL Server Management Studio查询密码之前,需要先通过SQL Server Management Studio登录数据库。以下是登录数据库的步骤:
打开SQL Server Management Studio。
在“连接到服务器”窗口中填写以下信息:
“服务器类型”选择“数据库引擎”;
“服务器名称”填写数据库服务器的名称或IP地址;
“身份验证”选择“SQL Server身份验证”;
“登录”和“密码”分别填写具有访问权限的账户和密码;
点击“连接”按钮。
2.2 使用系统存储过程查询密码
使用SQL Server Management Studio,可以通过系统存储过程sys.sp_help_revlogin来查询MSSQL数据库密码。该存储过程可以生成恢复具有访问权限的账户和密码的SQL脚本。以下是查询密码的步骤:
在“对象资源管理器”中,选择“安全性”->“登录名”。
找到需要查询密码的登录名,并右击选择“脚本登录名”->“创建到新查询编辑器窗口”。
在新的查询编辑器窗口中,执行以下SQL脚本,创建系统存储过程sys.sp_help_revlogin:
USE master;
GO
IF OBJECT_ID ('sys.sp_hexadecimal') IS NOT NULL
DROP PROCEDURE sys.sp_hexadecimal;
GO
CREATE PROCEDURE sys.sp_hexadecimal
@binvalue varbinary(256),
@hexvalue varchar (514) OUTPUT
AS
DECLARE @charvalue varchar (514)
DECLARE @i int
DECLARE @length int
DECLARE @hexstring char(16)
SELECT @charvalue = '0x'
SELECT @i = 1
SELECT @length = DATALENGTH (@binvalue)
SELECT @hexstring = '0123456789ABCDEF'
WHILE (@i <= @length)
BEGIN
DECLARE @tempint int
DECLARE @firstint int
DECLARE @secondint int
SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
SELECT @firstint = FLOOR(@tempint/16)
SELECT @secondint = @tempint - (@firstint*16)
SELECT @charvalue = @charvalue +
SUBSTRING(@hexstring, @firstint+1, 1) +
SUBSTRING(@hexstring, @secondint+1, 1)
SELECT @i = @i + 1
END
SELECT @hexvalue = @charvalue
GO
IF OBJECT_ID ('sys.sp_help_revlogin') IS NOT NULL
DROP PROCEDURE sys.sp_help_revlogin
GO
CREATE PROCEDURE sys.sp_help_revlogin @login_name sysname = NULL AS
DECLARE @login sysname
DECLARE @passwd varbinary (256)
DECLARE @sid varbinary (85)
DECLARE @cmd varchar (8000)
DECLARE @hexstr varchar (514)
DECLARE @is_policy_checked varchar (3)
DECLARE @is_expiration_checked varchar (3)
DECLARE @tmpstr varchar(256)
DECLARE @currenttime varchar(20)
SELECT @currenttime=CONVERT(varchar(20),GETDATE(),120)
IF (@login_name IS NULL)
DECLARE login_curs CURSOR FOR
SELECT sid, name, is_policy_checked, is_expiration_checked FROM sys.server_principals WHERE type = 'S' AND name <> 'sa'
ELSE
DECLARE login_curs CURSOR FOR
SELECT sid, name, is_policy_checked, is_expiration_checked FROM sys.server_principals WHERE type = 'S' AND name = @login_name
OPEN login_curs
FETCH NEXT FROM login_curs INTO @sid, @login, @is_policy_checked, @is_expiration_checked
IF (@@fetch_status = -1)
BEGIN
PRINT 'No login(s) found.'
CLOSE login_curs
DEALLOCATE login_curs
RETURN -1
END
SET @cmd = 'USE master; EXEC sp_hexadecimal '
SET @login = REPLACE(@login, '''', '''''')
SET @cmd = @cmd + ''''
SET @cmd = @cmd + '0x' + CAST(@sid AS varchar(34))
SET @cmd = @cmd + ''''
EXEC (@cmd)
SET @cmd = 'SELECT @@SERVERNAME'
EXEC (@cmd)
SET @cmd = 'SELECT TOP 1 name FROM sys.databases ORDER BY database_id'
EXEC (@cmd)
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
IF (SUBSTRING(@is_policy_checked, 1, 1) = '1')
BEGIN
SELECT @passwd = CONVERT(varbinary(256), pwdencrypt(N''))
EXEC sp_hexadecimal @passwd, @hexstr OUT
PRINT 'ALTER LOGIN ' + @login + ' WITH PASSWORD = ' + @hexstr + ' HASHED, CHECK_POLICY = ON, CHECK_EXPIRATION = ON;'
END
ELSE
BEGIN
SELECT @passwd = CONVERT(varbinary(256), pwdencrypt(N''))
EXEC sp_hexadecimal @passwd, @hexstr OUT
PRINT 'ALTER LOGIN ' + @login + ' WITH PASSWORD = ' + @hexstr + ' HASHED;'
END
END
FETCH NEXT FROM login_curs INTO @sid, @login, @is_policy_checked, @is_expiration_checked
END
CLOSE login_curs
DEALLOCATE login_curs
RETURN 0
GO
2.3 执行系统存储过程查询密码
执行以下SQL脚本,调用系统存储过程sys.sp_help_revlogin并生成恢复账户和密码的SQL脚本:
EXEC sys.sp_help_revlogin
在输出窗口中,可以看到生成的SQL脚本。该脚本可以用于恢复账户和密码。
3. 使用命令行工具查询密码
3.1 使用命令行工具osql或sqlcmd登录数据库
如要使用命令行工具查询MSSQL数据库密码,需要使用OSQL或SQLCMD等命令行工具进行登录。以下是使用OSQL登录的步骤:
打开命令提示符窗口。
输入以下命令,登录数据库:
osql -S server_name\instance_name -U login_id -P password
其中:
server_name\instance_name:数据库服务器的名称和实例名称。
login_id:具有访问权限的账户。
password:账户密码。
3.2 使用命令行工具SQLCMD查询密码
使用SQLCMD命令行工具,可以通过以下命令查询MSSQL数据库密码:
SELECT password FROM sys.sql_logins WHERE name = 'login_name';
其中,login_name为需要查询密码的登录名。
4. 结论
通过本文介绍的方法,可以快速查询MSSQL数据库密码。如果您遇到了密码找回的问题,可以根据上述步骤进行操作。