有关数据 API 生成器中常见 SQL Server 连接、身份验证和实体配置问题的解决方案。
常见问题
DAB 中的 SQL Server 支持是什么?
数据 API 生成器支持 Microsoft SQL Server 和 Azure SQL 作为关系数据库后端。 DAB 使用 Microsoft.Data.SqlClient 驱动程序进行连接,并将 REST 和 GraphQL 请求转换为 T-SQL 查询。 支持本地 SQL Server 实例和 Azure SQL 数据库。
SQL Server 使用的连接字符串格式是什么?
DAB 使用 ADO.NET 风格的 SQL Server 连接字符串。 典型的字符串如下所示 Server=localhost,1433;Database=mydb;User Id=sa;Password=yourpassword;TrustServerCertificate=True;。 在dab-config.json的data-source.connection-string字段中设置连接字符串,或通过传递--connection-string选项至dab init来实现。
支持哪些身份验证模式?
DAB 支持适用于 Azure SQL 的 SQL 身份验证(用户名和密码)、Windows 集成身份验证和 Microsoft Entra 身份验证(以前为 Azure Active Directory)。 若要使用 Entra 身份验证,请将 Authentication=Active Directory Default 或 Active Directory Managed Identity 设置于连接字符串中,并确保托管标识或服务主体已被授予数据库访问权限。
常见问题
无法连接到 SQL Server 容器
症状: DAB 因为连接错误而无法启动,例如 A network-related or instance-specific error occurred。
原因: SQL Server 容器端口未正确映射、主机名错误或容器尚未准备好接受连接。
解决方案: 验证容器是否在运行 docker ps。 请确认端口映射(默认值 1433),然后在连接字符串 localhost,1433 中使用它。 如果使用自签名证书,请添加 TrustServerCertificate=True 。 如果容器刚刚启动,请等待几秒钟,让 SQL Server 在启动 DAB 之前进行初始化。
用户登录失败
症状: DAB 日志显示 Login failed for user 'sa' 或类似的身份验证错误。
原因: 连接字符串中的用户名、密码或身份验证模式与 SQL Server 配置不匹配。 SQL Server 也可能在仅限 Windows 身份验证模式下运行。
解决方案: 确认凭据与创建容器或服务器时设置的凭据匹配。 如果使用容器,请检查 SA_PASSWORD 环境变量。 若要在现有实例上启用 SQL 身份验证,请将服务器身份验证模式设置为“>”下的 SQL Server Management Studio 中的 SQL Server 和 Windows 身份验证模式。
未找到实体错误
症状: REST 或 GraphQL 请求返回一个 404 或架构错误,指示实体的源表不存在。
原因: 实体字段中的 source 表名或架构前缀与实际数据库对象不匹配。 默认情况下,SQL Server 表名称不区分大小写,但如果不使用默认架构, dbo则必须存在架构前缀(例如)。
解决方案:在dab-config.json中检查source的值。 使用完全限定的名称,例如 dbo.Products。 在目标数据库中运行 SELECT * FROM INFORMATION_SCHEMA.TABLES ,以确认表名称和架构。
连接到 Azure SQL 的防火墙或网络错误
症状: 与 Azure SQL 数据库的连接超时或返回 Cannot open server ... requested by the login。
原因: Azure SQL Server 防火墙规则不允许客户端 IP 地址,或者禁用 Azure 服务访问设置。
分辨率: 在 Azure 门户中,导航到 SQL Server 资源并选择 “网络”。 将客户端 IP 地址添加到防火墙允许列表,或者在 AZURE 中运行 DAB 时 启用允许 Azure 服务和资源访问此服务器 。 对于托管标识身份验证,请验证是否已将标识添加为数据库用户 CREATE USER [identity-name] FROM EXTERNAL PROVIDER。
不会自动检测 JSON 列
症状: 具有 JSON 或 NVARCHAR(MAX) 类型的列,用于存储 JSON 数据的列不会作为 API 架构中的结构化对象公开。
原因: 数据 API 生成器尚未自动检测和映射 Azure SQL 中的 JSON 列。 这是 GitHub 问题 #444 中跟踪的已知限制。
分辨率: 目前没有解决方法。 该列将公开为纯字符串值。 请关注 GitHub Issue 以获得有关何时添加原生 JSON 列支持的更新。