【问题标题】:"Authentication failed for user" when running prisma db pull on a SQL Server database在 SQL Server 数据库上运行 prisma db pull 时“用户身份验证失败”
【发布时间】: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 &lt;X64&gt; (Build 19043: )
  • 2/2 所以这可能是问题所在。谢谢,会尝试更新它

标签: sql-server prisma


【解决方案1】:

您可以将integratedSecurity=true;trustServerCertificate=true; 添加到连接字符串中。

一个示例连接字符串将是:

sqlserver://DB_HOST:DB_PORT;database=DB_NAME;integratedSecurity=true;trustServerCertificate=true;

【讨论】:

    【解决方案2】:

    虽然您的情况似乎不是这样,但我想强调用于密码的字符。我认为由于密码中包含无效字符(如"),我的 SQL 身份验证失败, {'

    如果是这种情况,请尝试更改管理员帐户的密码,使其不使用可能无效的字符。 如果您无法更改管理员密码,请创建另一个具有读/写权限的用户。

    【讨论】:

      【解决方案3】:

      按照 prisma 文档中 2 处显示的步骤,我已经设法使 PrismaSQL Server 一起使用,并在 localhost 上使用免费的开发人员许可证:

      要构建DATABASE_URL string,只需遵循以下模式:

      // The schema is optional
      DATABASE_URL=sqlserver://${MSSQL_HOST}:${MSSQL_PORT};database=${MSSQL_DATABASE};user=${MSSQL_USER};password=${MSSQL_PASSWORD};schema=${MSSQL_SCHEMA};trustServerCertificate=true;encrypt=true
      

      然后在“SQL Server 配置管理器”中set this options

      1 启用 TCP/IP

      Prisma Client 需要启用 TCP/IP。启用 TCP/IP:

      打开 SQL Server 配置管理器。 (搜索“SQL Server 配置管理器”,或打开开始菜单并 键入“SQL Server 配置管理器”。)

      在左侧面板中,单击 SQL Server 网络配置 > MSSQLSERVER 的协议

      右键单击 TCP/IP 并选择启用。

      2 启用 SQL 登录身份验证

      如果您想在连接 URL 中使用用户名和密码 而不是集成安全性,启用混合身份验证模式 如下:

      在对象资源管理器中右键单击您的数据库引擎,然后单击 属性。

      在“服务器属性”窗口中,单击左侧列表中的安全性 并勾选 SQL Server and Windows Authentication Mode 选项,然后 点击确定。

      在对象资源管理器中右键单击您的数据库引擎,然后单击 重启。

      3. (可选)启用 sa 登录

      启用默认 sa(管理员)SQL Server 登录:

      在 SQL Server Management Studio 的对象资源管理器中,展开 安全 > 登录并双击 sa。

      在“常规”页面上,选择 sa 帐户的密码(取消勾选 如果您不想强制执行策略,请强制执行密码策略)。

      在状态页面的设置 > 登录下,勾选已启用,然后单击 好的。

      您现在可以在连接 URL 和登录时使用 sa 帐户 到 SQL Server Management Studio。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-13
        • 2017-08-16
        • 1970-01-01
        • 2020-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多