7

我正在使用这个 sql 连接字符串:

string connection = "data source=OSBORNECHARLES2;initial catalog=TWO;
integrated security=False;User ID=userid;Password=PWD";

我收到此错误:

与服务器成功建立连接,但在登录过程中出现错误。(提供者:共享内存提供者,错误:0 - 管道的另一端没有进程。)

如果我设置integrated security=True;它正在工作。
如果我使用另一个窗口用户登录,我会收到错误消息。

你能告诉我为什么我会收到这个错误。

4

4 回答 4

8

我想你能用这个吗

Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;User ID=myDomain\myUsername;Password=myPassword;
于 2016-07-20T09:26:02.867 回答
3

我将在这里冒险猜测。我假设您的 SQL 实例设置为仅允许 Windows\Integrated 登录。您在连接字符串中设置的 userid\password 仅用于 SQL 登录,您不能以这种方式传递另一个 Windows 用户。您似乎正在尝试使用连接字符串进行模拟。我希望它是那么简单。

因此,您可能需要在您的 sql 实例上启用混合模式安全性并为此用户创建 sql 登录名,或者您需要在应用程序中模拟该 windows 用户,然后使用集成安全性。

于 2012-09-04T14:00:26.127 回答
3

我知道这是一个老问题,但是您使用的是哪个提供商。根据这篇 文章,“SSPI”适用于 SQLClient 和 Oledb,而“true”/“false”仅适用于 SQLClient。

这是关于此主题的另一篇有用的帖子,其中解释了使用“SSPI”或“true”将导致它尝试使用当前用户的 Windows 凭据。

我同意其他一些评论。可能的原因是:1) 服务器上没有启用 SQL 身份验证。可以通过以下方式进行故障排除:尝试使用通过 SSMS 连接的 SQL auth 进行访问。如果它成功了,那么您就知道 SQL 身份验证已启用。2)您尝试登录失败的用户没有权限。一个。确保用户具有服务器主体。作为一项额外措施(尽管我认为这并不重要),请确保服务器主体与其默认数据库上的数据库主体相关联。

如果它是远程服务器,则需要启用所有必要的服务,这可以在 SQL Server 配置管理器中完成。

于 2017-03-23T18:17:29.827 回答
0

我遇到了同样的问题以及我如何使用最后一个查询解决它。

我知道这是一个老问题,但如果新初学者被此错误触发,我会为他们发布答案。

不是每个人都使用 Windows 身份验证来访问他们的数据库或服务器,或者您想要访问的目标服务器可能只允许 SQL Server 身份验证。在这种情况下,我们只需要删除字符串的可信连接部分并将其替换为用户 ID 和密码:

select a.* from openrowset('SQLNCLI', 'Server=MYINSTANCE;UID=mySQLUser; PWD=*******;', 'select * from sys.databases') as a

如果发生错误。将 SQLCLI 替换为 MSDASQL 并写入驱动程序名称 SQL Server。

select a.* from openrowset('MSDASQL', 'Driver={SQL SERVER}; Server=MYINSTANCE;UID=mySQLUser; PWD=*******;', 'select * from sys.databases') as a
于 2021-10-07T09:42:16.533 回答