使用SQL身份验证的SQL连接字符串

7

我正在使用以下这个 SQL 连接字符串:

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

我遇到了以下错误:
连接服务器成功,但在登录过程中发生错误。(提供程序: 共享内存提供程序,错误: 0 - 管道的另一端没有进程。)
如果我设置 integrated security=True; 就可以正常工作。 如果我使用另一个窗口用户登录,则会出现错误。
请问您能告诉我为什么会出现这个错误吗?

1
也许您登录的用户没有该数据库的权限。请尝试通过管理工具连接。也有可能您的实例是一个命名管道实例。因此名称可能类似于 <machine>\<named-pipe> - deostroll
4个回答

8

我认为你可以使用这个

Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;User ID=myDomain\myUsername;Password=myPassword;

为什么?有何不同之处?它如何具体帮助解决错误信息? - dakab
函数对我有效。 - Aetos2501

3
我知道这是一个旧问题,但您使用的是什么提供程序。根据帖子,“SSPI”适用于SQLClient和Oledb,而“true” / “false”仅适用于SQLClient。 这里有另一篇有用的文章,它解释了使用“SSPI”或“true”将导致尝试使用当前用户的Windows凭据。
我同意其他评论中的一些观点。可能的原因是: 1)服务器上未启用SQL身份验证。可以执行以下操作进行故障排除: a. 尝试使用SQL auth通过SSMS连接进行访问。如果成功,则知道已启用SQL身份验证。 2)正在尝试登录但失败的用户没有权限。 a. 确保用户具有服务器主体。作为额外措施(尽管我认为这并不重要),请确保将该服务器主体绑定到其默认数据库上的数据库主体。
如果是远程服务器,则需要启用所有必要的服务,可以在SQL Server Configuration Manager中完成。

3
我猜测您的SQL实例只允许使用Windows集成登录。您在连接字符串中设置的用户名和密码仅适用于SQL登录,无法通过此方式传递另一个Windows用户。您似乎正在尝试使用连接字符串进行模拟身份验证。但事实并不简单。
因此,您可能需要在SQL实例上启用混合模式安全性,并为该用户创建SQL登录,或在应用程序中模拟该Windows用户,然后使用集成安全性。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接