Toto je nadväzujúce praktické cvičenie, ktoré priamo nadväzuje na predchádzajúci lab. Uistite sa, že máte pripravenú Flask webovú aplikáciu.

Tento lab predstavuje:

  • Azure SQL Database (relačná databáza)
  • Reťazce pripojenia k databáze
  • Integrácia Flask s relačnou databázou
  • Základné CRUD operácie

Po skončení tohto labu budete vedieť:

  • Vytvoriť Azure SQL Database
  • Nakonfigurovať prístup cez firewall
  • Pripojiť Flask k relačnej databáze
  • Ukladať a načítavať dáta
  • Bezpečne používať premenné prostredia
  • Znovu nasadiť a otestovať aplikáciu s databázou

1 Vytvorenie Azure SQL Database

Relačná databáza ukladá dáta v tabuľkách. Používa riadky a stĺpce a vynucuje vzťahy medzi nimi.

Príklad tabuľky:

id meno
1 Alice
2 Bob

Azure SQL Database je spravovaná služba relačnej databázy. Je založená na Microsoft SQL Serveri.

Výhody:

  • Vysoká dostupnosť
  • Automatické zálohy
  • Bezpečný cloudový prístup
  • Škálovateľnosť

Vytvorte SQL Server príkazom:

az sql server create \
  --name <unique-sql-server-name> \
  --resource-group <resource-group> \
  --location westeurope \
  --admin-user sqladmin \
  --admin-password <StrongPassword123!>

Heslo musí spĺňať požiadavky Azure na zložitosť hesla.

Potom vytvorte SQL databázu:

az sql db create \
  --resource-group <resource-group> \
  --server <unique-sql-server-name> \
  --name studentdb \
  --service-objective Basic

Je potrebné nakonfigurovať firewall, aby umožnil prístup iným službám Azure:

az sql server firewall-rule create \
  --resource-group <resource-group> \
  --server <unique-sql-server-name> \
  --name AllowAzureServices \
  --start-ip-address 0.0.0.0 \
  --end-ip-address 0.0.0.0

Toto pravidlo umožňuje vašej Azure Web App pripojiť sa k databáze. Viac informácií o Azure Firewall nájdete v tomto návode.

2 Úprava Flask aplikácie

Po tom, čo je databáza pripravená a spustená, môžete upraviť webovú aplikáciu na používanie relačnej databázy:

V priečinku projektu nainštalujte závislosti pre databázu:

pip install pyodbc sqlalchemy

Poznámka: pyodbc vyžaduje aj inštaláciu Microsoft ODBC Driver for SQL Server na úrovni systému. Pozrite si oficiálny inštalačný návod pre váš operačný systém.

Aktualizujte závislosti:

pip freeze > requirements.txt

Pridajte kód, ktorý používa sqlalchemy na zápis a čítanie dát z databázy.

Databáza je konfigurovaná pomocou premennej prostredia.

Nahraďte existujúci súbor app.py týmto kódom:

from flask import Flask, request
from sqlalchemy import create_engine, text
import os

app = Flask(__name__)

# Získanie reťazca pripojenia z premennej prostredia
DATABASE_URL = os.environ.get("DATABASE_URL")

if not DATABASE_URL:
    raise RuntimeError("DATABASE_URL environment variable is not set")

engine = create_engine(DATABASE_URL)

@app.route("/")
def home():
    return "Database connected Flask App"

@app.route("/init")
def init_db():
    with engine.connect() as conn:
        conn.execute(text("""
            IF OBJECT_ID('students', 'U') IS NULL
            CREATE TABLE students (
                id INT PRIMARY KEY IDENTITY(1,1),
                name VARCHAR(100)
            )
        """))
        conn.commit()
    return "Table created!"

@app.route("/add/<name>")
def add_student(name):
    with engine.connect() as conn:
        conn.execute(text("INSERT INTO students (name) VALUES (:name)"), {"name": name})
        conn.commit()
    return f"Added {name}"

