如何授予 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 密钥的权限? 的相关文章

  • 如何使用 php $row 检索 sql 日期时间对象?

    例如 sql SELECT FROM db query sqlsrv query conn sql while row sqlsrv fetch array query echo row date column 会崩溃 我找到的大多数答案都
  • sql中的sumProduct

    我正在尝试在服务器上的表中实现 sumproduct 来自 Excel select into myTable2 from myTable1 select a b c d e select c e 100 3423 from myTable
  • 无法附加数据库或创建新数据库 - SQL Server 2008 [重复]

    这个问题在这里已经有答案了 可能的重复 SQL Server 2008 Express 无法附加 mdf 文件 https stackoverflow com questions 1424811 sql server 2008 expres
  • 如何将 nvarchar 解码为文本(SQL Server 2008 R2)?

    我有一个 SQL Server 2008 R2 表nvarchar 4000 field 存储该表的数据如下所示 696D616765206D61726B65643A5472 or 303131 011 我看到每个字符都编码为十六进制 我如
  • 如何在SQL Server中创建SYS模式的表?

    可以在 SQL Server 2008 sys 架构中创建表吗 我知道可以将表标记为系统 但不能更改架构 有什么窍门吗 您无法将自己的对象添加到 sys 架构中 无法在 sys 架构中创建用户定义的对象 盖尔 埃里克森 MS SQL Ser
  • 随机分配工作地点,每个地点不得超过指定员工人数

    我正在尝试在位置列表中选择唯一的随机发布 招聘员工位置 所有员工都已发布在这些位置 我正在尝试为他们生成一个新的随机发布位置 其 位置 条件为 员工新 随机位置将不等于他们的家乡 并且随机选择的员工及其职称必须小于或等于 地点 表中的 地点
  • 数百个别名/同义词与数据库表的完全限定名称

    考虑到多个模式中的数百个数据库表 在创建存储过程和视图时 您是否建议使用别名 同义词或完全限定名称 给定一些 schema table 像这样 Orders OrderHeader Production LineThroughput Sal
  • 在 SQLCMD 模式下格式化输出?

    有没有办法可以指定输出文件格式SQLCMD模式这样我就可以使用它读回来BULK INSERT 我想做这样的事情 CONNECT SERVER1 OUT E test SELECT TOP 100 ID NAME FROM DB1 dbo T
  • 需要 SQL Server 查询帮助

    我在视图中存储一堆数据 将 MS Access 查询转换为视图 现在我想做的是编写一个存储过程来根据添加数据的时间提取数据 这是我正在运行的查询 Select Name PlanID ApptDate 1stAppt rn from Sel
  • 一个存储过程创建的临时表可以在另一个存储过程中使用吗?

    我有一个存储过程 它使用找到的索引创建一个临时表CONTAINSTABLE就像 我放了一段存储过程代码 CREATE TABLE tmpTable ID INT RANK INT SELECT query SELECT DISTINCT I
  • Docker连接SQL Server容器非零代码:1

    我正在尝试从创建一个 SQL Server 容器docker compose yml但是当我运行它时 它直接停止并出现一些错误 注意 它运行在带有 docker Preview 的 Apple M1 芯片上 docker compose y
  • 插入后用触发器更新多行(sql server)

    我有一个表 orderDetails 包含订单的产品 产品编号 color size quantity 和一个表库存 产品编号 size color stock 订单完成后 我使用此查询将项目插入表中orderDetails INSERT
  • 查询所有表数据并进行索引压缩

    是否有人碰巧拥有一个通用 SQL 语句 可以列出数据库中每个分区的所有表和索引及其当前的压缩设置 Thanks 编辑 这是我尝试查询表所得到的 但我不确定连接是否正确 我得到了重复项 这似乎是由于索引的存在引起的 SELECT t name
  • 如何授予所有表的 REFERENCES 权限

    我必须授予REFERENCES登录权限说sql login 我可以给予资助REFERENCES对单个表的权限 例如 GRANT REFERENCES ON Mytable TO sql login 有什么办法可以授予REFERENCES允许
  • 连接两个表的查询的 SQL Server“FOR XML”输出

    我是 SQL Server 中 FOR XML 功能的新手 我正在使用 SQL Server 2012 我有两个表 Word 和 Word Expansion 样本数据 表 字 WordOID Word 1 PIPE 2 WIRE 表 Wo
  • 在 SQL Server 中处理日期

    我正在开发一个 ASP NET 网站 我从网页获取日期 然后根据用户输入我想从 SQL Server 数据库获取结果 使用存储过程 问题是我只能从用户界面获取这种格式的日期2016 10 08这是字符串类型 但在数据库中 我有一个类型为da
  • 列中差异的数量

    我想检索一列每行中有多少个字母的差异 例如 如果您有一个值 test 而另一行有一个值 testing 则 test 和 testing 之间的差异为 4 个字母 该列的数据值为 4 I have reflected about it an
  • 如何在存储过程中实现 sql 搜索功能 (Sql Server 2008)

    我需要编写一个存储过程 该过程将使用 sql server 2008 根据可选参数搜索表 将会有两种模式 基本搜索模式 我们只传递一些文本 高级搜索模式 使用可选参数而不使用 SearchText 为了进行测试 我使用 AdventureW
  • 了解 SSMS 2008 中关系的更新和删除规则

    当我们定义外键约束时 我对 SQL Server 2008 Management Studio 中的更新和删除规则的含义感到困惑 我也没有找到相关的帮助文档 例如F1帮助 这是屏幕快照 如果有人能描述它们的含义并推荐一些相关文档来阅读 我将
  • 在 SQL 数据库中存储“列表”的最正确方法是什么?

    因此 我读了很多关于如何将多个值存储到一个列中是一个坏主意 并且违反了数据标准化的第一条规则 令人惊讶的是 这不是 不要谈论数据标准化 所以我需要一些帮助 目前我正在为我工 作的地方设计一个 ASP NET 网页 我想根据此人所属的 Act

随机推荐