Migrera till Innovate Summit:
Lär dig hur migrering och modernisering till Azure kan öka företagets prestanda, motståndskraft och säkerhet, så att du kan använda AI fullt ut.Registrera dig nu
Den här webbläsaren stöds inte längre.
Uppgradera till Microsoft Edge och dra nytta av de senaste funktionerna och säkerhetsuppdateringarna, samt teknisk support.
JDBC är java-standard-API:et för att ansluta till traditionella relationsdatabaser.
I den här artikeln innehåller vi två autentiseringsmetoder: Microsoft Entra-autentisering och MySQL-autentisering. Fliken Lösenordslös visar Microsoft Entra-autentiseringen och fliken Lösenord visar MySQL-autentiseringen.
Microsoft Entra-autentisering är en mekanism för att ansluta till Azure Database for MySQL – flexibel server med hjälp av identiteter som definierats i Microsoft Entra-ID. Med Microsoft Entra-autentisering kan du hantera databasanvändares identiteter och andra Microsoft-tjänster på en central plats, vilket förenklar behörighetshanteringen.
MySQL-autentisering använder konton som lagras i MySQL. Om du väljer att använda lösenord som autentiseringsuppgifter för kontona lagras dessa autentiseringsuppgifter i user tabellen. Eftersom dessa lösenord lagras i MySQL måste du hantera rotationen av lösenorden själv.
export AZ_RESOURCE_GROUP=database-workshop
export AZ_DATABASE_NAME=<YOUR_DATABASE_NAME>
export AZ_LOCATION=<YOUR_AZURE_REGION>
export AZ_MYSQL_AD_NON_ADMIN_USERNAME=demo-non-admin
export AZ_USER_IDENTITY_NAME=<YOUR_USER_ASSIGNED_MANAGED_IDENTITY_NAME>
export CURRENT_USERNAME=$(az ad signed-in-user show --query userPrincipalName -o tsv)
export CURRENT_USER_OBJECTID=$(az ad signed-in-user show --query id -o tsv)
Ersätt platshållarna med följande värden, som används i hela artikeln:
<YOUR_DATABASE_NAME>: Namnet på din Azure Database for MySQL – flexibel serverinstans, som ska vara unik i Hela Azure.
<YOUR_AZURE_REGION>: Den Azure-region som du ska använda. Du kan använda eastus som standard, men vi rekommenderar att du konfigurerar den region som är närmast dig. Du kan se den fullständiga listan över tillgängliga regioner genom att ange az account list-locations.
<YOUR_USER_ASSIGNED_MANAGED_IDENTITY_NAME>: Namnet på den användartilldelade hanterade identitetsservern, som ska vara unik i Hela Azure.
Ersätt platshållarna med följande värden, som används i hela artikeln:
<YOUR_DATABASE_NAME>: Namnet på din Azure Database for MySQL – flexibel serverinstans, som ska vara unik i Hela Azure.
<YOUR_AZURE_REGION>: Den Azure-region som du ska använda. Du kan använda eastus som standard, men vi rekommenderar att du konfigurerar den region som är närmast dig. Du kan se den fullständiga listan över tillgängliga regioner genom att ange az account list-locations.
<YOUR_MYSQL_ADMIN_PASSWORD> och <YOUR_MYSQL_NON_ADMIN_PASSWORD>: Lösenordet för MySQL-databasservern. Lösenordet måste innehålla minst åtta tecken. Tecknen ska vara från tre av följande kategorier: engelska versaler, engelska gemener, siffror (0–9) och icke-alfanumeriska tecken (!, $, #, %och så vidare).
Skapa sedan en resursgrupp:
Azure CLI
az group create \
--name$AZ_RESOURCE_GROUP \
--location$AZ_LOCATION \
--output tsv
Skapa en Azure Database for MySQL-instans
Skapa Azure Database for MySQL – flexibel serverinstans och konfigurera en administratörsanvändare
Det första du skapar är en hanterad Azure Database for MySQL – flexibel serverinstans.
Om du använder Azure CLI kör du följande kommando för att se till att det har tillräcklig behörighet:
Azure CLI
az login --scope https://graph.microsoft.com/.default
Kör följande kommando för att skapa servern:
Azure CLI
az mysql flexible-server create \
--resource-group$AZ_RESOURCE_GROUP \
--name$AZ_DATABASE_NAME \
--location$AZ_LOCATION \
--yes \
--output tsv
Kör följande kommando för att skapa en användartilldelad identitet för tilldelning:
Azure CLI
az identity create \
--resource-group$AZ_RESOURCE_GROUP \
--name$AZ_USER_IDENTITY_NAME
Viktigt
När du har skapat den användartilldelade identiteten ber du en användare med minst rollen Privilegierad rolladministratör att bevilja följande behörigheter för den här användartilldelade hanterade identiteten: User.Read.All, GroupMember.Read.Alloch Application.Read.ALL. Alternativt kan du ge den användartilldelade hanterade identiteten rollen Katalogläsare . Mer information finns i avsnittet Behörigheter för Microsoft Entra-autentisering för Azure Database for MySQL – flexibel server.
Kör följande kommando för att tilldela identiteten till Azure Database for MySQL – flexibel server för att skapa Microsoft Entra-administratör:
Azure CLI
az mysql flexible-server identity assign \
--resource-group$AZ_RESOURCE_GROUP \
--server-name$AZ_DATABASE_NAME \
--identity$AZ_USER_IDENTITY_NAME
Kör följande kommando för att ange Microsoft Entra-administratörsanvändaren:
Azure CLI
az mysql flexible-server ad-admin create \
--resource-group$AZ_RESOURCE_GROUP \
--server-name$AZ_DATABASE_NAME \
--display-name$CURRENT_USERNAME \
--object-id$CURRENT_USER_OBJECTID \
--identity$AZ_USER_IDENTITY_NAME
Viktigt
När du ställer in administratören läggs en ny användare till i Azure Database for MySQL – flexibel serverinstans med fullständig administratörsbehörighet. Endast en Microsoft Entra-administratör kan skapas per Azure Database for MySQL – flexibel serverinstans och val av en annan skriver över den befintliga Microsoft Entra-administratören som konfigurerats för servern.
Det här kommandot skapar en liten Azure Database for MySQL – flexibel serverinstans och anger Active Directory-administratören till den inloggade användaren.
Azure CLI
az mysql flexible-server create \
--resource-group$AZ_RESOURCE_GROUP \
--name$AZ_DATABASE_NAME \
--location$AZ_LOCATION \
--admin-user$AZ_MYSQL_ADMIN_USERNAME \
--admin-password$AZ_MYSQL_ADMIN_PASSWORD \
--yes \
--output tsv
Det här kommandot skapar en liten Azure Database for MySQL – flexibel serverinstans.
Azure Database for MySQL – flexibel server-instans som du skapade har en tom databas med namnet flexibleserverdb.
Konfigurera en brandväggsregel för din Azure Database for MySQL – flexibel serverinstans
Azure Database for MySQL – flexibel server-instanser skyddas som standard. Databaserna har en brandvägg som inte tillåter inkommande anslutningar.
Du kan hoppa över det här steget om du använder Bash eftersom flexible-server create kommandot redan har identifierat din lokala IP-adress och angett den på MySQL-servern.
Om du ansluter till din Azure Database for MySQL Flexible Server-instans från Windows-undersystem för Linux (WSL) på en Windows-dator måste du lägga till WSL-värd-ID:t i brandväggen. Hämta IP-adressen för värddatorn genom att köra följande kommando i WSL:
Bash
sudo cat /etc/resolv.conf
Kopiera IP-adressen efter termen nameserveroch använd sedan följande kommando för att ange en miljövariabel för WSL IP-adressen:
Bash
AZ_WSL_IP_ADDRESS=<the-copied-IP-address>
Använd sedan följande kommando för att öppna serverns brandvägg till din WSL-baserade app:
Azure CLI
az mysql flexible-server firewall-rule create \
--resource-group$AZ_RESOURCE_GROUP \
--name$AZ_DATABASE_NAME \
--start-ip-address$AZ_WSL_IP_ADDRESS \
--end-ip-address$AZ_WSL_IP_ADDRESS \
--rule-name allowiprange \
--output tsv
Konfigurera en MySQL-databas
Skapa en ny databas med demo namnet med hjälp av följande kommando:
Azure CLI
az mysql flexible-server db create \
--resource-group$AZ_RESOURCE_GROUP \
--database-name demo \
--server-name$AZ_DATABASE_NAME \
--output tsv
Skapa en MySQL-användare som inte är administratör och bevilja behörighet
Skapa sedan en icke-administratörsanvändare och bevilja alla behörigheter för databasen till den demo .
Skapa ett SQL-skript med namnet create_ad_user.sql för att skapa en icke-administratörsanvändare. Lägg till följande innehåll och spara det lokalt:
Bash
export AZ_MYSQL_AD_NON_ADMIN_USERID=$(az ad signed-in-user show --query id --output tsv)
cat << EOF > create_ad_user.sql
SET aad_auth_validate_oids_in_tenant = OFF;
CREATE AADUSER '$AZ_MYSQL_AD_NON_ADMIN_USERNAME' IDENTIFIED BY '$AZ_MYSQL_AD_NON_ADMIN_USERID';
GRANT ALL PRIVILEGES ON demo.* TO '$AZ_MYSQL_AD_NON_ADMIN_USERNAME'@'%';
FLUSH privileges;
EOF
Använd sedan följande kommando för att köra SQL-skriptet för att skapa microsoft Entra-användaren som inte är administratör:
Använd nu följande kommando för att ta bort den tillfälliga SQL-skriptfilen:
Bash
rm create_ad_user.sql
Skapa ett SQL-skript med namnet create_user.sql för att skapa en icke-administratörsanvändare. Lägg till följande innehåll och spara det lokalt:
Bash
cat << EOF > create_user.sql
CREATE USER '$AZ_MYSQL_NON_ADMIN_USERNAME'@'%' IDENTIFIED BY '$AZ_MYSQL_NON_ADMIN_PASSWORD';
GRANT ALL PRIVILEGES ON demo.* TO '$AZ_MYSQL_NON_ADMIN_USERNAME'@'%';
FLUSH PRIVILEGES;
EOF
Använd sedan följande kommando för att köra SQL-skriptet för att skapa microsoft Entra-användaren som inte är administratör:
Bash
mysql -h $AZ_DATABASE_NAME.mysql.database.azure.com --user $AZ_MYSQL_ADMIN_USERNAME --enable-cleartext-plugin --password=$AZ_MYSQL_ADMIN_PASSWORD < create_user.sql
Använd nu följande kommando för att ta bort den tillfälliga SQL-skriptfilen:
Bash
rm create_user.sql
Skapa ett nytt Java-projekt
Använd din favorit-IDE, skapa ett nytt Java-projekt och lägg till en pom.xml fil i rotkatalogen:
Om du använder klassen MysqlConnectionPoolDataSource som datakälla i ditt program tar du bort "defaultAuthenticationPlugin=com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin" i url:en.
Konfigurationsegenskapen url har ?serverTimezone=UTC lagts till för att instruera JDBC-drivrutinen att använda UTC-datumformatet (eller Coordinated Universal Time) när du ansluter till databasen. Annars skulle Java-servern inte använda samma datumformat som databasen, vilket skulle resultera i ett fel.
Skapa en SQL-fil för att generera databasschemat
Du använder en src/main/resources/schema.sql-fil för att skapa ett databasschema. Skapa filen med följande innehåll:
Den här Java-koden använder database.properties och de schema.sql filer som du skapade tidigare, för att ansluta till Azure Database for MySQL – flexibel serverinstans och skapa ett schema som lagrar dina data.
I den här filen kan du se att vi har kommenterat metoder för att infoga, läsa, uppdatera och ta bort data: du kodar dessa metoder i resten av den här artikeln och du kommer att kunna avkommenteras en efter varandra.
Anteckning
Databasautentiseringsuppgifterna lagras i användar- och lösenordsegenskaperna för filen database.properties. Dessa autentiseringsuppgifter används när du kör DriverManager.getConnection(properties.getProperty("url"), properties);, eftersom egenskapsfilen skickas som ett argument.
Anteckning
Raden AbandonedConnectionCleanupThread.uncheckedShutdown(); i slutet är ett MySQL-drivrutinsspecifikt kommando för att förstöra en intern tråd när programmet stängs av.
Det kan ignoreras på ett säkert sätt.
Nu kan du köra den här huvudklassen med ditt favoritverktyg:
Med din IDE bör du kunna högerklicka på klassen DemoApplication och köra den.
Med Maven kan du köra programmet genom att köra: mvn exec:java -Dexec.mainClass="com.example.demo.DemoApplication".
Programmet bör ansluta till Azure Database for MySQL – flexibel serverinstans, skapa ett databasschema och sedan stänga anslutningen, som du bör se i konsolloggarna:
Läs sedan de data som tidigare infogats för att verifiera att koden fungerar korrekt.
I filen src/main/java/DemoApplication.java lägger du efter insertData metoden till följande metod för att läsa data från databasen:
Windows Command Prompt
private static Todo readData(Connection connection) throws SQLException {
log.info("Read data");
PreparedStatement readStatement = connection.prepareStatement("SELECT * FROM todo;");
ResultSet resultSet = readStatement.executeQuery();
if (!resultSet.next()) {
log.info("There is no data in the database!");
return null;
}
Todo todo = new Todo();
todo.setId(resultSet.getLong("id"));
todo.setDescription(resultSet.getString("description"));
todo.setDetails(resultSet.getString("details"));
todo.setDone(resultSet.getBoolean("done"));
log.info("Data read from the database: " + todo.toString());
return todo;
}
Du kan nu avkommentara följande rad i main metoden:
Java
todo = readData(connection);
Körning av huvudklassen bör nu generera följande utdata:
Output
[INFO ] Loading application properties
[INFO ] Connecting to the database
[INFO ] Database connection test: demo
[INFO ] Create database schema
[INFO ] Insert data
[INFO ] Read data
[INFO ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have set up JDBC correctly!', done=true}
[INFO ] Closing database connection
Uppdatera data i Azure Database for MySQL – flexibel server
Uppdatera sedan de data som du infogade tidigare.
I filen src/main/java/DemoApplication.java lägger du efter readData metoden till följande metod för att uppdatera data i databasen:
Windows Command Prompt
private static void updateData(Todo todo, Connection connection) throws SQLException {
log.info("Update data");
PreparedStatement updateStatement = connection
.prepareStatement("UPDATE todo SET description = ?, details = ?, done = ? WHERE id = ?;");
updateStatement.setString(1, todo.getDescription());
updateStatement.setString(2, todo.getDetails());
updateStatement.setBoolean(3, todo.isDone());
updateStatement.setLong(4, todo.getId());
updateStatement.executeUpdate();
readData(connection);
}
Du kan nu avkommenta de två följande raderna main i metoden:
SQL
todo.setDetails("congratulations, you have updated data!");
updateData(todo, connection);
Körning av huvudklassen bör nu generera följande utdata:
Output
[INFO ] Loading application properties
[INFO ] Connecting to the database
[INFO ] Database connection test: demo
[INFO ] Create database schema
[INFO ] Insert data
[INFO ] Read data
[INFO ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have set up JDBC correctly!', done=true}
[INFO ] Update data
[INFO ] Read data
[INFO ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have updated data!', done=true}
[INFO ] Closing database connection
Ta bort data i Azure Database for MySQL – flexibel server
Ta slutligen bort de data som du infogade tidigare.
I filen src/main/java/DemoApplication.java lägger du efter updateData metoden till följande metod för att ta bort data i databasen:
Windows Command Prompt
private static void deleteData(Todo todo, Connection connection) throws SQLException {
log.info("Delete data");
PreparedStatement deleteStatement = connection.prepareStatement("DELETE FROM todo WHERE id = ?;");
deleteStatement.setLong(1, todo.getId());
deleteStatement.executeUpdate();
readData(connection);
}
Du kan nu avkommentara följande rad i main metoden:
SQL
deleteData(todo, connection);
Körning av huvudklassen bör nu generera följande utdata:
Output
[INFO ] Loading application properties
[INFO ] Connecting to the database
[INFO ] Database connection test: demo
[INFO ] Create database schema
[INFO ] Insert data
[INFO ] Read data
[INFO ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have set up JDBC correctly!', done=true}
[INFO ] Update data
[INFO ] Read data
[INFO ] Data read from the database: Todo{id=1, description='configuration', details='congratulations, you have updated data!', done=true}
[INFO ] Delete data
[INFO ] Read data
[INFO ] There is no data in the database!
[INFO ] Closing database connection
Rensa resurser
Grattis! Du har skapat ett Java-program som använder JDBC för att lagra och hämta data från Azure Database for MySQL – flexibel server.
Om du vill rensa alla resurser som används under den här snabbstarten tar du bort resursgruppen med följande kommando:
Azure CLI
az group delete \
--name$AZ_RESOURCE_GROUP \
--yes
Administrera en SQL Server-databasinfrastruktur för molndatabaser, lokala databaser och hybridrelationsdatabaser med hjälp av microsoft PaaS-relationsdatabaserbjudanden.
Den här snabbstarten innehåller flera Python-kodexempel som du kan använda för att ansluta och fråga efter data från Azure Database for MySQL – flexibel server.
Den här artikeln beskriver hur du använder Azure Portal för att skapa och ansluta till en Azure Database for MySQL – flexibel serverinstans med privat åtkomst.