@app.route("/students")
def list_students():
    with engine.connect() as conn:
        result = conn.execute(text("SELECT name FROM students"))
        students = [row[0] for row in result]
    return "<br>".join(students)

if __name__ == "__main__":
    app.run()

3 Konfigurácia aplikácie na používanie reťazca pripojenia k databáze

Musíte zistiť reťazec pripojenia k vašej databáze.

Zvyčajne vyzerá takto:

mssql+pyodbc://username:password@server.database.windows.net:1433/studentdb?driver=ODBC+Driver+17+for+SQL+Server

Napríklad:

mssql+pyodbc://sqladmin:StrongPassword123!@myserver.database.windows.net:1433/studentdb?driver=ODBC+Driver+17+for+SQL+Server

TODO: Ako nájsť reťazec pripojenia k databáze? (Nápoveď: Azure Portal → SQL Database → Connection strings)

Po zistení reťazca pripojenia nastavte premennú prostredia:

az webapp config appsettings set \
  --name <webapp-name> \
  --resource-group <resource-group> \
  --settings DATABASE_URL="<your-connection-string>"

Toto bezpečne uloží prihlasovacie údaje v Azure.

Tip pre lokálne testovanie: Na testovanie pred nasadením nastavte premennú vo vašom shelli:

export DATABASE_URL="<your-connection-string>"

4 Opätovné nasadenie a testovanie aplikácie

az webapp up

Otvorte:

https://<webapp-name>.azurewebsites.net/init

Potom pridajte študentov:

https://<webapp-name>.azurewebsites.net/add/Alice
https://<webapp-name>.azurewebsites.net/add/Bob

Vypísanie zoznamu študentov:

https://<webapp-name>.azurewebsites.net/students

Mali by ste vidieť:

Alice
Bob

Môžete tiež sledovať logy aplikácie:

az webapp log tail \
  --name <webapp-name> \
  --resource-group <resource-group>

Upratanie

Nezabudnite odstrániť aplikáciu, aby ste ušetrili kredit.

az group delete --name <resource-group> --yes --no-wait

Bonusové úlohy

  1. Pridajte nový stĺpec email do tabuľky.
  2. Upravte /add tak, aby prijímal meno aj e-mail.
  3. Pridajte route na vymazanie študenta.
  4. Upravte aplikáciu tak, aby vracala JSON namiesto obyčajného textu.

Diskusia o bezpečnosti

Prečo prihlasovacie údaje NESMÚ byť pevne zapísané v kóde

Ak vložíte heslo alebo reťazec pripojenia priamo do zdrojového kódu, skončí vo verziovacom systéme (git) a bude viditeľný pre každého, kto má prístup k repozitáru — vrátane verejných repozitárov na GitHube. Raz zacommitované tajomstvá je veľmi ťažké úplne odstrániť.

Prečo sú premenné prostredia bezpečnejšie

Premenné prostredia sa nastavujú za behu v prostredí nasadenia a nikdy sa neukladajú do zdrojového kódu. Azure App Service umožňuje nastaviť ich ako Application Settings, ktoré sú šifrované v pokoji a injektované do aplikácie pri štarte. Tým sa oddeľujú tajomstvá od kódu.

Pravidlá firewallu

Pravidlo firewallu použité v tomto labe (0.0.0.00.0.0.0) povoľuje pripojenie všetkým službám Azure. Je to pohodlné, ale príliš široko otvorené. V produkcii by ste mali obmedziť prístup na konkrétne IP adresy alebo použiť Private Endpoints, aby ste zabránili neoprávnenému prístupu z iných Azure tenantov.

Princíp minimálnych oprávnení

Databázový používateľ, ktorého aplikácia používa, by mal mať iba oprávnenia, ktoré potrebuje — zvyčajne SELECT, INSERT, UPDATE a DELETE na konkrétnych tabuľkách. Nemalo by ísť o účet správcu servera (sqladmin). Tým sa obmedzí škoda, ak by prihlasovacie údaje boli niekedy kompromitované.

Previous Post Next Post

Pridanie relačnej databázy do Flask webovej aplikácie na Azure