配置管理器的SQL Server服务器里只有SQLEXPERSS,没有MSSQLSERVER,无法连接数据库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了配置管理器的SQL Server服务器里只有SQLEXPERSS,没有MSSQLSERVER,无法连接数据库相关的知识,希望对你有一定的参考价值。

只安装了SQL Server Managment Studio(2008开发版),现在配置管理器的SQL Server服务器里只有SQLEXPERSS,没有MSSQLSERVER。然后我现在用C#连接不上数据库。要怎么解决?怎么在SQL Server服务器里添加MSSQLSERVER,要下载么?

服务器名称 , 写成 "localhost\SQLEXPRESS" 看看?追问

不行啊,我搜了很多,感觉是SQL Server服务器里没有MSSQLSERVER的原因。其他该设置的我都设置了,就是这里没有就没管。

追答

如果非要添加一个名字是 MSSQLSERVER 的服务.
那就用那个 2008 的安装程序, 再创建一个数据库实例. 然后注意 自己命名实例名称.

追问

难道SQL Server服务器里的MSSQLSERVER 不是必要的吗?我看很多都是说要启用这个。你说的2008 的安装程序是完整版的安装程序还是什么?我只安装了SQL Server Managment Studio。哎,这个处理不好,下面都没法进行。重新卸载再安装完整版的又好麻烦。

追答

控制面板, 管理工具, 服务里面看看

有没有 SQL Server (SQLEXPRESS) 这样格式的服务名.

追问

恩,有的。之前是先写的程序后进行的配置,一直不成功。后来我重新建了个项目又原封不动写了一遍,就莫名其妙的可以运行了。多谢啦~~

参考技术A 我的就是sqlserver management。
服务器名应该写 机器名/实列名追问

我试了一下,目前四种都是可行的。用IP地址,数据库的服务器名称可以。本机的话用"."也可以。localhost\SQLEXPRESS也可以。

SQL Server 配置管理器的下拉列表中缺少 SSL 证书

【中文标题】SQL Server 配置管理器的下拉列表中缺少 SSL 证书【英文标题】:SSL Certificate missing from dropdown in SQL Server Configuration Manager 【发布时间】:2016-08-17 11:45:06 【问题描述】:

我正在尝试配置 SQL Server 2014,以便可以使用 SSL 远程连接到它。服务器上安装了有效的通配符证书,并且证书的域名 (example.com) 与服务器的 FQDN (test.windows-server-test.example.com) 匹配。

问题是在 SQL Server 配置管理器中,证书没有列出,所以我无法选择它。

也就是说,我被困在this MS tutorial 的第 2.e.2 步。

【问题讨论】:

可能是您导入的 SSL 证书的 KeySpec 错误:AT_SIGNATURE 而不是 AT_KEYEXCHANGE。您可以使用 certutil.exe -dump -v My.pfx 检查 PFX 并搜索 KeySpec = 1 -- AT_KEYEXCHANGE。您可以删除证书(如果您尚未将其作为 PFX 将其导出到 PFX)并使用 certutil.exe -v -importPFX My.pfx AT_KEYEXCHANGE 再次导入它 谢谢,我查过了,但我有KeySpec = 1 -- AT_KEYEXCHANGE 计算机证书存储中是否安装了证书?证书中的CN 值是否与计算机的完整 DNS 名称(运行 SQL 服务器的位置)相同?证书是否具有带有“DNS 名称”值的主题备用名称? 证书已安装在 IIS 服务器证书中,并已成功用于网站。证书用于*.example.com,计算机名称为test.widows-server-test.example.com。是这个意思吗? -KeySpec KeyExchange 对我来说是个问题。 (但我已经检查了主题与 SQL 服务器名称/FQDN 是否匹配) 【参考方案1】:

在 cmets 中通信后,我可以假设您的主要问题是您使用的证书的 CN 部分。要让 IIS 服务器成功进行 TLS 通信,没有 SQL Server 那样严格的限制。

