如何快速查询MSSQL数据库密码

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数据库密码。如果您遇到了密码找回的问题,可以根据上述步骤进行操作。

数据库标签