Résolution des problèmes de SQL Server

Solutions pour les problèmes courants de connectivité, d’authentification et de configuration d’entité SQL Server dans le générateur d’API de données.

Questions courantes

Qu’est-ce que la prise en charge de SQL Server dans DAB ?

Le générateur d’API de données prend en charge Microsoft SQL Server et Azure SQL comme back-ends de base de données relationnelle. DAB se connecte à l’aide du pilote Microsoft.Data.SqlClient et traduit les requêtes REST et GraphQL en requêtes T-SQL. Les instances SQL Server locales et Azure SQL Database sont prises en charge.

Quel format de chaîne de connexion SQL Server utilise-t-il ?

DAB utilise des chaînes de connexion de style ADO.NET pour SQL Server. Une chaîne classique ressemble à Server=localhost,1433;Database=mydb;User Id=sa;Password=yourpassword;TrustServerCertificate=True;. Définissez la chaîne de connexion dans le data-source.connection-string champ de dab-config.json ou passez-la via l’option --connection-string dans dab init.

Quels sont les modes d’authentification pris en charge ?

DAB prend en charge l’authentification SQL (nom d’utilisateur et mot de passe), l’authentification intégrée Windows et l’authentification Microsoft Entra (anciennement Azure Active Directory) pour Azure SQL. Pour utiliser l’authentification Entra, définissez Authentication=Active Directory Default ou Active Directory Managed Identity dans la chaîne de connexion et vérifiez que l’identité managée ou le principal de service a reçu l’accès à la base de données.

Problèmes courants

Impossible de se connecter au conteneur SQL Server

Symptôme: DAB ne parvient pas à démarrer avec une erreur de connexion telle que A network-related or instance-specific error occurred.

Cause : Le port du conteneur SQL Server n’est pas mappé correctement, le nom d’hôte est incorrect ou le conteneur n’est pas encore prêt à accepter les connexions.

Résolution: Vérifiez que le conteneur est en cours d’exécution avec docker ps. Confirmez le mappage de port (valeur par défaut 1433) et utilisez-le localhost,1433 dans la chaîne de connexion. Ajoutez TrustServerCertificate=True si vous utilisez un certificat auto-signé. Si le conteneur vient de démarrer, attendez quelques secondes que SQL Server s’initialise avant de démarrer DAB.

Échec de la connexion pour l’utilisateur

Symptôme : Les journaux DAB affichent Login failed for user 'sa' ou une erreur d’authentification similaire.

Cause : Le nom d’utilisateur, le mot de passe ou le mode d’authentification dans la chaîne de connexion ne correspond pas à la configuration de SQL Server. SQL Server peut également s’exécuter en mode Authentification Windows uniquement.

Résolution: Vérifiez que les informations d’identification correspondent à celles définies lors de la création du conteneur ou du serveur. Si vous utilisez un conteneur, vérifiez la variable d’environnement SA_PASSWORD . Pour activer l’authentification SQL sur une instance existante, définissez le mode d’authentification serveur sur SQL Server et le mode d’authentification Windows dans SQL Server Management Studio sous Sécurité des propriétés > du serveur.

Erreur d’entité introuvable

Symptôme: Les requêtes REST ou GraphQL retournent une 404 erreur de schéma indiquant que la table source de l’entité n’existe pas.

Cause : Le nom de table ou le préfixe de schéma dans le champ de l’entité ne correspond pas à l’objet de source base de données réel. Les noms de tables SQL Server sont insensibles à la casse par défaut, mais le préfixe de schéma (par exemple, dbo) doit être présent si le schéma par défaut n’est pas utilisé.

Résolution: Vérifiez la source valeur dans dab-config.json. Utilisez un nom complet tel que dbo.Products. Exécutez SELECT * FROM INFORMATION_SCHEMA.TABLES dans la base de données cible pour confirmer le nom et le schéma de la table.

Erreur de pare-feu ou réseau lors de la connexion à Azure SQL

Symptôme: Les connexions à la base de données Azure SQL expirent ou retournent Cannot open server ... requested by the login.

Cause : L’adresse IP du client n’est pas autorisée par les règles de pare-feu du serveur Azure SQL, ou le paramètre d’accès au service Azure est désactivé.

Résolution: Dans le portail Azure, accédez à la ressource SQL Server et sélectionnez Mise en réseau. Ajoutez l'adresse IP du client à la liste d'autorisation du pare-feu ou activez Autoriser les services et ressources Azure à accéder à ce serveur si DAB s'exécute dans Azure. Pour l’authentification d’identité managée, vérifiez que l’identité a été ajoutée en tant qu’utilisateur de base de données avec CREATE USER [identity-name] FROM EXTERNAL PROVIDER.

Les colonnes JSON ne sont pas détectées automatiquement

Symptôme: Une colonne avec un type JSON ou NVARCHAR(MAX) qui stocke les données JSON n’est pas exposée en tant qu’objet structuré dans le schéma d’API.

Cause : Le générateur d’API de données ne détecte pas encore et mappe automatiquement les colonnes JSON dans Azure SQL. Il s’agit d’une limitation connue suivie dans le problème GitHub #444.

Résolution: Il n’existe aucune solution de contournement pour l’instant. La colonne est exposée sous forme de chaîne de caractères brute. Suivez l'issue GitHub pour les mises à jour concernant l'ajout de la prise en charge des colonnes JSON natives.