我正在使用这个sql连接字符串:
string connection = "data source=OSBORNECHARLES2;initial catalog=TWO;
integrated security=False;User ID=userid;Password=PWD";
我收到此错误:
与服务器成功建立连接,但随后出现 登录过程中发生错误。 (提供者:共享内存 提供商,错误:0 - 管道的另一端没有进程。)
如果我设置
integrated security=True;
它就可以工作。您能告诉我为什么会出现此错误吗?
我想你可以用这个
Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;User ID=myDomain\myUsername;Password=myPassword;
我在这里大胆猜测一下。 我假设您的 SQL 实例设置为仅允许 Windows\Integrated 登录。 您在连接字符串中设置的用户名\密码仅用于 SQL 登录,您不能以这种方式传递其他 Windows 用户。 您似乎正在尝试使用连接字符串进行模拟。 我希望事情就是这么简单。
因此,您可能需要在 sql 实例上启用混合模式安全性并为此用户创建 sql 登录名,或者需要在应用程序中模拟该 Windows 用户,然后使用集成安全性。
我知道这是一个老问题,但您使用的是哪个提供商。根据this帖子,“SSPI”适用于 SQLClient 和 Oledb,而“true”/“false”仅适用于 SQLClient。
这是关于此主题的另一篇有用的文章,其中解释了使用“SSPI”或“true”将导致它尝试使用当前用户的 Windows 凭据。
我同意其他一些评论。可能的原因是: 1) 服务器上未启用 SQL 身份验证。可以通过以下方法来排除故障: 一个。尝试使用通过 SSMS 连接的 SQL 身份验证进行访问。如果成功,您就知道 SQL 身份验证已启用。 2) 您尝试登录失败的用户没有权限。 一个。确保用户拥有服务器主体。作为一项额外措施(尽管我认为这并不重要),请确保服务器主体与其默认数据库上的数据库主体相关联。如果它是远程服务器,您需要启用所有必要的服务,这可以在 SQL Server 配置管理器中完成。
并非每个人都使用 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
来自:“服务器=LAPTOP-D82MD6F3\MSSQLSERVER2022;数据库=SchoolDb;用户ID=sa;密码=@Test123;TrustServerCertificate=True;”
收件人:发件人:“服务器=LAPTOP-D82MD6F3\MSSQLSERVER2022;数据库=SchoolDb;用户ID=sa;密码=@Test123;加密=True;TrustServerCertificate=True;”