【发布时间】:2022-07-23 01:42:42
【问题描述】:
我正在尝试使用 to prisma db pull 命令将 SQL Server 数据库导入 prisma。
我创建了一个具有适当权限的新数据库用户(我可以使用该用户登录 SQL Server Management Studio)。但是,它不能通过 prisma 工作。
schema.prisma 文件如下所示:
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlserver"
url = env("DATABASE_URL")
}
我尝试了以下连接字符串:
DATABASE_URL="sqlserver://localhost:1434;database={master};user={test};password={test123}"
结果:
错误:P1011
打开 TLS 连接时出错:TLS 设置不允许建立连接。请检查您的连接字符串。 (操作系统错误-2146762487))
和
DATABASE_URL="sqlserver://localhost:1434;database={master};user={test};password={test123};trustServerCertificate={true};encrypt={false};sslaccept={accept_invalid_certs};"
结果:
错误:连接器中的错误:用户“测试”的身份验证失败
我也尝试使用端口 1433,结果是找不到数据库服务器。我还尝试了不同安全相关标志的各种组合,但我遇到了同样的错误,即身份验证失败。我无法进一步调试它,因为我不知道如何获取 prisma 背后的底层引擎,和/或在隔离环境中尝试这种连接。
我还尝试了集成安全性(我不知道它是否受支持),并连接到 MS Azure DB。所有这些类型的连接都可以在我们的 .NET 后端使用 EF 正常工作,但我猜那是在完全不同的环境中。
提前致谢。
编辑/更新:
感谢@AlwaysLearning,我已尝试更新 sql server express (LocalDb) 的版本。不过,我仍然遇到同样的问题。
SELECT @@VERSION
Microsoft SQL Server 2019 (RTM) - 15.0.2000.5 (X64) Sep 24 2019 13:48:23 Copyright (C) 2019 Microsoft Corporation Express Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 19043: )
我使用端口1433 构造连接字符串的任何方式都会产生相同的错误:
Error: Migration engine error:
Error creating a database connection.
我使用端口1434 构造连接字符串但省略trustServerCertificate=true; 的任何方式都会产生相同的错误:
Error: P1011: Error opening a TLS connection: The TLS settings didn't allow the connection to be established. Please review your connection string.
用我认为应该是正确的连接字符串来解决这些问题
DATABASE_URL="sqlserver://localhost:1434;database=testing;user=admin;password=admin;trustServerCertificate=true;encrypt=false"
给出错误
Performing a TLS handshake
Trusting the server certificate without validation.
TLS handshake successful
Turning TLS off after a login. All traffic from here on is not encrypted.
Login failed for user 'admin'.
Login failed for user 'admin'.
我可以使用 SSMS 很好地创建数据库。
再次感谢!
编辑/更新 2:
似乎@AlwaysLearning 是正确的,端口应该是 1433。我必须使用 SQL Server 配置管理器打开这个端口。这样做,我现在能够创建新的数据库(使用集成安全,这是我想要的本地开发)。使用 localhost:1433,我找不到现有的数据库,我猜这意味着 localhost:1433 != LocalDB。我会进一步调查。到目前为止,谢谢。
编辑/更新 3:
是的,连接字符串 localhost:1433 似乎没有转到 SQL Server Express (LocalDB),而是转到 SQL Server (DESKTOP-{SOMETHING})。不确定 prisma 是否支持 SQL Server Express (LocalDB)
【问题讨论】:
-
这里是 github 关于集成安全性讨论的链接github.com/prisma/prisma/discussions/11492
-
您可能不想为您的连接字符串使用 tcp/1434。这就是专用管理员连接,通常只允许
sa用户使用单个活动连接。在实例上启用 TCP/IP 协议时(在 SQL Server 配置管理器中),要使用的默认端口是 tcp/1433。 -
打开 TLS 连接时出错:TLS 设置不允许建立连接。 您要连接到哪个版本的 SQL Server?
SELECT @@VERSION的输出是什么?似乎它可能是一个非常旧的(或尚未收到任何服务包或累积更新的),因为该错误消息表明服务器仅支持 TLS 1.0 或 TLS 1.1,而客户端库要求 TLS 1.2 连接。您是否尝试过将;encrypt=false添加到您的连接字符串以在没有任何 TLS 加密的情况下进行连接? -
1/2 @AlwaysLearning 正如我原来的帖子中所述,我也尝试过使用端口 1433,但没有成功。这种情况下的错误消息是:
Error: Error in connector: Failed to connect to the database at "localhost".同样如上例所述,我尝试使用encrypt=false(在原始帖子中提供的连接字符串中就是这种情况)。选择@@VERSION 输出Microsoft SQL Server 2016 (SP1) (KB3182545) - 13.0.4001.0 (X64) Oct 28 2016 18:17:30 Copyright (c) Microsoft Corporation Express Edition (64-bit) on Windows 10 Pro 6.3 <X64> (Build 19043: ) -
2/2 所以这可能是问题所在。谢谢,会尝试更新它
标签: sql-server prisma