托管身份验证导致 Azure SQL 数据库存储过程出现问题

问题描述 投票:0回答:1

要禁用 Azure SQL 的本地身份验证,我对代码进行了更改,以使用 Azure 应用服务的系统分配托管标识进行连接,而不是连接字符串中的常用用户名/密码。

但是现在,其中一个存储过程抛出了错误

字符串或二进制数据将被截断

我尝试了两种通过 Azure 应用服务连接到 SQL Server 的方法:

  1. 使用新的
    SqlClient
    NuGet 包:
    Microsoft.Data.SqlClient
  2. 使用旧包 (
    System.Data.SqlClient
    ) 并获取访问令牌进行身份验证。

最初,我认为问题可能是由于较新的 NuGet 包造成的,但即使在修改现有代码以坚持使用

System.Data.SqlClient
并为令牌添加额外步骤之后,问题仍然存在。

奇怪的是,这个问题似乎与托管身份验证有关。当前服务在生产环境中使用带有用户名/密码和

System.Data.SqlClient
nuget 的连接字符串,并且正在无缝运行。

我仔细检查了存储过程,但没有发现值超出 SQL Server 表限制的问题。

我不理解使用 ManagedIdentity 和存储过程失败(出现完全不同的错误)之间的联系。

  • 解决方案版本:.NET 4.7.2
  • SQL Server 数据库版本 - v12.0.2000.8

还有其他人遇到过这个吗?任何有关如何解决此问题的想法将不胜感激。

stored-procedures azure-sql-database .net-4.8 azure-managed-identity azure-appservice
1个回答
0
投票
string or binary data would be truncated

按照这个

字符串或二进制数据将被截断”,这意味着该字段不足以容纳您的数据。

如果目标列的最大长度比您尝试插入的值短,例如,如果该列仅为 varchar(7),那么值 01-Jan-2024 超过该大小,那么您可能会收到上述错误。您应该检查列及其数据类型。

  • 确保您尝试通过存储过程插入或更新的数据不超过各个表中列的定义长度。查看存储过程参数以及传递给它们的数据。

  • 仔细检查存储过程代码中是否有任何插入或更新语句。确保插入或更新的数据长度与列定义兼容。

  • 确保应用服务使用的 Azure AD 托管身份 具有执行存储过程并对表执行所需操作的必要权限。

© www.soinside.com 2019 - 2024. All rights reserved.