你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用服务连接器集成 Azure Database for MySQL

此页显示了支持的身份验证方法和客户端,并显示了可用于使用服务连接or 将 Azure Database for MySQL 灵活服务器连接到其他云服务的示例代码。 此页面还显示了你在创建服务连接时获得的默认环境变量名称和值(或 Spring Boot 配置)。

重要

Azure Database for MySQL 单一服务器即将停用。 强烈建议升级到 Azure Database for MySQL 灵活服务器。 若要详细了解如何迁移到 Azure Database for MySQL 灵活服务器,请参阅 Azure Database for MySQL 单一服务器发生了什么情况?

受支持的计算服务

服务连接器可用于将以下计算服务连接到 Azure Database for MySQL:

  • Azure 应用服务
  • Azure Functions
  • Azure 容器应用
  • Azure Spring Apps

受支持的身份验证类型和客户端类型

下表显示了使用服务连接or将计算服务连接到 Azure Database for MySQL 时支持的身份验证方法和客户端的组合。 “是”表示支持组合,而“否”则表示不支持该组合。

客户端类型 系统分配的托管标识 用户分配的托管标识 机密/连接字符串 服务主体
.NET
Go (go-sql-driver for mysql)
Java (JDBC)
Java - Spring Boot (JDBC)
Node.js (mysql)
Python (mysql-connector-python)
Python-Django
PHP (MySQLi)
Ruby (mysql2)

此表指示支持表中的所有客户端类型和身份验证方法组合。 所有客户端类型都可以使用任何身份验证方法通过服务连接or 连接到 Azure Database for MySQL。

注意

系统分配的托管标识、用户分配的托管标识和服务主体仅在 Azure CLI 上受支持。

默认环境变量名称或应用程序属性和示例代码

根据连接的身份验证类型和客户端类型引用下表中的连接详细信息和示例代码,将计算服务连接到 Azure Database for MySQL。 有关命名约定的详细信息,检查 Service 连接or internals 一文。

系统分配的托管标识

默认环境变量名称 说明 示例值
AZURE_MYSQL_CONNECTIONSTRING ADO.NET MySQL 连接字符串 Server=<MySQL-DB-name>.mysql.database.azure.com;Database=<MySQL-DB-name>;Port=3306;User Id=<MySQL-DBusername>;SSL Mode=Required;

示例代码

请参阅下面的步骤和代码,以使用系统分配的托管标识连接到 Azure Database for MySQL。

对于 .NET,没有用于支持无密码连接的插件或库。 可使用 Azure.Identity 等客户端库获取托管标识或服务主体的访问令牌。 然后,可使用访问令牌作为密码来连接到数据库。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。

using Azure.Core;
using Azure.Identity;
using MySqlConnector;

// Uncomment the following lines according to the authentication type.
// For system-assigned managed identity.
// var credential = new DefaultAzureCredential();

// For user-assigned managed identity.
// var credential = new DefaultAzureCredential(
//     new DefaultAzureCredentialOptions
//     {
//         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTID");
//     });

// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_MYSQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTSECRET");
// var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);

var tokenRequestContext = new TokenRequestContext(
    new[] { "https://ossrdbms-aad.database.windows.net/.default" });
AccessToken accessToken = await credential.GetTokenAsync(tokenRequestContext);
// Open a connection to the MySQL server using the access token.
string connectionString =
    $"{Environment.GetEnvironmentVariable("AZURE_MYSQL_CONNECTIONSTRING")};Password={accessToken.Token}";

using var connection = new MySqlConnection(connectionString);
Console.WriteLine("Opening connection using access token...");
await connection.OpenAsync();

// do something

有关更多代码示例,请参阅使用托管标识从应用服务连接到 Azure 数据库,而无需使用密钥

用户分配的托管标识

默认环境变量名称 说明 示例值
AZURE_MYSQL_CLIENTID 客户端 ID <identity-client-ID>
AZURE_MYSQL_CONNECTIONSTRING ADO.NET MySQL 连接字符串 Server=<MySQL-DB-name>.mysql.database.azure.com;Database=<MySQL-DB-name>;Port=3306;User Id=<MySQL-DBusername>;SSL Mode=Required;

示例代码

请参阅下面的步骤和代码,以使用用户分配的托管标识连接到 Azure Database for MySQL。

对于 .NET,没有用于支持无密码连接的插件或库。 可使用 Azure.Identity 等客户端库获取托管标识或服务主体的访问令牌。 然后,可使用访问令牌作为密码来连接到数据库。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。

