管道的另一端没有进程(SQLServer2012)

我有一个错误:

A connection was successfully established with the server, but then an error occurred
during the login process. (provider: Shared Memory Provider, error: 0 - No process is
on the other end of the pipe.)


(Microsoft SQL Server, Error: 233)

我知道,这个网站上也有类似的问题,答案是,启用 TCP/IP 和管道。 但是我同时启用了这两个功能,但是仍然不能工作:

MSSQL error

我使用的是2012 Microsoft SQL Server,用户拥有完全权限。

323481 次浏览

默认情况下,服务器仅设置为 Windows 身份验证。没有任何通知,说明错误的来源是那个,所以很难找出来。即使您创建的用户仅具有 SQL 身份验证,SQLManagement 工作室也不会向您发出警告。

所以答案是: 从 Windows 切换到 SQL 身份验证:

  1. 右键单击服务器名称并选择 properties;
  2. 选择 security选项卡;
  3. 启用 SQL Server and Windows Authentication mode;
  4. 重新启动 SQLServer 服务。

您现在可以使用登录/密码进行连接。

以下是微软的说明: https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/change-server-authentication-mode?view=sql-server-ver15

此错误的另一个原因可能是数据库名称不正确或不存在。

强制 TCP/IP 连接(通过提供 127.0.0.1而不是 localhost.)可以揭示错误的真正原因。在我的示例中,连接字符串中指定的数据库名称不正确。

所以,这里是清单:

  • 确保在配置管理器中启用了 名叫烟斗(不要忘记重新启动服务器)。
  • 确保所连接的数据库存在。
  • 确保启用了 SQLServer 身份验证(或混合模式)。

要解决这个问题,请使用 Windows 身份验证连接到 SQLManagementStudio,然后右键单击服务器节点 Properties-> Security 并启用 SQLServer 和 Windows 身份验证模式。如果您正在使用“ sa”,请确保该帐户已启用。在“登录”和“查看状态”下打开“ sa”。

enable sa admin

如果这不起作用,则可能需要重新安装 SQLServer

还可以尝试转到服务并重新启动 Sql 服务器实例enter image description here

我也有同样的问题 ”成功地与服务器建立了连接,但随后发生了一个错误 在登录过程中。(提供程序: 共享内存提供程序,错误: 0-没有进程是 在管道的另一端。)”

我的联系方式是:

Server = POS06 SQLEXPRESS; AttachDbFilename = C: ... Datas.mdf; InitialCatalog = Data; User ID = sa; Pwd = 12345; Connect Timeout = 10;

但是我的 SQL 是 POS06MSQL2014

将连接字符串更改为

Server = POS06 MSQL2014; AttachDbFilename = C: ... Datas.mdf; InitialCatalog = Data; User ID = sa; Pwd = 12345; Connect Timeout = 10;

成功了。

我第二次面对这个问题,之前所有的回答都失败了,幸运的是,以下要求起到了作用:

Alter login [user] with CHECK_POLICY = OFF
go


Alter login [user] with CHECK_POLICY = ON
go

如果尝试使用 SQL 凭据登录,还可以尝试更改注册表中的 SQLServer 的 LoginMode 以允许 SQLServer 和 Windows 身份验证。

  1. 打开 regedit
  2. 转到 SQL 实例键(根据实例名称可能有所不同) : 计算机 HKEY _ LOCAL _ MACHINE 软件微软 Microsoft SQL Server MSSQL14.SQLEXPRESS MSSQLServer
  3. 将 LoginMode 设置为2

enter image description here

  1. 重新启动 SQLservice 和 SQLServerManagementStudio 并重试。

对我来说,我的登录用户的密码过期了,我得到了同样的例外。 然后我用 Windows 身份验证模式登录并更改相关用户的密码,这就解决了我的问题。

确保在 Security-> Logins 中指定了用户(如果没有添加) ,然后再试一次。

按照其他答案操作,如果仍然无法工作,请重新启动计算机,以便在 Windows 上有效地重新启动 SQLServer 服务。

因此,我最近也遇到了这个问题,为了集成安全性,结果证明我的问题实际上很容易解决,但主要是因为我忘记在连接字符串中添加 “ Trusted _ Connection = True”

我知道这可能看起来相当明显,但它让我去了20分钟左右,直到我意识到我已经复制了我的连接字符串格式从 Connectionstrings.com和该部分的连接字符串丢失。

简单,我觉得有点傻,但这是我的答案。

也有这个错误,原因很简单,但不明显: 密码不正确。不知道为什么我没有得到“登录失败”从新安装的 SQL 2016服务器。

是的,这个错误也可能是“某些东西失败了,祝你好运找出是什么”——在我的例子中,这是一个错误的用户名。SQLServer2019RC1.

始终尝试使用这些凭据与 SQLManagementStudio 一起登录。这可能会揭示一些在运行时代码中没有得到的更多细节。 我已经检查了 SQL + Windows 身份验证,重新启动了服务器,但仍然没有运气。 在尝试使用 SQL Management 登录后,我得到了以下提示:

screenshot

不知怎么的,密码已经过期,尽管登录是在几分钟前创建的。无论如何,新的密码设置,连接字符串更新,一切都很好。

在我的例子中,数据库已经还原,并且已经有用户用于连接。我必须在数据库中删除用户,并为登录重新创建用户映射。

  1. 放弃使用者

    DROP USER [MyUser]
    

如果用户拥有任何模式,它可能会失败。必须在删除用户之前将它们分配给 dbo。使用下面的第一个查询获取用户拥有的模式,然后使用第二个查询更改这些模式的所有者(HangFire 是从前面的查询获得的模式)。

select * from information_schema.schemata where schema_owner = 'MyUser'
ALTER AUTHORIZATION ON SCHEMA::[HangFire] TO [dbo]
  1. 更新用户映射。在管理工作室转到安全-> 登录-> 打开用户-> 转到用户映射选项卡-> 启用数据库并授予适当的角色。

在我的例子中: 为用户分配一个 sysadmin 角色。

  1. 作为 Windows 身份验证用户登录
  2. 转到: Security-> Login-> 右击 user-> Assign server role as sysadmin

在我的例子中,通过 VPN 远程登录可以正常工作。但是从安装 sql 服务器的服务器连接失败。

原来,实例名不是默认名称,例如 SQLEXPRESS。因此,在连接时需要显式指定它。

enter image description here

enter image description here

服务器名称: . < instance _ name > I01”

如果要远程连接,我不需要这样做,只需要 < server _ hostname > ,< port _ number >

这也许能帮到其他人。在家写完我的数据库例程后,一切工作正常。把它运行起来,也得到了这个错误。可能会断言同样的错误,不同的原因。我在修改代码时输错了数据库名称。哦!现在回过头来看,在我的情况下,登录/用户(管理员帐户)是好的,但是数据库名称不好,管道的末端没有任何东西。为什么不说“数据库不存在... ... ?”?说清楚。