SQL Server 2016能否不重置密码检索非sysadmin账户原密码?
问题答复
不存在任何受官方支持、可稳定生效的方式,能在不重置密码的前提下检索SQL Server 2016中非sysadmin账户的原有明文密码,核心原因和相关说明如下:
- SQL Server全版本都不会以明文形式存储登录账号的密码,系统表
sys.sql_logins里仅保存密码经过单向加盐哈希计算后的哈希值,单向哈希算法本身不可逆,没有办法从存储的哈希值反推得到原始明文密码。 - 网上流传的所谓"查原密码"方案本质只有两类:第一类是哈希碰撞/暴力破解,即拿密码字典里的字符串逐个计算哈希值,和系统存储的哈希值做比对碰匹配项,这种方式对复杂度达标的密码几乎不可能成功,且在生产环境操作严重违反数据安全规范;第二类是利用旧版本SQL Server的内存泄露漏洞,从进程内存里抓取残留的明文,这类公开漏洞在SQL Server 2016中已经全部修复,默认安全配置下无法实现。
- 这套不可查原密码、仅支持高权限账号重置的逻辑,本身就是SQL Server安全设计的核心要求——哪怕是sysadmin角色的最高权限账号,也不具备查看其他账号原密码的权限,从根源上避免高权限账号泄露后所有用户的明文密码被批量拖走的风险,也符合各类合规要求中"密码不可逆向还原"的强制规定。
如果遇到用户遗忘密码的场景,作为DBA你唯一合规、受官方支持的操作就是重置对应账号的密码,执行重置的T-SQL命令如下:
-- 替换方括号内的登录名和新密码为实际值 ALTER LOGIN [your_login_name] WITH PASSWORD = 'your_new_strong_password';操作前提前通知对应用户更新业务连接串中的密码配置,即可避免业务中断。
内容的提问来源于stack exchange,提问作者Mohammed Alali
相关产品推荐
相关产品推荐