using Azure.Core;
using Azure.Identity;
using MySqlConnector;

// Uncomment the following lines according to the authentication type.
// For system-assigned managed identity.
// var credential = new DefaultAzureCredential();

// For user-assigned managed identity.
// var credential = new DefaultAzureCredential(
//     new DefaultAzureCredentialOptions
//     {
//         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTID");
//     });

// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_MYSQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTSECRET");
// var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);

var tokenRequestContext = new TokenRequestContext(
    new[] { "https://ossrdbms-aad.database.windows.net/.default" });
AccessToken accessToken = await credential.GetTokenAsync(tokenRequestContext);
// Open a connection to the MySQL server using the access token.
string connectionString =
    $"{Environment.GetEnvironmentVariable("AZURE_MYSQL_CONNECTIONSTRING")};Password={accessToken.Token}";

using var connection = new MySqlConnection(connectionString);
Console.WriteLine("Opening connection using access token...");
await connection.OpenAsync();

// do something

有关更多代码示例,请参阅使用托管标识从应用服务连接到 Azure 数据库,而无需使用密钥

连接字符串

默认环境变量名称 说明 示例值
AZURE_MYSQL_CONNECTIONSTRING ADO.NET MySQL 连接字符串 Server=<MySQL-DB-name>.mysql.database.azure.com;Database=<MySQL-DB-name>;Port=3306;User Id=<MySQL-DBusername>;Password=<MySQL-DB-password>;SSL Mode=Required

示例代码

请参阅下面的步骤和代码,以使用 连接字符串连接到 Azure Database for MySQL。

  1. 安装依赖项。 按照指南 安装连接器/NET MySQL
  2. 在代码中,从 Service 连接or 服务添加的环境变量中获取 MySQL 连接字符串。 若要通过 SSL 与 MySQL 服务器建立加密连接,请参阅 以下步骤
    using System;
    using System.Data;
    using MySql.Data.MySqlClient;
    
    string connectionString = Environment.GetEnvironmentVariable("AZURE_MYSQL_CONNECTIONSTRING");
    using (MySqlConnection connection = new MySqlConnection(connectionString))
    {
        connection.Open();
    }
    

Service Principal

默认环境变量名称 说明 示例值
AZURE_MYSQL_CLIENTID 客户端 ID <client-ID>
AZURE_MYSQL_CLIENTSECRET 客户端密码 <client-secret>
AZURE_MYSQL_TENANTID 租户 ID <tenant-ID>
AZURE_MYSQL_CONNECTIONSTRING ADO.NET MySQL 连接字符串 Server=<MySQL-DB-name>.mysql.database.azure.com;Database=<MySQL-DB-name>;Port=3306;User Id=<MySQL-DBusername>;SSL Mode=Required

示例代码

请参阅下面的步骤和代码,以使用服务主体连接到 Azure Database for MySQL。

对于 .NET,没有用于支持无密码连接的插件或库。 可使用 Azure.Identity 等客户端库获取托管标识或服务主体的访问令牌。 然后,可使用访问令牌作为密码来连接到数据库。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。

using Azure.Core;
using Azure.Identity;
using MySqlConnector;

// Uncomment the following lines according to the authentication type.
// For system-assigned managed identity.
// var credential = new DefaultAzureCredential();

// For user-assigned managed identity.
// var credential = new DefaultAzureCredential(
//     new DefaultAzureCredentialOptions
//     {
//         ManagedIdentityClientId = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTID");
//     });

// For service principal.
// var tenantId = Environment.GetEnvironmentVariable("AZURE_MYSQL_TENANTID");
// var clientId = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTID");
// var clientSecret = Environment.GetEnvironmentVariable("AZURE_MYSQL_CLIENTSECRET");
// var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);

var tokenRequestContext = new TokenRequestContext(
    new[] { "https://ossrdbms-aad.database.windows.net/.default" });
AccessToken accessToken = await credential.GetTokenAsync(tokenRequestContext);
// Open a connection to the MySQL server using the access token.
string connectionString =
    $"{Environment.GetEnvironmentVariable("AZURE_MYSQL_CONNECTIONSTRING")};Password={accessToken.Token}";

using var connection = new MySqlConnection(connectionString);
Console.WriteLine("Opening connection using access token...");
await connection.OpenAsync();

// do something

有关更多代码示例,请参阅使用托管标识从应用服务连接到 Azure 数据库,而无需使用密钥

后续步骤

按照文档了解有关服务连接器的详细信息。