ASP .Net core 3.1如何配置connection string连接SQL server authentication已有库
ASP.NET Core 3.1 配置SQL Server认证连接字符串正确方法
核心连接字符串格式
SQL Server认证和Windows集成认证的核心区别是,必须显式传入SQL账号密码,同时关闭集成认证参数,标准格式如下:
Server=<数据库服务器地址[,端口]>;Database=<已存在的目标数据库名>;User Id=<SQL认证账号>;Password=<账号密码>;Encrypt=True;TrustServerCertificate=<是否信任服务器证书>;Connection Timeout=30;
各参数说明:
Server:部署SQL Server的服务器IP/域名,如果服务没使用默认1433端口,直接在地址后加逗号跟端口号,比如10.0.0.5,51433Database:服务器上提前创建好的目标数据库的精确名称User Id:SQL Server中创建的、开启了SQL认证权限的账号,生产环境不建议直接用sa,最好单独分配仅拥有目标库必要权限的专用账号Password:上述SQL账号对应的密码- 注意:绝对不要加
Integrated Security=True或者Trusted_Connection=True参数,这两个参数是Windows集成认证的开关,加了之后会忽略你填的账号密码,直接用运行程序的Windows身份去连库,大概率认证失败 Encrypt:ASP.NET Core 3.1依赖的Microsoft.Data.SqlClient组件默认开启传输加密,如果你的数据库服务器没配置受信任的SSL证书,调试阶段可以临时把TrustServerCertificate设为True跳过证书校验,生产环境必须配置合法证书,把这个值改回False避免中间人攻击风险
项目内配置流程
- 存储连接字符串
不要把连接字符串硬编码在C#代码里,按环境区分存储:- 本地开发环境:把连接字符串放在
appsettings.Development.json的ConnectionStrings节点下,注意把这个文件加入git忽略列表,避免密码提交到代码仓库 - 生产环境:不要把明文密码写在
appsettings.json里,通过环境变量、服务器密钥存储或者专用配置服务注入连接字符串,防止密码泄露
配置示例:
{ "ConnectionStrings": { "ProdDb": "Server=10.0.0.5,1433;Database=OrderSystem;User Id=order_app;Password=xxxxxx;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" } } - 本地开发环境:把连接字符串放在
- 服务注册
如果你用EF Core操作数据库,直接在Startup.cs的ConfigureServices方法里读取配置注入DbContext即可:
如果是用原生public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); // 注册数据库上下文 services.AddDbContext<OrderDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("ProdDb"))); }SqlConnection手写SQL,同样通过Configuration读取连接字符串实例化连接即可,不要硬编码。
常见排坑点
- 先确认服务器端SQL Server已经开启TCP/IP协议,防火墙放行了SQL Server对应的服务端口,不然会直接连接超时
- 确认SQL Server实例已经开启「SQL Server 和 Windows 身份验证模式」,默认安装很多时候只开了Windows集成认证,SQL账号会登不上
- 确认使用的SQL账号已经映射到目标数据库,拥有对应读写等必要权限,不然连上库也会报权限不足
- 如果是云服务器上部署的SQL Server,记得检查云服务商的安全组有没有放开对应端口
内容的提问来源于stack exchange,提问作者user15321317
相关产品推荐
相关产品推荐

