MSSQL密码安全性研究:存放位置分析(mssql密码存放位置)

Microsoft SQL Server是一款常用的关系型数据库服务器,它内置管理员密码来保护账户与数据完整性,本文主要对MSSQL中密码存放位置进行分析,来构造出更加安全的系统。

MSSQL中的密码存放在Sysprocesses表或SS login表中,前者对应正在登录的用户,后者对应所有用户登录。查看Sysprocesses表字段spid可以汇总出正在登录的用户,spid是某个连接进程的进程号,它以登录帐户的权限执行某个线程。这就意味着只能查看连接进程的用户spid可以解密密码。Sysprocesses表char 36字段中还存储有加密后的密码,使用sysprocesses加密方式不安全,是可以解密的。除此之外,管理员还可以创建一些内部账号把用户的密码存储在服务器的master.mdf文件中,以内部账号登录以查看密码,但该方式不利于查看。

由于MS SQL Server可以持续存储密码,因此可以通过执行某些脚本来破解密码。这种方式可以快速访问登录信息,允许攻击者直接对服务器中的账户密码进行破解。

为了保护用户的安全,管理员应首先加密或哈希存储服务器上的密码,其次应确保登录信息存放在服务器外部进行安全保护,如存储在安全的硬盘空间或加密磁盘中,以减少攻击者有效的攻击密码。

此外,MS SQL Server密码保存过程可以优化来增强安全性,如避免使用SQL Server特性和内置函数:

--将MS SQL Server数据库中所有用户密码加密
CREATE PROCEDURE dbo.EncryptAllPasswords
AS
BEGIN
DECLARE @pwd NVARCHAR(128)
DECLARE @user NVARCHAR(128)

SET NOCOUNT ON --启动
DECLARE cur-CURSOR WITH FAST_FORWARD --创建游标
FOR SELECT lucNAME, laxpwd FROM SyssysUsers --获取所有登录用户

OPEN cur --打开游标
FETCH NEXT FROM cur INTO @user, @pwd --获取所有登录用户密码
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @encrypted NVARCHAR(128)
EXEC sp-encrypt @pwd, @encrypted OUTPUT --执行加密操作
UPDATE SyssysUsers --更新新的加密密码
SET laxpwd = @encrypted
WHERE lucName = @user
FETCH NEXT FROM cur INTO @user, @pwd --获取下一个用户及其密码
END
CLOSE cur --关闭游标
DEALLOCATE cur --释放游标
SET NOCOUNT OFF --结束
END

本文通过分析MSSQL中密码存放位置,来构建更加安全的密码存储机制,这样就可以实现更好的数据完整性和安全性。


数据运维技术 » MSSQL密码安全性研究:存放位置分析(mssql密码存放位置)