SQL Server のトラブルシューティング

データ API ビルダーでの SQL Server の接続、認証、エンティティ構成に関する一般的な問題の解決策。

一般的な質問

DAB での SQL Server サポートとは

データ API ビルダーは、リレーショナル データベース バックエンドとして Microsoft SQL Server と Azure SQL をサポートします。 DAB は Microsoft.Data.SqlClient ドライバーを使用して接続し、REST 要求と GraphQL 要求を T-SQL クエリに変換します。 オンプレミスの SQL Server インスタンスと Azure SQL Database の両方がサポートされています。

SQL Server ではどのような接続文字列形式が使用されますか?

DAB は SQL Server 用の ADO.NET スタイルの接続文字列を使用します。 一般的な文字列は Server=localhost,1433;Database=mydb;User Id=sa;Password=yourpassword;TrustServerCertificate=True;のようになります。 data-source.connection-stringdab-config.json フィールドに接続文字列を設定するか、--connection-stringdab init オプションを使用して渡します。

どのような認証モードがサポートされていますか?

DAB では、Azure SQL の SQL 認証 (ユーザー名とパスワード)、Windows 統合認証、Microsoft Entra 認証 (旧称 Azure Active Directory) がサポートされています。 Entra 認証を使用するには、接続文字列に Authentication=Active Directory Default または Active Directory Managed Identity を設定し、マネージド ID またはサービス プリンシパルにデータベース アクセスが許可されていることを確認します。

一般的な問題

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 など) が存在する必要があります。

解像 度:sourcedab-config.json値を確認します。 dbo.Productsなどの完全修飾名を使用します。 ターゲット データベースで SELECT * FROM INFORMATION_SCHEMA.TABLES を実行して、テーブル名とスキーマを確認します。

Azure SQL への接続に関するファイアウォールまたはネットワーク エラー

症状: Azure SQL Database への接続がタイムアウトするか、 Cannot open server ... requested by the login返されます。

原因: クライアント IP アドレスは、Azure SQL サーバーのファイアウォール規則で許可されていないか、Azure サービスのアクセス設定が無効になっています。

解像 度: Azure portal で、SQL Server リソースに移動し、[ ネットワーク] を選択します。 クライアント IP アドレスをファイアウォールの許可リストに追加するか、DAB が Azure で実行されている場合 に Azure サービスとリソースがこのサーバーにアクセスできるようにする を有効にします。 マネージド ID 認証の場合は、 CREATE USER [identity-name] FROM EXTERNAL PROVIDERを使用して ID がデータベース ユーザーとして追加されていることを確認します。

JSON 列が自動的に検出されない

症状: JSON データを格納する JSON 型または NVARCHAR(MAX) 型の列は、API スキーマの構造化オブジェクトとして公開されません。

原因: データ API ビルダーは、Azure SQL で JSON 列を自動的に検出してマップすることはありません。 これは、 GitHub の問題 #444 で追跡されている既知の制限です。

解像 度: 現時点では回避策はありません。 列はプレーン文字列値として公開されます。 ネイティブ JSON 列のサポートが追加されたときの更新については、GitHub の問題に従ってください。