Symfony连接SQL Server执行迁移时sa用户登录失败如何解决?
MSSQL sa登录失败问题解决方案
核心错误原因定位
错误码SQLSTATE[28000]属于身份验证失败类问题,优先排查MSSQL服务配置、Symfony参数冲突、网络连通性三类问题,按以下步骤逐一排查:
1 先校验MSSQL服务端配置
- 确认SQL Server身份验证模式:打开SQL Server Management Studio,右键服务器→属性→安全性,选择「SQL Server和Windows身份验证模式」,确认后保存
- 启用sa账号:左侧菜单选择「安全性→登录名→sa」,右键属性:
- 常规页:确认密码为
sqlsql,测试环境可取消勾选「强制实施密码策略」避免规则限制,生产环境按需保留 - 状态页:登录选项选择「启用」
- 常规页:确认密码为
- 重启SQL Server服务:打开SQL Server配置管理器,重启SQL Server服务,同时确认「SQL Server Browser」服务处于运行状态(使用命名实例必须开启该服务)
2 修正Symfony配置冲突
你的doctrine.yaml中同时配置了url和单独的数据库连接参数,Doctrine会优先解析DATABASE_URL的内容,而你的URL中反斜杠没有转义会导致解析错误,两种修正方案二选一:
方案一:删除url配置(推荐,避免参数冲突)
.env文件无需修改,修改doctrine.yaml删除url行即可:
doctrine: dbal: driver: sqlsrv host: '%env(resolve:MSSQL_DATABASE_HOST)%' dbname: '%env(resolve:MSSQL_DATABASE_NAME)%' user: '%env(resolve:MSSQL_DATABASE_USER)%' password: '%env(resolve:MSSQL_DATABASE_PASSWORD)%' port: '%env(resolve:MSSQL_DATABASE_PORT)%' server_version: '14.0.17289.0' orm: auto_generate_proxy_classes: true naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware auto_mapping: true mappings: App: is_bundle: false type: annotation dir: '%kernel.project_dir%/src/Entity' prefix: 'App\Entity' alias: App
方案二:修正DATABASE_URL转义
如果保留url配置,需要将URL中的反斜杠转义,修改.env文件:
# 原配置中\user未转义,修正为\\user DATABASE_URL="mssql://sa:sqlsql@TXS-PC\\user:1433/COMPTA" MSSQL_DATABASE_NAME="COMPTA" MSSQL_DATABASE_HOST="TXS-PC\user" MSSQL_DATABASE_USER="sa" MSSQL_DATABASE_PASSWORD="sqlsql" MSSQL_DATABASE_PORT=1433
3 校验网络连通性
- 先关闭本地防火墙测试,或者新增1433端口的入站规则
- 用SQL Server Management Studio,服务器名填写
TXS-PC\user,1433,身份验证选择SQL Server,登录名sa,密码sqlsql,测试是否能正常连接,确认账号密码、端口、实例名无误后再运行Symfony迁移命令
4 生效配置
修改完成后运行命令清空Symfony缓存:
php bin/console cache:clear
再执行迁移命令测试连接即可。
内容的提问来源于stack exchange,提问作者taha
相关产品推荐
相关产品推荐

