You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell实现SQL Server证书登录失败求助

SQL Server证书登录失败问题排查与修正方案

核心错误点

你当前的客户端连接字符串使用Integrated Security=True,这是Windows身份验证逻辑,完全没有用到证书验证机制,这是导致登录失败的关键原因之一。以下是分步修正方案:


一、修正客户端连接逻辑

替换原有连接代码,启用加密连接并适配证书验证逻辑:

#SQL connection 
$SqlServer= 'server name' 
$Database= 'Db Name'
# 启用加密连接,关闭信任服务器证书(强制验证证书有效性)
$connString = "Data Source=$SqlServer;Database=$Database;Integrated Security=False;User ID=你的SQL登录名;Password=你的密码;Encrypt=True;TrustServerCertificate=False;"

# 创建连接对象并尝试连接
$conn = New-Object System.Data.SqlClient.SqlConnection $connString
try {
    $conn.Open()
    if($conn.State -eq "Open") {
        Write-Host "Test connection successfull"
    }
} catch {
    Write-Host "连接失败:$_"
} finally {
    $conn.Close()
}

二、SQL Server端证书配置验证

  1. 给SQL Server服务账户授予证书读取权限
    打开MMC证书管理,找到Cert:\LocalMachine\My下的SQLCert,右键→所有任务→管理私钥→添加SQL Server服务账户(如NT SERVICE\MSSQLSERVER),授予读取权限。

  2. 启用强制加密连接
    在SQL Server配置管理器中,展开SQL Server网络配置→目标实例协议,右键属性→标志页,将Force Encryption设置为Yes。

  3. 确认证书绑定有效性
    协议属性→证书页,确认选中的是你创建的SQLCert,且证书的DNS名称与服务器实际名称完全匹配。

三、客户端证书导入修正

客户端需要信任服务器证书,应将导出的.cer文件导入到受信任的根证书颁发机构,而非LocalMachine\My:

$present=Get-ChildItem -Path "Cert:\LocalMachine\Root" | Where-Object Thumbprint -eq <Thumbprint value> | Select-Object *
if(-not $present) {
    Copy-Item $PSScriptRoot\tstcert.cer -Destination C:\tstcert.cer
    Import-Certificate -CertStoreLocation Cert:\LocalMachine\Root -FilePath C:\tstcert.cer 
}

四、证书映射登录的额外配置(若需无密码证书登录)

如果要实现客户端证书直接映射登录(无需账号密码),需补充以下操作:

  1. 在SQL Server中导入客户端证书并创建关联登录:
    -- 导入客户端证书到SQL Server
    CREATE CERTIFICATE ClientCert
    FROM FILE = 'C:\路径\到\客户端证书.cer';
    
    -- 创建绑定证书的登录账号
    CREATE LOGIN ClientLogin FROM CERTIFICATE ClientCert;
    
    -- 授予目标数据库访问权限
    USE [你的数据库];
    CREATE USER ClientLogin FOR LOGIN ClientLogin;
    
  2. 客户端连接字符串指定证书指纹:
    $connString = "Data Source=$SqlServer;Database=$Database;Integrated Security=False;Encrypt=True;TrustServerCertificate=False;Certificate=<客户端证书指纹>;"
    

五、通过错误日志精准定位问题

查看SQL Server错误日志中的登录失败记录,重点关注错误代码(如18456)和状态码:

  • 状态1/8:密码错误
  • 状态5:登录账号不存在
  • 状态14:账号被锁定
  • 状态23:证书不被信任或加密连接配置错误

内容的提问来源于stack exchange,提问作者Shubh kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 09:01:00