如何授予 SQL Server 读取我的 SSL 密钥的权限?

2023-11-27

我最近创建了一个自签名证书并在 SQL Server 2014 中打开了加密:

self signed cert

问题是现在 SQL Server 服务无法启动:

startup error

本文from 2010 将问题识别为权限问题:SQL Server 服务没有读取 SSL 证书私钥的必要权限。

问题是我陷入了文章中提出的解决方案的第 4 步:

stuck on step 4

当我打开文章中显示的窗口时,没有与建议格式匹配的组或用户名。

是否有另一种方法可以确定 SQL Server 服务运行的帐户,以便我可以授予其读取 SSL 证书的权限?

也欢迎完全不同的解决方案。


如果您指定 SQL Server 用于 TLS 的证书,则 SQL Server Windows 服务必须读取该证书和私钥(文件夹中的文件%ProgramData%\Microsoft\Crypto\RSA\MachineKeys),对应证书。问题是:SQL Server 配置管理器不太舒服,它无法完成所有必需的工作.

因此,首先应该本地化 SQL Server 使用的帐户。一应该开始services.msc,找到SQL Server服务的账户。它通常是一个内置帐户,例如Local System, Network Service本地或域帐户,例如.\SQLServer, DOMAIN\SQLServerAccount或类似的服务帐户NT Service\NT Service\MSSQL$SQL2012如下图所示:

enter image description here

要向帐户授予私钥权限,可以使用 mmc 的证书管理单元。一个可以开始mmc.exe,在“文件”菜单中选择“添加/删除管理单元”,选择“证书”管理单元,然后选择本地计算机的“计算机帐户”。然后应该选择个人存储的 SSL 证书,然后使用上下文菜单“管理私钥...”。

enter image description here

并添加帐户,例如NT Service\NT Service\MSSQL$SQL2012,在上面找到,并为私钥上的帐户设置“读取”权限:

enter image description here

如果您想与域内的 SQL Server 建立连接(客户端和服务器都必须属于同一个 Active Directory 或通过信任连接的目录),那么应该为 SQL Server 创建 SPN。如果我正确理解您的要求,您希望允许remove通过 HTTPS 连接到 SQL Server。必须激活混合安全性才能通过 SQL Server 身份验证连接到服务器:

enter image description here

创建 SQL Login 后,进行上述所有更改并重新启动 SQL Server 服务,就可以建立与 SQL Server 的 TLS(加密)连接。如果在之前没有创建 SPN 的情况下尝试通过 Windows 帐户进行连接,则会出现错误:

已成功与服务器建立连接,但随后出现 登录过程中发生错误。 (提供商:SSL 提供商, 错误:0 - 目标主体名称不正确。)(Microsoft SQL 服务器,错误:-2146893022)

目标主体名称不正确

enter image description here

如果忘记将 Windows 身份验证更改为混合身份验证 (),则会收到类似错误

用户“OlegKi”登录失败。 (微软 SQL Server,错误:18456)

enter image description here

如果完成上述所有步骤,例如可以使用 SQL Management Studio 建立 TLS 连接,但仍然必须选择一些选项:

enter image description here

应检查“加密连接”

enter image description here

并设置附加连接属性TrustServerCertificate=true

通常一次使用Encrypt=true;TrustServerCertificate=true;作为应用程序中建立与 SQL Server 的连接的连接字符串的一部分。我们设置Encrypt=true属性通过上面描述的“加密连接”复选框。有关属性含义和选项的不同组合的更多详细信息,请参阅“启用加密”部分MSDN 文章.

如果执行了上述所有步骤并选中“加密连接”而不进行设置TrustServerCertificate=true属性,那么就会出现错误:

已成功与服务器建立连接,但随后出现 登录过程中发生错误。 (提供商:SSL 提供商, 错误:0 - 目标主体名称不正确。)(Microsoft SQL 服务器,错误:-2146893022)

目标主体名称不正确

enter image description here

我已经在上面的另一种情况(与 Windows 帐户连接)中描述过。

