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密码安全性研究:寄存位置分析
https://www.wanzijz.com/view/20711.html