Risoluzione dei problemi di SQL Server

Soluzioni per problemi comuni di connettività, autenticazione ed entità di SQL Server in Generatore API dati.

Domande comuni

Che cos'è il supporto di SQL Server in DAB?

Il generatore di API dati supporta Microsoft SQL Server e Azure SQL come back-end di database relazionali. DAB si connette usando il driver Microsoft.Data.SqlClient e converte le richieste REST e GraphQL in query T-SQL. Sono supportate sia le istanze di SQL Server locali che il database SQL di Azure.

Quale formato di stringa di connessione viene usato da SQL Server?

DAB usa stringhe di connessione in stile ADO.NET per SQL Server. Una stringa tipica è simile a Server=localhost,1433;Database=mydb;User Id=sa;Password=yourpassword;TrustServerCertificate=True;. Impostare la stringa di connessione nel data-source.connection-string campo di dab-config.json o passarla tramite l'opzione --connection-string in dab init.

Quali modalità di autenticazione sono supportate?

DAB supporta l'autenticazione SQL (nome utente e password), l'autenticazione integrata di Windows e l'autenticazione di Microsoft Entra (in precedenza Azure Active Directory) per Azure SQL. Per usare l'autenticazione Entra, impostare Authentication=Active Directory Default o Active Directory Managed Identity nella stringa di connessione e verificare che all'identità gestita o all'entità servizio sia stato concesso l'accesso al database.

Problemi comuni

Impossibile connettersi al contenitore di SQL Server

Sintomo: DAB non viene avviato a causa di un errore di connessione, ad esempio A network-related or instance-specific error occurred.

Causa: La porta del contenitore di SQL Server non è mappata correttamente, il nome host non è corretto o il contenitore non è ancora pronto per accettare le connessioni.

Risoluzione: Verificare che il contenitore sia in esecuzione con docker ps. Verificare il mapping delle porte (impostazione predefinita 1433) e usare localhost,1433 nella stringa di connessione. Aggiungere TrustServerCertificate=True se si usa un certificato autofirmato. Se il contenitore è stato appena avviato, attendere alcuni secondi prima di inizializzare SQL Server prima di avviare DAB.

Accesso non riuscito per l'utente

Sintomo: I log DAB mostrano Login failed for user 'sa' o un errore di autenticazione simile.

Causa: Il nome utente, la password o la modalità di autenticazione nella stringa di connessione non corrisponde alla configurazione di SQL Server. SQL Server può anche essere in esecuzione in modalità solo autenticazione di Windows.

Risoluzione: Verificare che le credenziali corrispondano a quelle impostate al momento della creazione del contenitore o del server. Se si usa un contenitore, controllare la SA_PASSWORD variabile di ambiente. Per abilitare l'autenticazione SQL in un'istanza esistente, impostare la modalità di autenticazione del server su SQL Server e la modalità di autenticazione di Windows in SQL Server Management Studio in Sicurezza delle proprietà > del server.

Errore entità non trovata

Sintomo: Le richieste REST o GraphQL restituiscono un 404 errore dello schema o che indica che la tabella di origine dell'entità non esiste.

Causa: Il nome della tabella o il prefisso dello schema nel campo dell'entità source non corrisponde all'oggetto di database effettivo. I nomi delle tabelle di SQL Server non fanno distinzione tra maiuscole e minuscole per impostazione predefinita, ma il prefisso dello schema (ad esempio, dbo) deve essere presente se lo schema predefinito non viene usato.

Risoluzione: Controllare il valore source in dab-config.json. Usare un nome completo come dbo.Products. Eseguire SELECT * FROM INFORMATION_SCHEMA.TABLES nel database di destinazione per confermare il nome e lo schema della tabella.

Errore di firewall o di rete che si connette ad Azure SQL

Sintomo: Timeout delle connessioni al database SQL di Azure o restituiscono un erroreCannot open server ... requested by the login.

Causa: L'indirizzo IP del client non è consentito dalle regole del firewall di SQL Server di Azure o l'impostazione di accesso al servizio di Azure è disabilitata.

Risoluzione: Nel portale di Azure passare alla risorsa DI SQL Server e selezionare Rete. Aggiungere l'indirizzo IP client all'elenco di indirizzi consentiti del firewall oppure abilitare Consenti ai servizi e alle risorse di Azure di accedere a questo server se DAB è in esecuzione in Azure. Per l'autenticazione dell'identità gestita, verificare che l'identità sia stata aggiunta come utente del database con CREATE USER [identity-name] FROM EXTERNAL PROVIDER.

Le colonne JSON non vengono rilevate automaticamente

Sintomo: Una colonna con un tipo JSON o NVARCHAR(MAX) che archivia i dati JSON non viene esposta come oggetto strutturato nello schema DELL'API.

Causa: Il generatore di API dati non rileva e esegue il mapping automatico delle colonne JSON in Azure SQL. Si tratta di una limitazione nota rilevata nel problema GitHub #444.

Risoluzione: Al momento non esiste alcuna soluzione alternativa. La colonna verrà esposta come valore stringa normale. Seguire l'issue di GitHub per gli aggiornamenti su quando viene aggiunto il supporto per le colonne JSON native.