SQL服务器账号密码的设置,本质是在数据库实例中创建登录名并授予相应权限,密码由数据库管理员在创建时指定,不存在通用默认密码。微软SQL Server在安装时会让管理员选择Windows身份验证或混合模式,后者可启用内置的sa账号,要设置或修改密码,核心是用具有sysadmin权限的账号登录后执行ALTER LOGIN语句。
创建SQL Server登录账号的完整操作步骤
以最常见的SQL Server 2019为例,设置一个新账号,通常走两条路:图形界面或命令行,无论哪条路,前提都是当前登录账号具备sysadmin或securityadmin固定服务器角色权限。
图形化界面操作路径:
- 打开SSMS,用Windows身份验证或已有管理员账号连接数据库引擎
- 在左侧“对象资源管理器”中,展开“安全性”文件夹
- 右键点击“登录名”,选择“新建登录名”
- 在“常规”页中,输入登录名,选择“SQL Server身份验证”,设置密码并确认
- 取消勾选“用户在下次登录时必须更改密码”(生产环境通常不建议勾选)
- 左侧选择“服务器角色”,勾选需要的角色,默认public即可
- 点击“映射”,选择该账号能访问的数据库并赋予db_owner等数据库角色
- 点击“确定”完成创建
使用T-SQL语句创建账号:
-- 创建登录名并设置密码 CREATE LOGIN [zhangsan] WITH PASSWORD = 'StrongPass@2026'; -- 将该登录名映射到指定数据库 USE [YourDatabase]; CREATE USER [zhangsan] FOR LOGIN [zhangsan]; -- 授予数据库角色权限 ALTER ROLE db_datareader ADD MEMBER [zhangsan]; ALTER ROLE db_datawriter ADD MEMBER [zhangsan];
密码策略方面,SQL Server默认强制实施Windows密码复杂性策略,要求密码长度不少于8位,且包含大写字母、小写字母、数字和特殊字符中的至少三类,这个策略可以在创建登录名时通过CHECK_POLICY = OFF关闭,但生产环境强烈不建议关闭。
忘记SQL sa密码怎么修改重置
sa是SQL Server内置的系统管理员账号,不少企业数据库日常就靠它维护,一旦密码忘了或被人改过,登录不上,处理方式取决于你当前还能不能进入系统。
还能用Windows身份验证登录
这是最理想的场景,直接重置sa密码即可:
ALTER LOGIN sa WITH PASSWORD = 'NewStrongPass@2026';
执行完这条语句,sa密码就改好了,不需要重启服务。
Windows和SQL都进不去
这种情况下,SQL Server提供了一个官方支持的恢复路径单用户模式重置,具体操作:
- 以管理员身份打开“SQL Server配置管理器”
- 找到SQL Server服务,右键点击,选择“属性”
- 在“启动参数”选项卡中,添加参数 -m(单用户模式)
- 重启服务,此时只有管理员能连入
- 用sqlcmd工具连接并重置密码
- 移除-m参数,恢复正常启动
命令行操作流程:
# 停止服务 net stop MSSQLSERVER # 以单用户模式启动 net start MSSQLSERVER /f /m # 使用sqlcmd连接并重置密码 sqlcmd -S localhost -E
进入sqlcmd交互界面后,执行:
ALTER LOGIN sa WITH PASSWORD = 'NewStrongPass@2026'; GO
注意,单用户模式下只能有一个连接,如果连接被占用,会提示”另一个用户正在使用数据库”,此时需要关闭占用的连接或稍后再试。
修改服务器账号密码的两种便捷方式
除了上面提到的T-SQL语句,日常运维中修改密码还有以下途径:
- SSMS登录名属性修改:右键登录名,选择“属性”,在“常规”页直接输入新密码,这种方式直观,适合不熟悉命令行的人员操作
- SQL Server配置管理器:这个工具只能修改SQL Server服务账号(如MSSQLSERVER服务的Windows账号),不用于修改登录名的SQL账号密码,两者容易混淆
需要注意区分:登录名(Login)是服务器级别的账号,用于连接数据库引擎;数据库用户(User)是数据库级别的账号,关联到具体登录名,日常说的“设置服务器账号密码”,指的是登录名层面。
linux平台SQL Server密码设置差异
SQL Server在Linux上的密码管理机制与Windows基本一致,但有几个操作差异值得注意:
- 使用mssql-conf工具配置实例,不走Windows界面
- 连接工具通常是sqlcmd命令行,而非SSMS图形界面
- 初始安装时,SQL Server会强制要求设置sa密码,且必须满足强密码策略
Linux下创建SQL Server账号的典型操作:
# 使用sqlcmd连接 sqlcmd -S localhost -U sa -P 'OldPass@2026' # 创建新登录名 CREATE LOGIN [lisi] WITH PASSWORD = 'LinuxPass@2026'; GO # 查看现有登录名 SELECT name, create_date FROM sys.sql_logins; GO
行业共识认为,Linux环境下的SQL Server更适合自动化脚本管理密码,可以结合密钥管理服务或配置管理数据库进行密码轮换,减少人工操作带来的安全风险。
SQL Server账号密码常见异常及排查方法
运行中突然提示密码过期
企业数据库多数设置了密码过期策略,如果你的账号在登录时弹出“密码已过期,必须更改”,说明数据库启用了密码过期策略(默认通常为180天),处理方式:
-- 查看某登录名的密码过期策略 SELECT name, is_policy_checked, is_expiration_checked FROM sys.sql_logins WHERE name = 'zhangsan'; -- 取消密码过期限制 ALTER LOGIN zhangsan WITH CHECK_EXPIRATION = OFF;
连接字符串中密码包含特殊字符导致连接失败
密码中含分号、引号、反斜杠等字符时,需要对其进行URL编码处理,例如密码为“P@ss;word”,在连接字符串中应写成:
Server=myServer;Database=myDB;User Id=sa;Password=P@ss%3Bword;
应用程序连接报“密码错误” 但数据库里密码确实正确
这种情况多半是客户端缓存或连接池中的旧凭据未刷新,重启应用程序或清除连接池即可,另一种可能是对应登录名的默认数据库被删除了,导致认证成功后无法切换上下文,出现看似密码错误的假象。
SQL Server账号密码安全建议
数据库账号密码的安全性直接关系到数据资产的完整性,据相关机构统计,相当一部分数据库泄露事件源于弱口令和账号管理不善,以下几点建议供参考:
- 密码设置策略:长度不低于16位,使用随机生成的字符串而非单词组合,避免使用公司名、拼音等可推测信息
- 启用双重认证:SQL Server 2026起支持Microsoft Entra ID(原Azure AD)认证,可结合条件访问策略做多因素认证
- 定期轮换密码:建议每90天轮换一次关键账号密码,并更新连接配置
- 最小权限原则:业务应用的连接账号只授予所需数据库的读写权限,不要让应用直接使用sa或sysadmin账号连接
- 审计登录行为:开启登录审计功能,记录失败的登录尝试,及时发现暴力破解行为
-- 查看当前所有登录名及密码策略状态 SELECT name, type_desc, is_policy_checked, is_expiration_checked FROM sys.sql_logins WHERE type_desc = 'SQL_LOGIN';
如何验证SQL Server账号密码修改成功
密码设置或修改完毕,验证是必要的一步,确保不因为笔误或策略限制导致隐藏的登录问题。
验证方式一:命令行明确测试
sqlcmd -S localhost -U zhangsan -P 'NewPass@2026' -Q "SELECT @@VERSION"
能正常返回版本信息,说明密码有效,账号有权限登录。
验证方式二:SSMS连接测试
打开SSMS,服务器类型选择“数据库引擎”,身份验证选择“SQL Server身份验证”,输入登录名和密码,点击“连接”,连接成功即表示密码正确。
验证方式三:使用连接字符串测试
// C#示例,可用于应用程序上线前验证
string connStr = "Server=localhost;Database=YourDatabase;User Id=zhangsan;Password=NewPass@2026;";
using (SqlConnection conn = new SqlConnection(connStr))
{
conn.Open();
Console.WriteLine("连接成功");
}
业内专家指出,生产环境修改核心数据库密码时,最好先在测试环境走一遍相同操作,确认影响范围后再在正式环境执行,同时准备好回滚方案。
SQL用户账号密码的管理不难,关键是要清楚自己的账号属于哪个层级、具备哪些权限、受什么策略约束,记住一点:SQL Server没有默认密码,任何账号的密码都是由创建者或系统管理员在创建时明确定义的,运维中遇到密码问题,优先确认认证模式、账号权限范围以及密码策略状态,这能帮你快速定位问题根源,避免在错误方向上浪费时间。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/790018.html


