La lliçó anterior va acabar amb una decisió escrita: les reserves i els vols de Contoso Airlines van a Azure SQL Database, perquè una plaça no es pot vendre dues vegades i això exigeix transaccions ACID i integritat referencial de debò. Avui s'executa aquesta decisió. Al final existiran el servidor lògic sql-contoso-reservas-pro i la base de dades db-reservas, amb el seu esquema, els seus índexs, la seva autenticació amb Microsoft Entra ID i el seu punt de connexió privat pe-sql-reservas dins de snet-datos, tancant el forat que el mòdul 2 va deixar dibuixat però buit. És el servei relacional més madur d'Azure i el que obliga a prendre més decisions —model de compra, nivell, redundància, autenticació i xarxa—, així que les veurem amb el criteri de quan triar cada cosa.
Avís de cost important: una base d'Ús general amb 2 vCore ronda els 370 € al mes i factura les 24 hores: no existeix l'estat «aturada» d'una màquina virtual. L'única manera de deixar de pagar còmput és el nivell sense servidor amb pausa automàtica o eliminar la base. Crític per a l'empresa multiplica el preu per tres. Per practicar, fes servir el nivell sense servidor a
rg-contoso-reservas-devi elimina el grup de recursos en acabar.
Contingut
- Què és, i per què el servidor no és una màquina
- Models de compra i nivells de servei
- Sense servidor, pausa automàtica i grups elàstics
- Desplegament complet amb Azure CLI
- Autenticació amb Microsoft Entra ID
- Punt de connexió privat i tancament de l'accés públic
- L'esquema de reserves i els seus índexs
- Còpies de seguretat i restauració a un moment donat
- Alta disponibilitat, rèpliques de lectura i commutació per error
- Seguretat de la dada: xifratge, emmascarament i auditoria
- Rendiment, escalat en calent i control de la despesa
- Errors Comuns i Consells
- Exercicis
- Conclusió
- Què és, i per què el servidor no és una màquina
Azure SQL Database és el motor de SQL Server ofert com a plataforma gestionada, amb una diferència conceptual important: no hi ha cap instància de SQL Server que sigui teva. Hi ha una base de dades amb el seu propi còmput, les seves còpies i el seu cicle de vida.
| Aspecte | Azure SQL Database | SQL Managed Instance | SQL Server en VM |
|---|---|---|---|
| Model | PaaS, base aïllada | PaaS, instància completa | IaaS |
| Compatibilitat amb SQL Server local | Alta, amb excepcions | Gairebé total | Total |
| SQL Agent i consultes entre bases | No | Sí | Sí |
| Sistema operatiu, pedaços i còpies | No accessible; automàtics | No accessible; automàtics | Teus del tot |
| Desplegament en xarxa virtual | Punt de connexió privat | Natiu, subxarxa delegada | Natiu |
| Cost d'entrada | Baix | Alt (centenars al mes) | Mitjà, més la feina |
| Tria'l per a | Aplicacions noves o modernitzades | Migracions «tal qual» | Requisits que impedeixen PaaS |
Contoso tria Azure SQL Database perquè db-reservas és un esquema nou: no arrossega treballs de l'Agent SQL ni consultes entre bases, així que Managed Instance seria pagar una compatibilitat que ningú no farà servir. I aquí hi ha el punt on gairebé tothom s'equivoca: sql-contoso-reservas-pro no és una màquina. És un servidor lògic, un contenidor administratiu sense CPU ni memòria pel qual no es paga res. Hi viuen el nom DNS <nom>.database.windows.net, els administradors de SQL i de Microsoft Entra ID, les regles de tallafoc de servidor, la configuració de xarxa (accés públic, TLS mínim, punts de connexió privats) i les directives d'auditoria heretables. A cada base de dades hi viuen el nivell de servei i el seu cost, l'esquema i les dades, els seus usuaris, la retenció i redundància de còpies i l'emmascarament dinàmic. Conseqüència pràctica: dues bases del mateix servidor poden costar coses molt diferents, però comparteixen DNS, tallafoc i administradors; per això Contoso separa servidors per entorn en lloc de barrejar producció i desenvolupament.
- Models de compra i nivells de servei
| DTU | vCore | |
|---|---|---|
| Què compres | Barreja opaca de CPU, memòria i E/S | vCores, memòria i emmagatzematge per separat, amb escalat independent |
| Transparència | Baixa: no saps quanta CPU tens | Alta: saps exactament què pagues |
| Azure Hybrid Benefit | No aplicable | Sí, fins a un 55 % d'estalvi |
| Sense servidor i Hiperescala | No | Sí |
| Recomanat per a | Bases petites i estables | Tota la resta; és el model actual de Microsoft |
Contoso tria vCore: necessita el nivell sense servidor per a desenvolupament i vol aplicar Azure Hybrid Benefit amb les seves llicències de SQL Server, cosa que es detalla a la lliçó 08-03. Dins de vCore hi ha tres nivells, els noms dels quals descriuen la seva arquitectura interna més bé del que sembla (en DTU els equivalents són Bàsic, Estàndard i Premium, amb el mateix ordre de preu):
| Nivell | Arquitectura | Latència d'E/S | Mida màxima | Quan triar-lo |
|---|---|---|---|---|
| Ús general | Còmput i emmagatzematge separats (remot) | 5-10 ms | 4 TB | El 80 % de les càrregues; millor relació preu/rendiment |
| Crític per a l'empresa | SSD local, clúster de 4 nodes | 1-2 ms | 4 TB | Latència molt baixa; inclou rèplica de lectura gratuïta |
| Hiperescala | Emmagatzematge distribuït en capes | Variable | 100 TB | Bases enormes o de creixement sense sostre previsible |
Decisió de Contoso: Ús general, 2 vCore, amb redundància de zona en producció. El volum és de 40 GB creixent 12 GB l'any, molt lluny del sostre, i 5-10 ms de latència són irrellevants dins d'una petició HTTP de 200 ms. Crític per a l'empresa triplicaria el cost per resoldre un problema que no existeix.
- Sense servidor, pausa automàtica i grups elàstics
El nivell sense servidor (a Ús general i Hiperescala) defineix un rang mínim i màxim de vCores, escala dins d'aquest rang i factura per segon consumit. Si la base passa un temps configurable sense connexions, es pausa i deixa de facturar còmput. Quatre matisos imprescindibles:
- L'emmagatzematge es paga sempre, estigui pausada o no; el que desapareix és la partida dominant.
- La primera connexió després de la pausa triga entre 30 i 60 segons i falla si el client no reintenta. L'aplicació necessita reintents amb espera exponencial, cosa obligatòria al núvol de totes maneres.
- El retard mínim de pausa és de 60 minuts: serveix entre jornades, no entre peticions.
- A plena ocupació resulta més car que l'aprovisionat. És per a càrrega intermitent.
Un grup elàstic és l'altra eina d'estalvi: un conjunt de vCores compartit per moltes bases els pics de les quals no coincideixen. Contoso el té previst per a un escenari concret: si cada agència associada acaba tenint la seva base aïllada —unes 40 bases petites, esporàdiques i en fusos horaris diferents—, el grup costaria una fracció de 40 bases aprovisionades. Regla: moltes bases petites amb pics no simultanis.
- Desplegament complet amb Azure CLI
Primer el servidor lògic, recordant que no crea cap màquina ni genera cost per si mateix. La contrasenya no s'escriu mai a l'script: es demana per teclat o es llegeix de Key Vault (04-03).
GRUP="rg-contoso-reservas-pro"; REGIO="westeurope"; BD="db-reservas"
SERVIDOR="sql-contoso-reservas-pro" # unic a tot Azure: forma el nom DNS
read -s -p "Contrasenya de l'administrador de SQL: " ADMIN_PWD; echo
az sql server create --name $SERVIDOR --resource-group $GRUP --location $REGIO \
--admin-user adminreservas --admin-password "$ADMIN_PWD" \
--minimal-tls-version 1.2 \ # rebutja connexions amb TLS antic
--enable-public-network false \ # acces public tancat DES DEL PRINCIPI
--tags entorno=produccion proyecto=contoso-reservas centro-coste=CC-1042 [email protected]Dos detalls separen un desplegament correcte d'un que caldrà arreglar: tancar l'accés públic abans que existeixi cap dada —obrir el just després és molt més fàcil que tancar el que ja funcionava— i posar les quatre etiquetes obligatòries des del minut zero, perquè sense centro-coste no es pot repartir la factura al mòdul 8.
# PRODUCCIO: carrega sostinguda 24x7, capacitat fixa i redundancia de zona
az sql db create -g $GRUP -s $SERVIDOR -n $BD \
--edition GeneralPurpose --family Gen5 --capacity 2 --compute-model Provisioned \
--zone-redundant true --backup-storage-redundancy Zone --max-size 128GB \
--tags entorno=produccion proyecto=contoso-reservas centro-coste=CC-1042 [email protected]
# DESENVOLUPAMENT: sense servidor, amb pausa automatica
az sql db create -g rg-contoso-reservas-dev -s sql-contoso-reservas-dev -n db-reservas \
--edition GeneralPurpose --family Gen5 \
--compute-model Serverless \ # facturacio per segon d'us
--min-capacity 0.5 --capacity 2 \ # mig vCore en repos, sostre de 2 als pics
--auto-pause-delay 60 \ # es pausa despres de 60 min sense connexions
--backup-storage-redundancy Local \ # LRS: en desenvolupament no es paga geo
--tags entorno=desarrollo proyecto=contoso-reservas centro-coste=CC-1042 [email protected]
# Amb --auto-pause-delay -1 es desactiva la pausa (p. ex. si hi ha proves nocturnes)
- Autenticació amb Microsoft Entra ID
L'usuari i contrasenya d'administrador és un mal mecanisme permanent: secret compartit, sense caducitat, sense MFA i, si es filtra, obre la base sencera. L'alternativa és designar un administrador de Microsoft Entra ID:
GRUP_ID=$(az ad group show --group "Contoso-DBA-Reservas" --query id -o tsv)
az sql server ad-admin create -g $GRUP --server $SERVIDOR \
--display-name "Contoso-DBA-Reservas" --object-id $GRUP_ID
az sql server ad-only-auth enable -g $GRUP --name $SERVIDOR # desactiva l'autenticacio localS'assigna un grup i no la Marta Ríos directament perquè les persones canvien de lloc de treball i els grups no. Amb ad-only-auth enable, l'usuari i contrasenya deixen de funcionar i tota l'autenticació passa per Entra ID, amb el seu MFA i el seu accés condicional. L'aplicació d'App Service s'hi connectarà amb la seva identitat administrada, sense cap contrasenya a la cadena de connexió: es munta a la lliçó 04-02, i els secrets restants es centralitzen a Key Vault (04-03).
- Punt de connexió privat i tancament de l'accés públic
Amb l'accés públic deshabilitat, la base només és accessible des de la xarxa. Es crea pe-sql-reservas a snet-datos (10.20.3.0/24) i, amb ell, la resolució de noms: l'aplicació continuarà demanant sql-contoso-reservas-pro.database.windows.net i aquest nom ha de resoldre a la IP privada.
SQL_ID=$(az sql server show -g $GRUP -n $SERVIDOR --query id -o tsv)
ZONA="privatelink.database.windows.net"
az network private-endpoint create --name pe-sql-reservas \
--resource-group rg-contoso-red-pro --location $REGIO \
--vnet-name vnet-contoso-pro --subnet snet-datos \
--private-connection-resource-id $SQL_ID \
--group-id sqlServer \ # subrecurs: el motor SQL
--connection-name conexion-sql-reservas
az network private-dns zone create -g rg-contoso-red-pro -n "$ZONA"
az network private-dns link vnet create -g rg-contoso-red-pro -n enlace-vnet-pro \
-z "$ZONA" -v vnet-contoso-pro --registration-enabled false
# Registra automaticament el registre A del punt de connexio a la zona
az network private-endpoint dns-zone-group create -g rg-contoso-red-pro \
--endpoint-name pe-sql-reservas -n grupo-zonas-sql -z "$ZONA" --zone-name sqlResultat: des de snet-app, el nom de sempre resol a una adreça 10.20.3.x. Des d'internet no resol a res útil i, encara que algú conegués la IP, el tallafoc rebutjaria la connexió. Per administrar des de fora hi ha tres camins i només dos són recomanables: la VPN de punt a lloc (02-06), una VM de gestió a snet-gestion a través de Bastion, o una regla de tallafoc temporal amb la teva IP, que és l'opció que acaba oblidada oberta durant mesos.
- L'esquema de reserves i els seus índexs
CREATE TABLE dbo.Vuelos (
VueloId INT IDENTITY(1,1) PRIMARY KEY,
Numero CHAR(6) NOT NULL, -- 'CT1042'
Origen CHAR(3) NOT NULL, -- codi IATA: 'BCN'
Destino CHAR(3) NOT NULL,
SalidaUtc DATETIME2(0) NOT NULL,
PlazasTotales SMALLINT NOT NULL,
PlazasLibres SMALLINT NOT NULL,
CONSTRAINT CK_Vuelos_Plazas CHECK (PlazasLibres BETWEEN 0 AND PlazasTotales)
);
CREATE TABLE dbo.Pasajeros (
PasajeroId INT IDENTITY(1,1) PRIMARY KEY,
Nombre NVARCHAR(80) NOT NULL,
Apellidos NVARCHAR(120) NOT NULL,
Correo NVARCHAR(200) NOT NULL UNIQUE,
TarjetaFidelidad CHAR(16) NULL -- dada sensible: s'emmascara
);
CREATE TABLE dbo.Reservas (
ReservaId INT IDENTITY(1,1) PRIMARY KEY,
Localizador CHAR(6) NOT NULL UNIQUE, -- 'X7K2QP'
VueloId INT NOT NULL REFERENCES dbo.Vuelos(VueloId),
PasajeroId INT NOT NULL REFERENCES dbo.Pasajeros(PasajeroId),
CreadaUtc DATETIME2(0) NOT NULL DEFAULT SYSUTCDATETIME(),
Estado VARCHAR(12) NOT NULL, -- 'confirmada', 'anulada'
ImporteEur DECIMAL(9,2) NOT NULL
);
-- Consulta mes frequent de la web: vols d'una ruta en una data
CREATE INDEX IX_Vuelos_Ruta_Salida ON dbo.Vuelos (Origen, Destino, SalidaUtc)
INCLUDE (Numero, PlazasLibres);
-- Tauler d'operacions: reserves d'un vol per estat
CREATE INDEX IX_Reservas_Vuelo_Estado ON dbo.Reservas (VueloId, Estado)
INCLUDE (Localizador, PasajeroId); -- per localitzador no cal: UNIQUE ja indexaLa restricció CHECK sobre PlazasLibres és la xarxa de seguretat que cap aplicació no es pot saltar: encara que el codi tingui un error de concurrència, el motor impedirà que les places baixin de zero, que és justament la garantia per la qual es va triar una base relacional. L'ordre de les columnes de l'índex no és decoratiu: el motor pot fer servir IX_Vuelos_Ruta_Salida filtrant per Origen, per Origen + Destino o pels tres, però no per buscar només per SalidaUtc. L'INCLUDE afegeix les columnes que la consulta retorna sense que formin part de la clau, de manera que es resol sense tornar a la taula: és un índex de cobertura. I l'avís contrari, que sempre s'oblida: cada índex es paga en espai i en velocitat d'escriptura. Tres índexs ben triats cobreixen el 95 % de la càrrega; quinze degraden la venda de bitllets.
- Còpies de seguretat i restauració a un moment donat
Azure SQL Database copia automàticament i sense configuració: completes setmanals, diferencials cada 12-24 hores i del registre de transaccions cada 5-10 minuts. D'aquí surt poder restaurar a qualsevol instant del període de retenció. Hi ha dues retencions: la de curt termini, d'1 a 35 dies (7 per defecte), que cobreix els errors operatius, i la de llarg termini, de fins a 10 anys en còpies setmanals, mensuals i anuals, per a obligacions legals i auditoria.
az sql db str-policy set -g $GRUP -s $SERVIDOR -n $BD --retention-days 35 --diffbackup-hours 12
# Copia anual conservada 7 anys per normativa fiscal
az sql db ltr-policy set -g $GRUP -s $SERVIDOR -n $BD \
--weekly-retention P4W --monthly-retention P12M --yearly-retention P7Y --week-of-year 1El dimarts a la tarda. El Diego Salas executa a les 16:40 un script que havia d'actualitzar 300 reserves antigues i, per un WHERE mal copiat, marca com a anulada tota la taula. A les 16:52 comencen les trucades d'atenció al client. La resposta correcta no és reparar les dades a mà:
az sql db restore -g $GRUP -s $SERVIDOR --name db-reservas \
--dest-name db-reservas-restaurada \
--time "2026-08-11T16:38:00Z" # SEMPRE en UTC, just ABANS de l'errorTres coses que cal gravar: la restauració crea sempre una base nova i mai no sobreescriu l'original, cosa que permet comparar abans de decidir; l'hora és UTC, i a l'agost Espanya va dues hores per davant, així que equivocar-se aquí és restaurar a un punt inútil; i la base restaurada també factura, així que es recuperen les files, s'intercanvien noms i s'elimina el mateix dia.
La restauració geogràfica és diferent: fa servir les còpies replicades a North Europe i serveix quan tot West Europe està caigut. El seu objectiu de punt de recuperació arriba a una hora, així que pot perdre els últims minuts, i exigeix haver triat redundància de còpies Geo o GeoZone en crear la base.
- Alta disponibilitat, rèpliques de lectura i commutació per error
Dins de la regió, l'alta disponibilitat ve inclosa: amb --zone-redundant true el còmput té rèpliques en diverses zones i l'SLA és del 99,99 %. Crític per a l'empresa hi afegeix un clúster de quatre nodes i una rèplica de lectura gratuïta, accessible amb ApplicationIntent=ReadOnly a la cadena de connexió: la manera neta que els informes del tauler d'operacions no competeixin amb la venda. Entre regions es fa servir un grup de commutació per error, que replica la base i aporta un nom DNS estable que sempre apunta al primari:
az sql failover-group create --name fg-contoso-reservas -g $GRUP --server $SERVIDOR \
--partner-server sql-contoso-reservas-nor --partner-resource-group $GRUP \
--add-db $BD --failover-policy Automatic --grace-period 1L'aplicació es connecta a fg-contoso-reservas.database.windows.net sense saber quina regió està activa. Coherentment amb la decisió de cost del mòdul 1, no és actiu-actiu: North Europe només serveix lectures i ascendeix si West Europe cau. Tot i així duplica el cost de còmput, perquè la rèplica és una base completa que factura; Contoso ho valorarà amb la resta del pla de continuïtat a la lliçó 07-05.
- Seguretat de la dada: xifratge, emmascarament i auditoria
Quatre capes complementàries, de menys a més esforç:
- Xifratge de dades transparent (TDE): xifra fitxers de dades i còpies en repòs. Activat per defecte. Protegeix del robatori del mitjà físic, no d'un usuari amb permisos.
- Always Encrypted: xifra columnes concretes al client, amb una clau que el motor no té; ni un administrador no les pot llegir. El preu és alt: sobre una columna amb xifratge aleatori no es pot filtrar ni ordenar al servidor. Contoso ho reserva per a les dades de pagament, amb la clau a Key Vault (04-03).
- Emmascarament dinàmic de dades: no xifra; amaga el valor al resultat segons qui consulta.
- Auditoria: registra qui va executar què i quan, amb destinació a Log Analytics (mòdul 7).
-- El personal de terra veura 'XXXX-XXXX-XXXX-4417' en lloc del numero complet
ALTER TABLE dbo.Pasajeros ALTER COLUMN TarjetaFidelidad
ADD MASKED WITH (FUNCTION = 'partial(0, "XXXX-XXXX-XXXX-", 4)');
ALTER TABLE dbo.Pasajeros ALTER COLUMN Correo
ADD MASKED WITH (FUNCTION = 'email()'); -- m***@exemple.comL'emmascarament no s'aplica als administradors ni a qui tingui concedit UNMASK, i no substitueix els permisos: si algú no ha de veure una columna, el correcte és no donar-li accés. L'auditoria s'activa amb az sql server audit-policy update -g $GRUP -n $SERVIDOR --state Enabled --log-analytics-target-state Enabled --log-analytics-workspace-resource-id $WORKSPACE_ID, enviant cada esdeveniment a l'àrea de treball que s'explotarà amb KQL a la lliçó 07-02.
- Rendiment, escalat en calent i control de la despesa
El magatzem de consultes està activat per defecte i desa consultes, plans i estadístiques d'execució. És el que converteix «la web va lenta des d'ahir» en un diagnòstic concret:
SELECT TOP 5 qt.query_sql_text,
SUM(rs.count_executions) AS execucions,
SUM(rs.count_executions * rs.avg_cpu_time)/1000.0 AS cpu_total_ms
FROM sys.query_store_query_text qt
JOIN sys.query_store_query q ON q.query_text_id = qt.query_text_id
JOIN sys.query_store_plan p ON p.query_id = q.query_id
JOIN sys.query_store_runtime_stats rs ON rs.plan_id = p.plan_id
GROUP BY qt.query_sql_text
ORDER BY cpu_total_ms DESC; -- CPU acumulada, no duracio mitjanaOrdenar per CPU total (execucions × temps mitjà) i no per durada és clau: una consulta de 8 ms llançada 400.000 vegades al dia fa molt més mal que un informe de 4 segons que s'executa una vegada. Al portal, Query Performance Insight presenta el mateix en gràfics i és el primer lloc on anar davant d'una queixa de lentitud; l'ajust automàtic pot a més crear índexs que falten i revertir plans que van empitjorar. Escalar, per la seva banda, és una sola ordre i s'aplica en calent, amb uns segons de desconnexió al final que l'aplicació absorbeix si reintenta:
az sql db update -g $GRUP -s $SERVIDOR -n $BD --capacity 4 # campanya d'estiu
az sql db update -g $GRUP -s $SERVIDOR -n $BD --capacity 2 # tornada a temporada baixa
# Control de la despesa: cap base de prova no ha de quedar facturant
az sql db list -g $GRUP -s $SERVIDOR --query "[].{n:name, nivell:sku.name, vcores:sku.capacity}" -o table
az sql db delete -g $GRUP -s $SERVIDOR -n db-reservas-restaurada --yes
az group delete --name rg-contoso-reservas-dev --yes --no-wait # laboratoriAquest escalat s'automatitza per calendari amb Azure Automation (07-04), igual que el perfil apertura-temporada-verano del mòdul 2.
Errors Comuns i Consells
- Creure que el servidor lògic costa diners o que és una màquina. No costa res i no té CPU: facturen les bases.
- Restaurar amb l'hora local. Les marques de temps són UTC; a l'estiu, dues hores de desfasament poden significar recuperar les dades ja destrossades.
- Oblidar la base restaurada. Factura igual que l'original. Esborra-la el mateix dia.
- Deixar activat «Permetre serveis d'Azure». No vol dir «els meus serveis»: vol dir qualsevol recurs d'Azure, inclosa la subscripció d'un tercer. Amb punt de connexió privat no cal.
- Posar Crític per a l'empresa «per si de cas». Triplica el cost. Puja-hi quan el magatzem de consultes demostri que l'E/S és el coll d'ampolla, i no abans.
- Crear un índex per cada consulta lenta, o confondre emmascarament amb xifratge. Revisa abans si un índex existent pot cobrir la consulta canviant l'ordre de columnes o l'
INCLUDE; i recorda que l'emmascarament és cosmètic: qui és administrador ho veu tot. - Consell: activa la retenció a llarg termini abans que l'exigeixi una auditoria; no s'aplica retroactivament a còpies ja caducades.
- Consell: implementa sempre reintents amb espera exponencial. En PaaS, les desconnexions breus durant manteniment o escalat són normals, no una fallada.
Exercicis
Exercici 1: dimensionar dos entorns
db-reservas en producció té 40 GB i 300 transaccions per segon en hora punta, disponible 24×7; en desenvolupament, 2 GB usats de dilluns a divendres de 9 a 18 h.
- Tria model de compra, nivell i model de còmput per a cada entorn, justificant cada decisió.
- Quina redundància de còpies posaries a cadascun i per què?
Exercici 2: recuperar d'un esborrat accidental
Un dimecres a les 09:15 hora peninsular (estiu), un script elimina 12.000 files de dbo.Reservas. Es detecta a les 11:30.
- Quina ordre executaries i amb quina marca de temps exacta?
- Per què no es restaura directament sobre
db-reservas? - Què faries després amb la base restaurada?
Exercici 3: tancar la superfície d'exposició
Audites sql-contoso-reservas-pro i hi trobes: accés públic habilitat, una regla de tallafoc 0.0.0.0 - 255.255.255.255, la casella de serveis d'Azure activada, autenticació només per usuari i contrasenya, i auditoria desactivada.
- Ordena les correccions de major a menor risc.
- Escriu les ordres de les tres primeres.
- Què cal verificar abans de deshabilitar l'accés públic per no deixar la web sense base de dades?
Solucions
Solució 1:
- Tots dos en vCore, que habilita sense servidor i Azure Hybrid Benefit. Producció: Ús general, 2 vCore Gen5, aprovisionat i amb redundància de zona, perquè la càrrega és sostinguda i 24×7 i 300 transaccions per segon amb 5-10 ms de latència hi caben de sobres. Desenvolupament: Ús general sense servidor, de 0,5 a 2 vCore amb pausa als 60 minuts, perquè es fa servir unes 45 h de les 168 de la setmana: elimina al voltant del 70 % de la partida de còmput sense canviar la manera de treballar de l'equip.
- Producció,
Zonecom a mínim, iGeoZonesi es vol poder fer restauració geogràfica, que n'és requisit. Desenvolupament,Local: les dades són sintètiques i regenerables, així que la redundància geogràfica és despesa pura.
Solució 2:
- Les 09:15 peninsulars d'estiu són les 07:15 UTC; es pren un marge de seguretat cap enrere:
az sql db restore -g rg-contoso-reservas-pro -s sql-contoso-reservas-pro \
--name db-reservas --dest-name db-reservas-restaurada --time "2026-08-12T07:13:00Z"- Perquè no es pot: la restauració a un moment donat crea sempre una base nova. I és una virtut, no una limitació: durant aquestes dues hores i quart s'han creat reserves legítimes que es perdrien en substituir la base sencera. El correcte és extreure de la restaurada només les files que ja no existeixen (
WHERE NOT EXISTSsobreReservaId) i inserir-les a l'original ambSET IDENTITY_INSERT ON; com que a Azure SQL Database no hi ha consultes entre bases, es fa exportant ambbcpo amb una canalització de dades. - Eliminar-la el mateix dia amb
az sql db delete, després de verificar els recomptes. Si s'oblida, factura cada hora com una base més.
Solució 3:
- Ordre per risc: (a) la regla
0.0.0.0-255.255.255.255, que exposa la base al món sencer; (b) l'accés públic habilitat; (c) la casella de serveis d'Azure, que admet connexions des de subscripcions alienes; (d) l'autenticació local sense Entra ID ni MFA; (e) l'auditoria desactivada, que no obre cap risc però impedeix investigar el que ha passat. - Ordres:
az sql server firewall-rule delete -g $GRUP -s $SERVIDOR -n AllowAll
az sql server update -g $GRUP -n $SERVIDOR --enable-public-network false
az sql server firewall-rule delete -g $GRUP -s $SERVIDOR -n AllowAllWindowsAzureIps- Que
pe-sql-reservasestigui aprovisionat i aprovat, que la zonaprivatelink.database.windows.netestigui vinculada avnet-contoso-pro, i que l'aplicació d'App Service tingui activada la integració amb la xarxa virtual (02-05); sense això resoldria el nom públic i perdria la connexió tan bon punt es tanqui l'accés.
Conclusió
db-reservas ja existeix de debò. Saps que sql-contoso-reservas-pro és un servidor lògic sense CPU ni cost, que agrupa DNS, tallafoc i administradors mentre la despesa viu a cada base. Has triat amb criteri entre DTU i vCore i entre Ús general, Crític per a l'empresa i Hiperescala, has aplicat el nivell sense servidor amb pausa automàtica a l'entorn de desenvolupament i coneixes l'escenari dels grups elàstics. Has desplegat servidor i bases amb Azure CLI, amb les quatre etiquetes obligatòries i l'accés públic tancat des de la primera ordre, has designat un administrador de Microsoft Entra ID sobre un grup i activat l'autenticació exclusiva d'Entra, i has connectat la base a snet-datos mitjançant pe-sql-reservas i la seva zona DNS privada, de manera que el nom de sempre resol a una IP 10.20.3.x.
A més has creat l'esquema de vols, passatgers i reserves amb una restricció CHECK que impedeix vendre places inexistents i dos índexs de cobertura justificats per consultes reals; has recuperat la plataforma de la migració fallida del dimarts amb una restauració a un moment donat en UTC; i has cobert la restauració geogràfica, l'alta disponibilitat amb redundància de zona, les rèpliques de lectura, el grup de commutació per error a North Europe amb el seu nom DNS estable i el seu cost duplicat, les quatre capes de seguretat de la dada —TDE, Always Encrypted, emmascarament de la targeta de fidelització i auditoria—, el magatzem de consultes i l'escalat en calent.
Però el motor relacional no ho resol tot. El catàleg de tarifes de Contoso té condicions diferents per a cada tipus de bitllet, canvia de forma cada temporada i es consulta milers de vegades per minut des de la web i des de l'API de Disponibilitat, amb clients a tot Europa i Amèrica. Normalitzar-lo significaria vint taules i consultes amb deu unions per respondre una cosa tan simple com «dona'm aquesta tarifa completa». A la lliçó següent, Azure Cosmos DB, veuràs l'altre extrem del mapa de dades: documents JSON, distribució global, la clau de partició com la decisió més irreversible del disseny, les unitats de sol·licitud que mesuren el que costa cada consulta i cinc nivells de consistència per triar, dada a dada, entre exactitud i latència.
Curs d'Azure
Mòdul 1: Introducció a Azure
- Què és Azure?
- Models de servei, regions i zones de disponibilitat
- Crear i configurar el teu compte d'Azure
- Recorregut pel portal d'Azure
- Azure Resource Manager: subscripcions, grups de recursos i etiquetes
- Azure CLI, PowerShell i Cloud Shell
Mòdul 2: Serveis principals d'Azure
- Màquines virtuals d'Azure
- Escalat i alta disponibilitat del còmput
- Azure App Service
- Azure Storage: blobs, fitxers, cues i taules
- Xarxes a Azure: xarxes virtuals, subxarxes i NSG
- Connectivitat híbrida i lliurament global
Mòdul 3: Bases de dades d'Azure
- Triar el servei de dades adequat
- Azure SQL Database
- Azure Cosmos DB
- Azure Database for MySQL
- Azure Database for PostgreSQL
- Analítica de dades: Data Lake, Data Factory i Synapse
Mòdul 4: Seguretat a Azure
- Microsoft Entra ID i gestió d'identitats
- RBAC i identitats administrades
- Azure Key Vault
- Protecció DDoS i tallafoc d'aplicacions web
- Microsoft Defender for Cloud
- Governança i compliment amb Azure Policy
Mòdul 5: Azure DevOps
- Introducció a Azure DevOps
- Azure Repos
- Azure Pipelines: integració contínua
- Desplegament continu amb entorns i aprovacions
- Azure Artifacts
- Infraestructura com a codi amb Bicep
Mòdul 6: Serveis avançats d'Azure
- Contenidors a Azure: Container Registry i Container Apps
- Azure Kubernetes Service (AKS)
- Azure Functions
- Azure Logic Apps
- Missatgeria i esdeveniments: Service Bus, Event Grid i Event Hubs
- Serveis d'IA d'Azure
Mòdul 7: Monitoratge i gestió
- Azure Monitor: mètriques, alertes i taulers
- Log Analytics i consultes KQL
- Application Insights
- Azure Automation i runbooks
- Còpies de seguretat i recuperació davant desastres
Mòdul 8: Gestió i optimització de costos
- Calculadora de preus i estimació de costos
- Azure Cost Management: anàlisi, pressupostos i alertes
- Reserves, plans d'estalvi i Azure Hybrid Benefit
- Azure Advisor
- Estratègies d'optimització i cultura FinOps