Microsoft 要求(请参阅here)证书的名称必须是计算机的完全限定域名 (FQDN)。 这意味着 主题证书的一部分看起来像 CN = test.widows-server-test.example.com,其中 test.widows-server-test.example.com 是 FQDN你的电脑。仅使用 CN = *.example.comSubject Alternative Name 是不够的,其中包含 DNS Name=*.example.comDNS Name=test.widows-server-test.example.comDNS Name=test1.widows-server-test.example.com、@987654335 @ 等等。这样的证书对于 TLS 来说是可以的,但 SQL Server 会丢弃它。请参阅the article,它描述了关闭的问题。

我建议您创建 CN 等于 SQL Server 的 FQDN 的自签名证书,并验证 SQL Server 配置管理器是否可以看到该证书。

更新:我对进程监视器的问题进行了更多分析,发现注册表中的两个值对于 SQL Server 配置管理器很重要:值 HostnameDomain 下关键

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

如果我将DomainHostname 更改为与证书CN 对应的值,则证书将已显示在SQL Server 配置管理器中。这可能不是所有问题,但它表明 SQL Server 需要更多作为 Web 服务器(例如 IIS)。

更新 2: 我再次详细检查了该问题,我想我确实找到了如何配置您已经拥有的通用 SSL 证书的方法(例如来自Let's Encrypt 的免费 SSL 证书,StartSSL 或其他)。

区分SQL Server 配置管理器 的作用与SQL Server 所需的配置很重要。与 SQL Server 一样,配置管理器属性的证书选项卡有更多硬性限制。我上面只描述了 SQL Server 配置管理器的限制,但是可以直接在注册表中进行配置,以使用 SQL Server 更常见的 SSL/TLS 证书。我将在下面描述如何做到这一点。

您可以在注册表中的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.SQL2014\MSSQLServer\SuperSocketNetLib 之类的键下执行一项操作,其中MSSQL12.SQL2014 部分在您的情况下可能会有所不同。 SQL Server 配置管理器帮助我们在注册表中设置两个值:ForceEncryptionCertificate

Certificate 值是 SHA1 哈希值,可以通过检查证书的属性找到:

或证书的扩展属性,您可以通过使用 certutil.exe -store My 看到:

只需复制“Cert Hash(sha1)”值,删除所有空格并作为Certificate 值的值放置在注册表中。进行设置并重新启动 SQL Server Windows 服务后,将在 C:\Program Files\Microsoft SQL Server\...\MSSQL\Log 目录中的文件 ERRORLOG 中看到类似

2016-04-25 21:44:25.89 服务器证书 [Cert Hash(sha1) "C261A7C38759A5AD96AC258B62A308A26DB525AA"] 加载成功 用于加密。

【讨论】:

谢谢,因为warning here,所以我将计算机名称更改为“test.example.com”,现在在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 中,域都是“example.com”,主机名是“test ”。证书仍然没有出现。我手动将主机名更改为“example.com”,但证书仍未显示。我错过了一步吗? @Jonah:您是否在 SQL Server 配置管理器中将“强制加密”设置为“是”?您是否重新启动了 SQL Server?可以重新启动 SQL Server 吗?您能在 SQL ERRORLOG 中看到类似“证书 [Cert Hash(sha1) ... ] 已成功加载以进行加密。”之类的内容吗?你目前到底有什么问题?你有哪条错误信息? 我刚刚尝试将“强制加密”设置为“是”,并且成功地从服务重新启动了 SQL Server。 ERRORLOG 中唯一可能相关的条目是:A self-generated certificate was successfully loaded for encryption. 注意,这将 not 引用我正在尝试加载的通配符证书,它不是自行生成的。我当前的问题与 OP 中的相同:证书下拉列表仍然是空白的。我无法选择供 SQL Server 使用的证书。 @Jonah:抱歉,您应该发布证书的详细信息。如果您创建了一个自行生成的证书,那么究竟是如何创建的,哪些属性,您安装它的位置(在哪个证书存储中)等等。 @Jonah:我知道可以在证书存储中同时安装所有证书。这只是商店。一个服务(或程序)可以使用一个证书,而另一个程序将使用另一个证书。例如,您可以配置 IIS 以使用 SSL 的 特定 证书。同一商店中是否存在任何其他证书并不重要。不应该存在冲突。【参考方案2】:

我想为将来可能会偶然发现我在 SQL 2016 SP2 和故障转移集群中遇到的类似问题的人添加此内容。添加到注册表的证书指纹必须全部大写。

希望这对下一个人有所帮助。

【讨论】:

尽管 SSCM 生成的值是小写的,但情况似乎如此。奇迹永远不会停止。【参考方案3】:

按照已接受答案的更新 2 部分中的步骤操作后,我无法启动 SQL Server 服务,在事件查看器中出现这些错误:

无法加载用户指定的证书 [Cert Hash(sha1) "thumbprint of certificate"]。服务器将不接受连接。您应该验证证书是否已正确安装。请参阅联机丛书中的“配置证书以供 SSL 使用”。

TDSSNIClient 初始化失败,错误为 0x80092004,状态代码为 0x80。原因:无法初始化 SSL 支持。找不到对象或属性。

TDSSNIClient 初始化失败,错误为 0x80092004,状态代码 0x1。原因:初始化因基础结构错误而失败。检查以前的错误。找不到对象或属性。

在 SQL Server 错误日志中出现错误:

服务器无法加载启动 SSL 连接所需的证书。它返回以下错误:0x8009030d。检查证书以确保它们有效。

google了一下,发现a solution:

确保运行 SQL Server 服务的 Windows 帐户(在我的情况下为 NT Service\MSSQLServer)对以下文件夹/注册条目具有完全权限:

    C:\Program Files\Microsoft SQL Server[您的 Sql Server 实例]\MSSQL\ C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys HKLM\System\CurrentControlSet\Services\WinSock2\Parameters

我查了1号NT Service\MSSQLSERVER已经有权限了。

我检查了2号,NT Service\MSSQLSERVER没有权限,我添加了权限。它弹出一个错误,说该文件夹中的一个文件被拒绝操作,但我只是忽略了它(我无能为力)

我没有检查No.3并尝试启动SQL Server,它成功了!!

【讨论】:

【参考方案4】:

我在 s-s-rS 中遇到了类似的问题,其中 microsoft Active Directory CA 颁发的证书在 s-s-rS 的下拉列表中不可见。经过大量搜索、反复试验,我可以通过点击此链接修复它。

https://docs.microsoft.com/en-us/archive/blogs/sqlserverfaq/can-tls-certificate-be-used-for-sql-server-encryption-on-the-wire

简述如下: 证书的 Subject 属性必须表明公用名 (CN) 与服务器计算机的主机名或 完全限定域名 (FQDN) 相同。

因此,在我们的案例中,我们建议请求证书颁发机构将主题名称更改为 ABC-SQLServer.abc.local(SQL Server 的 FQDN)而不是 abc-corp.abc.com 完成此更改后,我们再次在 MMC 中加载证书,现在我们可以在 SQL Server 配置管理器中看到加载的证书!

希望它可以帮助面临同样问题的人!

【讨论】:

【参考方案5】:

即使按照上述操作,我仍然遇到问题。这是我的修复: 在证书 mmc 中右键单击证书所有任务-> 管理私钥。让服务帐户完全控制。就我而言,我使用的是 NT Service\MSSQL$

【讨论】:

您只需要授予读取权限 - 这也解决了我的问题。 这也是我需要的,需要点赞!【参考方案6】:

我使用 SQL Server 域帐户登录到服务器(必须暂时将该帐户添加到本地管理员)并将证书导入 SQL Server 服务帐户的个人文件夹中。重新启动服务器,然后 SQL Server 可以看到证书。希望它可以帮助某人。

【讨论】:

【参考方案7】:

另一种故障模式是密钥长度 - SQL 要求的最小密钥长度为 2048。禁用 DH 通道。

【讨论】:

【参考方案8】:

我也遇到了从 MMC 复制的问题,如文章 here 中所述。使用 certutil 并将其复制到注册表值中效果很好。

【讨论】:

以上是关于配置管理器的SQL Server服务器里只有SQLEXPERSS,没有MSSQLSERVER,无法连接数据库的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server配置管理器的“别名”功能好处,实现内外网统一以及加了端口号导致的限制

为啥启动sql server 配置管理器出现请求失败或服务未及时响应

sql server2008配置管理工具服务显示远程过程调用失败

如何启动sql server 2005

没有sqlserver配置管理器怎么办

在SQL Sever复制数据库时出现启动、执行SQL Server代理作业错误的解决方法