我描述了上述所有步骤,因为配置与服务器的 TLS 连接确实不是那么容易,并且可能会出现奇怪的错误,其直接描述没有给出如何解决问题的直接提示。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何授予 SQL Server 读取我的 SSL 密钥的权限? 的相关文章

  • SQL Server批量上传策略

    我使用以下函数将数据从 CSV 上传到 SQL 表 有更好的方法吗 我现在担心连接长时间保持 因此需要减少 public bool SaveProxyBulkUploadData List
  • SQL Server 中的 FOR XML 路径

    注意 我已经解决了这个问题的大部分 但遇到了障碍 请读到底部 您将看到我在哪里添加了 注意 部分 TIA I have a rather extensive join query that I want dumped to XML I ha
  • 将数据类型 varchar 转换为 int 时出错

    我试图使用基于 varchar 类型的 Name 列的输入值的存储过程返回 item 表的 ItemId 列值 但是每当我将任何值传递给存储过程时 它都会返回一个错误 将数据类型 varchar 转换为 int 时出错 create pro
  • 找到帖子链接、每个标签对应的相关标签并在用户级别进行回答

    继续我之前的question https stackoverflow com questions 60967044 retrieve count of total no of answers corresponding to each ta
  • 如何延迟关闭并在窗口服务中运行进程

    我必须在 Windows 关闭时运行一个进程 即应用程序 有什么方法可以延迟 Windows 关闭并在 Windows 服务中运行该应用程序 protected override void OnShutdown Add your save
  • 使用连接字段的 SQL JOIN

    我有两个表 Table1 包含一列 该列构成 Table2 中列的部分值 例如 表1 XName 123456 表2 ZName ABC 123456 我需要创建一个与这些匹配的 JOIN 但是使用 MS SQL 2008 我在完成这项工作
  • 如何获取sql server 2005中数据库连接的详细列表?

    如何获取sql server 2005中数据库连接的详细列表 使用系统存储过程sp who2
  • 如何在浏览时检查客户端是否安装了 SQLNCLI10 提供程序?

    我有一个 C 网站 允许客户端从其 PC 直接连接到远程 SQL Server 数据库 通过使用第 3 方 ActiveX 控件绕过 Web 服务器 我最初使用的是SQLOLEDB提供商并且运行良好 客户端位于内部网络中 使用 Window
  • SQL Server:读取数据库图表的权限

    您能否告知 授予用户读取 SQL Server 2005 中数据库图表的权限需要什么权限 多谢 From BOL http msdn microsoft com en us library ms186345 28SQL 90 29 aspx
  • 窗口服务中的全局处理异常

    我有一个 Windows 服务作为服务器运行 但是 服务器有时会因未处理的错误而立即停止 请帮助我如何处理全局异常 谢谢 在我看来 你似乎试图以错误的方式解决问题 当您的程序 或服务 由于未处理的错误而崩溃时 解决方案不是弄清楚在哪里以及如
  • 如何对 SQL Server 中的数据库进行单元测试?

    有哪些方法呢 您可以使用哪些框架 好吧 我想你的意思是对访问数据库的代码进行单元测试 在这种情况下 有NDbUnit http www ndbunit org 它似乎是 NET 的 DbUnit 克隆 我从来没有使用过它 但是我使用过DbU
  • SQL Server 存储过程对象名称无效

    我在尝试修改现有存储过程时收到此错误 Invalid object name dbo BackupDB 我能够创建此存储过程 但是当我单击修改选项来修改此存储过程时 系统显示了上述错误 您会看到所附图片 当尝试执行此命令时 我也遇到同样的错
  • 为表多次指定了 xxx 列

    我正在尝试将 db2 简单查询调整为 SQL SERVER 该查询在 db2 上运行良好 select from pb console users u join select from pb console users user role
  • Pandas read_sql 读取时更改大量 ID

    我将 Oracle 数据库转移到 SQL Server 一切似乎都很顺利 各种 ID 列都是很大的数字 因此我不得不使用 Decimal 因为它们对于 BigInt 来说太大了 我现在尝试使用 pandas read sql 使用 pyod
  • 如何跳过 SSIS 数据流中的最后一行

    我在用FlatFile Source Manager gt Script COmponent as Trans gt OLEDB destination在我的数据流中 源从平面文件读取所有行 我想跳过更新数据库的最后一行 预告片记录 由于它
  • 大表的最佳主键格式

    我正在开发一个 ASP NET 应用程序 它有一些可能很大的数据表 我想知道定义主键的最佳方法是什么 我知道以前已经有人问过这个问题 但由于这是针对特定情况的 所以我认为这个问题是有效的 我在 SQL Server 2008 数据库上使用实
  • 将 Mdb 转换为 Sql Server

    如何使用 C 或其他语言将 mdb 访问文件转换为 sql server 我找到了一个article http channel9 msdn com forums TechOff 234266 Convert MS Access DB to
  • SQL 性能,使用 OPTION (FAST n)

    谁能告诉我在 SQL 查询中使用 OPTION FAST n 有什么缺点 比如我这么快就抓取了10万条记录 但这对SQL Server的其他进程有影响吗 我正在接近我的问题 我必须每周运行一次数据处理 因此 第一个结果会在 5 7 秒后出现
  • SQL FORMAT 函数错误

    这个SQL select FORMAT lNum from rpt myView 产生以下错误 参数数据类型 varchar 对于格式的参数 1 无效 功能 lNum is a varchar 10 运行 SQL Server 2012 v
  • Linq 选择与另一个表中的 ID 相等的项目

    我不确定这怎么可能 但我有两个表 我想通过表 1 的值从表 2 中获取值 表 1 有一个名为 rank 的外键 它是int 表 2 有一个名为 name 的值 它是string 现在表 1 的 排名 与表 2 的 ID 相关 所以当我说 v

随机推荐