你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn 。
使用服务连接器集成 Azure Database for MySQL
本文内容
此页面显示了受支持的身份验证方法和客户端,还演示了可用于使用服务连接器将 Azure Database for MySQL - 灵活服务器连接到其他云服务的示例代码。 此页面还显示了你在创建服务连接时获得的默认环境变量名称和值(或 Spring Boot 配置)。
受支持的计算服务
服务连接器可用于将以下计算服务连接到 Azure Database for MySQL:
Azure 应用程序服务
Azure Container Apps
Azure Functions
Azure Kubernetes 服务 (AKS)
Azure Spring Apps
受支持的身份验证类型和客户端类型
下表显示了支持通过身份验证方法和客户端的哪种组合来使用服务连接器将计算服务连接到 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)
是
是
是
是
无
是
是
是
是
此表支持表中客户端类型和身份验证方法的所有组合都受到支持。 所有客户端类型都可通过服务连接器使用任何身份验证方法连接到 Azure Database for MySQL。
注意
系统分配的托管标识、用户分配的托管标识和服务主体仅在 Azure CLI 上受支持。
默认环境变量名称或应用程序属性和示例代码
根据连接的身份验证类型和客户端类型,参考下表中的连接详细信息和示例代码,将计算服务连接到 Azure Database for MySQL。 有关命名约定的详细信息,请参阅服务连接器内部 一文。
系统分配的托管标识
默认环境变量名称
说明
示例值
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_MYSQL_CONNECTIONSTRING
JDBC MySQL 连接字符串
jdbc:mysql://<MySQL-DB-name>.mysql.database.azure.com:3306/<MySQL-DB-name>?sslmode=required&user=<MySQL-DB-username>
应用程序属性
说明
示例值
spring.datasource.azure.passwordless-enabled
启用无密码身份验证
true
spring.datasource.url
Spring Boot JDBC 数据库 URL
jdbc:mysql://<MySQL-DB-name>.mysql.database.azure.com:3306/<MySQL-DB-name>?sslmode=required
spring.datasource.username
数据库用户名
<MySQL-DB-username>
默认环境变量名称
说明
示例值
AZURE_MYSQL_NAME
数据库名称
MySQL-DB-name
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_USER
数据库用户名
<MySQL-DB-username>@<MySQL-DB-name>
默认环境变量名称
说明
示例值
AZURE_MYSQL_NAME
数据库名称
MySQL-DB-name
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_USER
数据库用户名
<MySQL-DB-username>@<MySQL-DB-name>
默认环境变量名称
说明
示例值
AZURE_MYSQL_CONNECTIONSTRING
Go-sql-driver 连接字符串
<MySQL-DB-username>@tcp(<server-host>:<port>)/<MySQL-DB-name>?tls=true
默认环境变量名称
说明
示例值
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_USER
数据库用户名
MySQL-DB-username
AZURE_MYSQL_DATABASE
数据库名称
<database-name>
AZURE_MYSQL_PORT
端口号
3306
AZURE_MYSQL_SSL
SSL 选项
true
默认环境变量名称
说明
示例值
AZURE_MYSQL_DBNAME
数据库名称
<MySQL-DB-name>
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_PORT
端口号
3306
AZURE_MYSQL_FLAG
SSL 或其他标志
MySQL_CLIENT_SSL
AZURE_MYSQL_USERNAME
数据库用户名
<MySQL-DB-username>
默认环境变量名称
说明
示例值
AZURE_MYSQL_DATABASE
数据库名称
<MySQL-DB-name>
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_USERNAME
数据库用户名
<MySQL-DB-username>@<MySQL-DB-name>
AZURE_MYSQL_SSLMODE
SSL 选项
required
默认环境变量名称
说明
示例值
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_USERNAME
数据库用户名
MySQL-DB-username
AZURE_MYSQL_DATABASE
数据库名称
<database-name>
AZURE_MYSQL_PORT
端口号
3306
AZURE_MYSQL_SSL
SSL 选项
true
示例代码
请参阅下面的步骤和代码,使用系统分配的托管标识连接到 Azure Database for MySQL。
对于 .NET,没有用于支持无密码连接的插件或库。 可使用 Azure.Identity 等客户端库获取托管标识或服务主体的访问令牌。 然后,可使用访问令牌作为密码来连接到数据库。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。
using Azure.Core;
using Azure.Identity;
using MySqlConnector;
// Uncomment the following lines corresponding to the authentication type you want to use.
// 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
将以下依赖项添加到 pom.xml 文件:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.1.5</version>
</dependency>
从环境变量获取连接字符串,并添加插件名称以连接到数据库:
String url = System.getenv("AZURE_MYSQL_CONNECTIONSTRING");
String pluginName = "com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin";
Properties properties = new Properties();
properties.put("defaultAuthenticationPlugin", pluginName);
properties.put("authenticationPlugins", pluginName);
// Uncomment the following lines corresponding to the authentication type you want to use.
// for user-assigned managed identity
// String clientId = System.getenv('AZURE_MYSQL_CLIENTID')
// properties.put("azure.clientId", clientId);
// For service principal
// String tenantId = System.getenv('AZURE_MYSQL_TENANTID')
// String clientId = System.getenv('AZURE_MYSQL_CLIENTID')
// String clientSecret = System.getenv('AZURE_MYSQL_CLIENTSECRET')
// properties.put("azure.clientId", clientId);
// properties.put("azure.clientSecret", clientSecret);
// properties.put("azure.tenantId", tenantId);
Connection connection = DriverManager.getConnection(url, properties);
有关详细信息,请参阅将 Java 和 JDBC 与 Azure Database for MySQL 灵活服务器配合使用 。
安装依赖项
pip install azure-identity
# install Connector/Python https://dev.mysql.com/doc/connector-python/en/connector-python-installation.html
pip install mysql-connector-python
通过 azure-identity
库获取访问令牌进行身份验证,并从服务连接器添加的环境变量获取连接信息。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。
from azure.identity import ManagedIdentityCredential, ClientSecretCredential
import mysql.connector
import os
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned managed identity.
# cred = ManagedIdentityCredential()
# For user-assigned managed identity.
# managed_identity_client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# For service principal
# tenant_id = os.getenv('AZURE_MYSQL_TENANTID')
# client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# client_secret = os.getenv('AZURE_MYSQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# acquire token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
# open connect to Azure MySQL with the access token.
host = os.getenv('AZURE_MYSQL_HOST')
database = os.getenv('AZURE_MYSQL_NAME')
user = os.getenv('AZURE_MYSQL_USER')
password = accessToken.token
cnx = mysql.connector.connect(user=user,
password=password,
host=host,
database=database)
cnx.close()
安装依赖项。
pip install azure-identity
通过 azure-identity
库使用服务连接器添加的环境变量获取访问令牌。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。
from azure.identity import ManagedIdentityCredential, ClientSecretCredential
import os
# Uncomment the following lines corresponding to the authentication type you want to use.
# system-assigned managed identity
# cred = ManagedIdentityCredential()
# user-assigned managed identity
# managed_identity_client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# service principal
# tenant_id = os.getenv('AZURE_MYSQL_TENANTID')
# client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# client_secret = os.getenv('AZURE_MYSQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# acquire token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
在设置文件中,从服务连接器服务添加的环境变量中获取 Azure MySQL 数据库信息。 使用上一步中获取的 accessToken
来访问数据库。
# in your setting file, eg. settings.py
host = os.getenv('AZURE_MYSQL_HOST')
database = os.getenv('AZURE_MYSQL_NAME')
user = os.getenv('AZURE_MYSQL_USER')
password = accessToken.token # this is accessToken acquired from above step.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': database,
'USER': user,
'PASSWORD': password,
'HOST': host
}
}
安装依赖项。
go get "github.com/go-sql-driver/mysql"
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
go get "github.com/Azure/azure-sdk-for-go/sdk/azcore"
在代码中,通过 azidentity
获取访问令牌,然后使用令牌连接到 Azure MySQL。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。
import (
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/go-sql-driver/mysql"
)
func main() {
// Uncomment the following lines corresponding to the authentication type you want to use.
// for system-assigned managed identity
// cred, err := azidentity.NewDefaultAzureCredential(nil)
// for user-assigned managed identity
// clientid := os.Getenv("AZURE_MYSQL_CLIENTID")
// azidentity.ManagedIdentityCredentialOptions.ID := clientid
// options := &azidentity.ManagedIdentityCredentialOptions{ID: clientid}
// cred, err := azidentity.NewManagedIdentityCredential(options)
// for service principal
// clientid := os.Getenv("AZURE_MYSQL_CLIENTID")
// tenantid := os.Getenv("AZURE_MYSQL_TENANTID")
// clientsecret := os.Getenv("AZURE_MYSQL_CLIENTSECRET")
// cred, err := azidentity.NewClientSecretCredential(tenantid, clientid, clientsecret, &azidentity.ClientSecretCredentialOptions{})
if err != nil {
}
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
token, err := cred.GetToken(ctx, policy.TokenRequestOptions{
Scopes: []string("https://ossrdbms-aad.database.windows.net/.default"),
})
connectionString := os.Getenv("AZURE_MYSQL_CONNECTIONSTRING") + ";Password=" + token.Token
db, err := sql.Open("mysql", connectionString)
}
安装依赖项
npm install --save @azure/identity
npm install --save mysql2
使用 @azure/identity
获取访问令牌,并从服务连接器服务添加的环境变量中获取 Azure MySQL 数据库信息。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。
import { DefaultAzureCredential,ClientSecretCredential } from "@azure/identity";
const mysql = require('mysql2');
// Uncomment the following lines corresponding to the authentication type you want to use.
// for system-assigned managed identity
// const credential = new DefaultAzureCredential();
// for user-assigned managed identity
// const clientId = process.env.AZURE_MYSQL_CLIENTID;
// const credential = new DefaultAzureCredential({
// managedIdentityClientId: clientId
// });
// for service principal
// const tenantId = process.env.AZURE_MYSQL_TENANTID;
// const clientId = process.env.AZURE_MYSQL_CLIENTID;
// const clientSecret = process.env.AZURE_MYSQL_CLIENTSECRET;
// const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
// acquire token
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
const connection = mysql.createConnection({
host: process.env.AZURE_MYSQL_HOST,
user: process.env.AZURE_MYSQL_USER,
password: accessToken.token,
database: process.env.AZURE_MYSQL_DATABASE,
port: process.env.AZURE_MYSQL_PORT,
ssl: process.env.AZURE_MYSQL_SSL
});
connection.connect((err) => {
if (err) {
console.error('Error connecting to MySQL database: ' + err.stack);
return;
}
console.log('Connected to MySQL database');
});
有关更多代码示例,请参阅使用托管标识从应用服务连接到 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_MYSQL_CLIENTID
客户端 ID
<identity-client-ID>
AZURE_MYSQL_CONNECTIONSTRING
JDBC MySQL 连接字符串
jdbc:mysql://<MySQL-DB-name>.mysql.database.azure.com:3306/<MySQL-DB-name>?sslmode=required&user=<MySQL-DB-username>
应用程序属性
说明
示例值
spring.datasource.azure.passwordless-enabled
启用无密码身份验证
true
spring.cloud.azure.credential.client-id
客户端 ID
<identity-client-ID>
spring.cloud.azure.credential.client-managed-identity-enabled
启用户端托管标识
true
spring.datasource.url
数据库 URL
jdbc:mysql://<MySQL-DB-name>.mysql.database.azure.com:3306/<MySQL-DB-name>?sslmode=required
spring.datasource.username
数据库用户名
username
默认环境变量名称
说明
示例值
AZURE_MYSQL_NAME
数据库名称
MySQL-DB-name
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_USER
数据库用户名
<MySQL-DB-username>@<MySQL-DB-name>
AZURE_MYSQL_CLIENTID
客户端 ID
identity-client-ID
默认环境变量名称
说明
示例值
AZURE_MYSQL_NAME
数据库名称
MySQL-DB-name
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_USER
数据库用户名
<MySQL-DB-username>@<MySQL-DB-name>
AZURE_MYSQL_CLIENTID
客户端 ID
<identity-client-ID>
默认环境变量名称
说明
示例值
AZURE_MYSQL_CLIENTID
客户端 ID
<identity-client-ID>
AZURE_MYSQL_CONNECTIONSTRING
Go-sql-driver 连接字符串
<MySQL-DB-username>@tcp(<server-host>:<port>)/<MySQL-DB-name>?tls=true
默认环境变量名称
说明
示例值
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_USER
数据库用户名
MySQL-DB-username
AZURE_MYSQL_DATABASE
数据库名称
<database-name>
AZURE_MYSQL_PORT
端口号
3306
AZURE_MYSQL_SSL
SSL 选项
true
AZURE_MYSQL_CLIENTID
客户端 ID
<identity-client-ID>
默认环境变量名称
说明
示例值
AZURE_MYSQL_DBNAME
数据库名称
<MySQL-DB-name>
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_PORT
端口号
3306
AZURE_MYSQL_FLAG
SSL 或其他标志
MySQL_CLIENT_SSL
AZURE_MYSQL_USERNAME
数据库用户名
<MySQL-DB-username>@<MySQL-DB-name>
AZURE_MYSQL_CLIENTID
客户端 ID
<identity-client-ID>
默认环境变量名称
说明
示例值
AZURE_MYSQL_DATABASE
数据库名称
<MySQL-DB-name>
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_USERNAME
数据库用户名
<MySQL-DB-username>@<MySQL-DB-name>
AZURE_MYSQL_SSLMODE
SSL 选项
required
AZURE_MYSQL_CLIENTID
客户端 ID
<identity-client-ID>
默认环境变量名称
说明
示例值
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_USERNAME
数据库用户名
MySQL-DB-username
AZURE_MYSQL_DATABASE
数据库名称
<database-name>
AZURE_MYSQL_PORT
端口号
3306
AZURE_MYSQL_SSL
SSL 选项
true
AZURE_MYSQL_CLIENTID
客户端 ID
<identity-client-ID>
示例代码
请参阅下面的步骤和代码,使用用户分配的托管标识连接到 Azure Database for MySQL。
对于 .NET,没有用于支持无密码连接的插件或库。 可使用 Azure.Identity 等客户端库获取托管标识或服务主体的访问令牌。 然后,可使用访问令牌作为密码来连接到数据库。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。
using Azure.Core;
using Azure.Identity;
using MySqlConnector;
// Uncomment the following lines corresponding to the authentication type you want to use.
// 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
将以下依赖项添加到 pom.xml 文件:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.1.5</version>
</dependency>
从环境变量获取连接字符串,并添加插件名称以连接到数据库:
String url = System.getenv("AZURE_MYSQL_CONNECTIONSTRING");
String pluginName = "com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin";
Properties properties = new Properties();
properties.put("defaultAuthenticationPlugin", pluginName);
properties.put("authenticationPlugins", pluginName);
// Uncomment the following lines corresponding to the authentication type you want to use.
// for user-assigned managed identity
// String clientId = System.getenv('AZURE_MYSQL_CLIENTID')
// properties.put("azure.clientId", clientId);
// For service principal
// String tenantId = System.getenv('AZURE_MYSQL_TENANTID')
// String clientId = System.getenv('AZURE_MYSQL_CLIENTID')
// String clientSecret = System.getenv('AZURE_MYSQL_CLIENTSECRET')
// properties.put("azure.clientId", clientId);
// properties.put("azure.clientSecret", clientSecret);
// properties.put("azure.tenantId", tenantId);
Connection connection = DriverManager.getConnection(url, properties);
有关详细信息,请参阅将 Java 和 JDBC 与 Azure Database for MySQL 灵活服务器配合使用 。
安装依赖项
pip install azure-identity
# install Connector/Python https://dev.mysql.com/doc/connector-python/en/connector-python-installation.html
pip install mysql-connector-python
通过 azure-identity
库获取访问令牌进行身份验证,并从服务连接器添加的环境变量获取连接信息。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。
from azure.identity import ManagedIdentityCredential, ClientSecretCredential
import mysql.connector
import os
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned managed identity.
# cred = ManagedIdentityCredential()
# For user-assigned managed identity.
# managed_identity_client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# For service principal
# tenant_id = os.getenv('AZURE_MYSQL_TENANTID')
# client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# client_secret = os.getenv('AZURE_MYSQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# acquire token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
# open connect to Azure MySQL with the access token.
host = os.getenv('AZURE_MYSQL_HOST')
database = os.getenv('AZURE_MYSQL_NAME')
user = os.getenv('AZURE_MYSQL_USER')
password = accessToken.token
cnx = mysql.connector.connect(user=user,
password=password,
host=host,
database=database)
cnx.close()
安装依赖项。
pip install azure-identity
通过 azure-identity
库使用服务连接器添加的环境变量获取访问令牌。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。
from azure.identity import ManagedIdentityCredential, ClientSecretCredential
import os
# Uncomment the following lines corresponding to the authentication type you want to use.
# system-assigned managed identity
# cred = ManagedIdentityCredential()
# user-assigned managed identity
# managed_identity_client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# service principal
# tenant_id = os.getenv('AZURE_MYSQL_TENANTID')
# client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# client_secret = os.getenv('AZURE_MYSQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# acquire token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
在设置文件中,从服务连接器服务添加的环境变量中获取 Azure MySQL 数据库信息。 使用上一步中获取的 accessToken
来访问数据库。
# in your setting file, eg. settings.py
host = os.getenv('AZURE_MYSQL_HOST')
database = os.getenv('AZURE_MYSQL_NAME')
user = os.getenv('AZURE_MYSQL_USER')
password = accessToken.token # this is accessToken acquired from above step.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': database,
'USER': user,
'PASSWORD': password,
'HOST': host
}
}
安装依赖项。
go get "github.com/go-sql-driver/mysql"
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
go get "github.com/Azure/azure-sdk-for-go/sdk/azcore"
在代码中,通过 azidentity
获取访问令牌,然后使用令牌连接到 Azure MySQL。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。
import (
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/go-sql-driver/mysql"
)
func main() {
// Uncomment the following lines corresponding to the authentication type you want to use.
// for system-assigned managed identity
// cred, err := azidentity.NewDefaultAzureCredential(nil)
// for user-assigned managed identity
// clientid := os.Getenv("AZURE_MYSQL_CLIENTID")
// azidentity.ManagedIdentityCredentialOptions.ID := clientid
// options := &azidentity.ManagedIdentityCredentialOptions{ID: clientid}
// cred, err := azidentity.NewManagedIdentityCredential(options)
// for service principal
// clientid := os.Getenv("AZURE_MYSQL_CLIENTID")
// tenantid := os.Getenv("AZURE_MYSQL_TENANTID")
// clientsecret := os.Getenv("AZURE_MYSQL_CLIENTSECRET")
// cred, err := azidentity.NewClientSecretCredential(tenantid, clientid, clientsecret, &azidentity.ClientSecretCredentialOptions{})
if err != nil {
}
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
token, err := cred.GetToken(ctx, policy.TokenRequestOptions{
Scopes: []string("https://ossrdbms-aad.database.windows.net/.default"),
})
connectionString := os.Getenv("AZURE_MYSQL_CONNECTIONSTRING") + ";Password=" + token.Token
db, err := sql.Open("mysql", connectionString)
}
安装依赖项
npm install --save @azure/identity
npm install --save mysql2
使用 @azure/identity
获取访问令牌,并从服务连接器服务添加的环境变量中获取 Azure MySQL 数据库信息。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。
import { DefaultAzureCredential,ClientSecretCredential } from "@azure/identity";
const mysql = require('mysql2');
// Uncomment the following lines corresponding to the authentication type you want to use.
// for system-assigned managed identity
// const credential = new DefaultAzureCredential();
// for user-assigned managed identity
// const clientId = process.env.AZURE_MYSQL_CLIENTID;
// const credential = new DefaultAzureCredential({
// managedIdentityClientId: clientId
// });
// for service principal
// const tenantId = process.env.AZURE_MYSQL_TENANTID;
// const clientId = process.env.AZURE_MYSQL_CLIENTID;
// const clientSecret = process.env.AZURE_MYSQL_CLIENTSECRET;
// const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
// acquire token
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
const connection = mysql.createConnection({
host: process.env.AZURE_MYSQL_HOST,
user: process.env.AZURE_MYSQL_USER,
password: accessToken.token,
database: process.env.AZURE_MYSQL_DATABASE,
port: process.env.AZURE_MYSQL_PORT,
ssl: process.env.AZURE_MYSQL_SSL
});
connection.connect((err) => {
if (err) {
console.error('Error connecting to MySQL database: ' + err.stack);
return;
}
console.log('Connected to MySQL database');
});
有关更多代码示例,请参阅使用托管标识从应用服务连接到 Azure 数据库,而无需使用密钥 。
连接字符串
警告
Microsoft 建议使用最安全的可用身份验证流。 本过程中介绍的身份验证流程需要非常高的信任度,并携带其他流中不存在的风险。 请仅在无法使用其他更安全的流(例如托管标识)时才使用此流。
默认环境变量名称
说明
示例值
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_MYSQL_CONNECTIONSTRING
JDBC MySQL 连接字符串
jdbc:mysql://<MySQL-DB-name>.mysql.database.azure.com:3306/<MySQL-DB-name>?sslmode=required&user=<MySQL-DB-username>&password=<Uri.EscapeDataString(<MySQL-DB-password>)
应用程序属性
说明
示例值
spring.datasource.url
Spring Boot JDBC 数据库 URL
jdbc:mysql://<MySQL-DB-name>.mysql.database.azure.com:3306/<MySQL-DB-name>?sslmode=required
spring.datasource.username
数据库用户名
<MySQL-DB-username>
spring.datasource.password
数据库密码
MySQL-DB-password
创建springboot
客户端类型连接后,服务连接器服务将自动添加属性spring.datasource.url
、spring.datasource.username
、spring.datasource.password
。 因此 Spring Boot 应用程序可以自动添加 bean。
默认环境变量名称
说明
示例值
AZURE_MYSQL_NAME
数据库名称
MySQL-DB-name
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_USER
数据库用户名
<MySQL-DB-username>@<MySQL-DB-name>
AZURE_MYSQL_PASSWORD
数据库密码
MySQL-DB-password
默认环境变量名称
说明
示例值
AZURE_MYSQL_NAME
数据库名称
MySQL-DB-name
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_USER
数据库用户名
<MySQL-DB-username>@<MySQL-DB-name>
AZURE_MYSQL_PASSWORD
数据库密码
MySQL-DB-password
默认环境变量名称
说明
示例值
AZURE_MYSQL_CONNECTIONSTRING
Go-sql-driver 连接字符串
<MySQL-DB-username>:<MySQL-DB-password>@tcp(<server-host>:<port>)/<MySQL-DB-name>?tls=true
默认环境变量名称
说明
示例值
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_USER
数据库用户名
MySQL-DB-username
AZURE_MYSQL_PASSWORD
数据库密码
MySQL-DB-password
AZURE_MYSQL_DATABASE
数据库名称
<database-name>
AZURE_MYSQL_PORT
端口号
3306
AZURE_MYSQL_SSL
SSL 选项
true
默认环境变量名称
说明
示例值
AZURE_MYSQL_DBNAME
数据库名称
<MySQL-DB-name>
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_PORT
端口号
3306
AZURE_MYSQL_FLAG
SSL 或其他标志
MySQL_CLIENT_SSL
AZURE_MYSQL_USERNAME
数据库用户名
<MySQL-DB-username>
AZURE_MYSQL_PASSWORD
数据库密码
<MySQL-DB-password>
默认环境变量名称
说明
示例值
AZURE_MYSQL_DATABASE
数据库名称
<MySQL-DB-name>
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_USERNAME
数据库用户名
<MySQL-DB-username>@<MySQL-DB-name>
AZURE_MYSQL_PASSWORD
数据库密码
<MySQL-DB-password>
AZURE_MYSQL_SSLMODE
SSL 选项
required
默认环境变量名称
说明
示例值
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_USERNAME
数据库用户名
MySQL-DB-username
AZURE_MYSQL_PASSWORD
数据库密码
MySQL-DB-password
AZURE_MYSQL_DATABASE
数据库名称
<database-name>
AZURE_MYSQL_PORT
端口号
3306
AZURE_MYSQL_SSL
SSL 选项
true
示例代码
请参阅下面的步骤和代码,使用连接字符串连接到 Azure Database for MySQL。
安装依赖项。 按照指南安装连接器/NET MySQL
在代码中,从服务连接器服务添加的环境变量中获取 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();
}
安装依赖项。 按照指南安装连接器/J 。
在代码中,从服务连接器服务添加的环境变量中获取 MySQL 服务连接器。 要通过 SSL 与 MySQL 服务器建立加密连接,请参阅以下步骤 。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
String connectionString = System.getenv("AZURE_MYSQL_CONNECTIONSTRING");
try (Connection connection = DriverManager.getConnection(connectionString)) {
System.out.println("Connection successful!");
} catch (SQLException e) {
e.printStackTrace();
}
安装依赖项。 将以下依赖项添加到pom.xml
文件。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-dependencies</artifactId>
<version>4.10.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.azure.spring</groupId>
<artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId>
</dependency>
</dependencies>
</dependencyManagement>
设置正常的 Spring App 应用程序,在此部分 中了解更多详细信息。 要通过 SSL 与 MySQL 服务器建立加密连接,请参阅以下步骤 。
安装依赖项。 按照指南安装连接器/Python 。
在代码中,从服务连接器服务添加的环境变量中获取 MySQL 连接信息。 要通过 SSL 与 MySQL 服务器建立加密连接,请参阅以下步骤 。
import os
import mysql.connector
host = os.getenv('AZURE_MYSQL_HOST')
user = os.getenv('AZURE_MYSQL_USER')
password = os.getenv('AZURE_MYSQL_PASSWORD')
database = os.getenv('Azure_MYSQL_NAME')
cnx = mysql.connector.connect(user=user, password=password,
host=host,
database=database)
cnx.close()
安装依赖项。
pip install django
在设置文件中,从服务连接器服务添加的环境变量中获取 MySQL 数据库信息。 要通过 SSL 与 MySQL 服务器建立加密连接,请参阅以下步骤 。
# in your setting file, eg. settings.py
host = os.getenv('AZURE_MYSQL_HOST')
user = os.getenv('AZURE_MYSQL_USER')
password = os.getenv('AZURE_MYSQL_PASSWORD')
database = os.getenv('AZURE_MYSQL_NAME')
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': database,
'USER': user,
'PASSWORD': password,
'HOST': host
}
}
安装依赖项。
go get -u github.com/go-sql-driver/mysql
在代码中,从服务连接器服务添加的环境变量中获取 MySQL 服务连接器。 要通过 SSL 与 MySQL 服务器建立加密连接,请参阅以下步骤 。
import (
"database/sql"
"fmt"
"os"
_ "github.com/go-sql-driver/mysql"
)
connectionString := os.Getenv("AZURE_MYSQL_CONNECTIONSTRING")
db, err := sql.Open("mysql", connectionString)
安装依赖项。
npm install mysql2
在代码中,从服务连接器服务添加的环境变量中获取 MySQL 连接信息。 要通过 SSL 与 MySQL 服务器建立加密连接,请参阅以下步骤 。
const mysql = require('mysql2')
const connection = mysql.createConnection({
host: process.env.AZURE_MYSQL_HOST,
user: process.env.AZURE_MYSQL_USER,
password: process.env.AZURE_MYSQL_PASSWORD,
database: process.env.AZURE_MYSQL_DATABASE,
port: Number(process.env.AZURE_MYSQL_PORT) ,
// ssl: process.env.AZURE_MYSQL_SSL
});
connection.connect((err) => {
if (err) {
console.error('Error connecting to MySQL database: ' + err.stack);
return;
}
console.log('Connected to MySQL database.');
});
安装依赖项。 按照指南安装 MySQLi 。
在代码中,从服务连接器服务添加的环境变量中获取 MySQL 连接信息。 要通过 SSL 与 MySQL 服务器建立加密连接,请参阅以下步骤 。
<?php
$host = getenv('AZURE_MYSQL_HOST');
$username = getenv('AZURE_MYSQL_USER');
$password = getenv('AZURE_MYSQL_PASSWORD');
$database = getenv('Azure_MYSQL_DBNAME');
$port = int(getenv('AZURE_MYSQL_PORT'));
# $flag = getenv('AZURE_MYSQL_FLAG');
$conn = mysqli_init();
# mysqli_ssl_set($conn,NULL,NULL,NULL,NULL,NULL);
mysqli_real_connect($conn, $host, $username, $password, $database, $port, NULL);
if (mysqli_connect_errno($conn)) {
die('Failed to connect to MySQL: ' . mysqli_connect_error());
}
echo 'Connected successfully to MySQL database!';
mysqli_close($conn);
?>
安装依赖项。
gem install mysql2
在代码中,从服务连接器服务添加的环境变量中获取 MySQL 连接信息。 要通过 SSL 与 MySQL 服务器建立加密连接,请参阅以下步骤 。
require 'mysql2'
require 'dotenv/load'
client = Mysql2::Client.new(
host: ENV['AZURE_MYSQL_HOST'],
username: ENV['AZURE_MYSQL_USERNAME'],
password: ENV['AZURE_MYSQL_PASSWORD'],
database: ENV['AZURE_MYSQL_DATABASE'],
# sslca: ca_path
)
client.close
服务主体
默认环境变量名称
说明
示例值
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_MYSQL_CLIENTID
客户端 ID
<client-ID>
AZURE_MYSQL_CLIENTSECRET
客户端密码
<client-secret>
AZURE_MYSQL_TENANTID
租户 ID
<tenant-ID>
AZURE_MYSQL_CONNECTIONSTRING
JDBC MySQL 连接字符串
jdbc:mysql://<MySQL-DB-name>.mysql.database.azure.com:3306/<MySQL-DB-name>?sslmode=required&user=<MySQL-DB-username>
应用程序属性
说明
示例值
spring.datasource.azure.passwordless-enabled
启用无密码身份验证
true
spring.cloud.azure.credential.client-id
客户端 ID
<client-ID>
spring.cloud.azure.credential.client-secret
客户端密码
<client-secret>
spring.cloud.azure.credential.tenant-id
租户 ID
<tenant-ID>
spring.datasource.url
数据库 URL
jdbc:mysql://<MySQL-DB-name>.mysql.database.azure.com:3306/<MySQL-DB-name>?sslmode=required
spring.datasource.username
数据库用户名
username
默认环境变量名称
说明
示例值
AZURE_MYSQL_NAME
数据库名称
MySQL-DB-name
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_USER
数据库用户名
<MySQL-DB-username>@<MySQL-DB-name>
AZURE_MYSQL_CLIENTID
客户端 ID
<client-ID>
AZURE_MYSQL_CLIENTSECRET
客户端密码
<client-secret>
AZURE_MYSQL_TENANTID
租户 ID
<tenant-ID>
默认环境变量名称
说明
示例值
AZURE_MYSQL_NAME
数据库名称
MySQL-DB-name
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_USER
数据库用户名
<MySQL-DB-username>@<MySQL-DB-name>
AZURE_MYSQL_CLIENTID
客户端 ID
<client-ID>
AZURE_MYSQL_CLIENTSECRET
客户端密码
<client-secret>
AZURE_MYSQL_TENANTID
租户 ID
<tenant-ID>
默认环境变量名称
说明
示例值
AZURE_MYSQL_CLIENTID
客户端 ID
<client-ID>
AZURE_MYSQL_CLIENTSECRET
客户端密码
<client-secret>
AZURE_MYSQL_TENANTID
租户 ID
<tenant-ID>
AZURE_MYSQL_CONNECTIONSTRING
Go-sql-driver 连接字符串
<MySQL-DB-username>@tcp(<server-host>:<port>)/<MySQL-DB-name>?tls=true
默认环境变量名称
说明
示例值
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_USER
数据库用户名
MySQL-DB-username
AZURE_MYSQL_DATABASE
数据库名称
<database-name>
AZURE_MYSQL_PORT
端口号
3306
AZURE_MYSQL_SSL
SSL 选项
true
AZURE_MYSQL_CLIENTID
客户端 ID
<client-ID>
AZURE_MYSQL_CLIENTSECRET
客户端密码
<client-secret>
AZURE_MYSQL_TENANTID
租户 ID
<tenant-ID>
默认环境变量名称
说明
示例值
AZURE_MYSQL_DBNAME
数据库名称
<MySQL-DB-name>
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_PORT
端口号
3306
AZURE_MYSQL_FLAG
SSL 或其他标志
MySQL_CLIENT_SSL
AZURE_MYSQL_USERNAME
数据库用户名
<MySQL-DB-username>@<MySQL-DB-name>
AZURE_MYSQL_CLIENTID
客户端 ID
<client-ID>
AZURE_MYSQL_CLIENTSECRET
客户端密码
<client-secret>
AZURE_MYSQL_TENANTID
租户 ID
<tenant-ID>
默认环境变量名称
说明
示例值
AZURE_MYSQL_DATABASE
数据库名称
<MySQL-DB-name>
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_USERNAME
数据库用户名
<MySQL-DB-username>@<MySQL-DB-name>
AZURE_MYSQL_SSLMODE
SSL 选项
required
AZURE_MYSQL_CLIENTID
客户端 ID
<client-ID>
AZURE_MYSQL_CLIENTSECRET
客户端密码
<client-secret>
AZURE_MYSQL_TENANTID
租户 ID
<tenant-ID>
默认环境变量名称
说明
示例值
AZURE_MYSQL_HOST
数据库主机 URL
<MySQL-DB-name>.mysql.database.azure.com
AZURE_MYSQL_USERNAME
数据库用户名
MySQL-DB-username
AZURE_MYSQL_DATABASE
数据库名称
<database-name>
AZURE_MYSQL_PORT
端口号
3306
AZURE_MYSQL_SSL
SSL 选项
true
AZURE_MYSQL_CLIENTID
客户端 ID
<identity-client-ID>
AZURE_MYSQL_CLIENTSECRET
客户端密码
<client-secret>
AZURE_MYSQL_TENANTID
租户 ID
<tenant-ID>
示例代码
请参阅下面的步骤和代码,使用服务主体连接到 Azure Database for MySQL。
对于 .NET,没有用于支持无密码连接的插件或库。 可使用 Azure.Identity 等客户端库获取托管标识或服务主体的访问令牌。 然后,可使用访问令牌作为密码来连接到数据库。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。
using Azure.Core;
using Azure.Identity;
using MySqlConnector;
// Uncomment the following lines corresponding to the authentication type you want to use.
// 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
将以下依赖项添加到 pom.xml 文件:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-identity-extensions</artifactId>
<version>1.1.5</version>
</dependency>
从环境变量获取连接字符串,并添加插件名称以连接到数据库:
String url = System.getenv("AZURE_MYSQL_CONNECTIONSTRING");
String pluginName = "com.azure.identity.extensions.jdbc.mysql.AzureMysqlAuthenticationPlugin";
Properties properties = new Properties();
properties.put("defaultAuthenticationPlugin", pluginName);
properties.put("authenticationPlugins", pluginName);
// Uncomment the following lines corresponding to the authentication type you want to use.
// for user-assigned managed identity
// String clientId = System.getenv('AZURE_MYSQL_CLIENTID')
// properties.put("azure.clientId", clientId);
// For service principal
// String tenantId = System.getenv('AZURE_MYSQL_TENANTID')
// String clientId = System.getenv('AZURE_MYSQL_CLIENTID')
// String clientSecret = System.getenv('AZURE_MYSQL_CLIENTSECRET')
// properties.put("azure.clientId", clientId);
// properties.put("azure.clientSecret", clientSecret);
// properties.put("azure.tenantId", tenantId);
Connection connection = DriverManager.getConnection(url, properties);
有关详细信息,请参阅将 Java 和 JDBC 与 Azure Database for MySQL 灵活服务器配合使用 。
安装依赖项
pip install azure-identity
# install Connector/Python https://dev.mysql.com/doc/connector-python/en/connector-python-installation.html
pip install mysql-connector-python
通过 azure-identity
库获取访问令牌进行身份验证,并从服务连接器添加的环境变量获取连接信息。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。
from azure.identity import ManagedIdentityCredential, ClientSecretCredential
import mysql.connector
import os
# Uncomment the following lines corresponding to the authentication type you want to use.
# For system-assigned managed identity.
# cred = ManagedIdentityCredential()
# For user-assigned managed identity.
# managed_identity_client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# For service principal
# tenant_id = os.getenv('AZURE_MYSQL_TENANTID')
# client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# client_secret = os.getenv('AZURE_MYSQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# acquire token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
# open connect to Azure MySQL with the access token.
host = os.getenv('AZURE_MYSQL_HOST')
database = os.getenv('AZURE_MYSQL_NAME')
user = os.getenv('AZURE_MYSQL_USER')
password = accessToken.token
cnx = mysql.connector.connect(user=user,
password=password,
host=host,
database=database)
cnx.close()
安装依赖项。
pip install azure-identity
通过 azure-identity
库使用服务连接器添加的环境变量获取访问令牌。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。
from azure.identity import ManagedIdentityCredential, ClientSecretCredential
import os
# Uncomment the following lines corresponding to the authentication type you want to use.
# system-assigned managed identity
# cred = ManagedIdentityCredential()
# user-assigned managed identity
# managed_identity_client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# cred = ManagedIdentityCredential(client_id=managed_identity_client_id)
# service principal
# tenant_id = os.getenv('AZURE_MYSQL_TENANTID')
# client_id = os.getenv('AZURE_MYSQL_CLIENTID')
# client_secret = os.getenv('AZURE_MYSQL_CLIENTSECRET')
# cred = ClientSecretCredential(tenant_id=tenant_id, client_id=client_id, client_secret=client_secret)
# acquire token
accessToken = cred.get_token('https://ossrdbms-aad.database.windows.net/.default')
在设置文件中,从服务连接器服务添加的环境变量中获取 Azure MySQL 数据库信息。 使用上一步中获取的 accessToken
来访问数据库。
# in your setting file, eg. settings.py
host = os.getenv('AZURE_MYSQL_HOST')
database = os.getenv('AZURE_MYSQL_NAME')
user = os.getenv('AZURE_MYSQL_USER')
password = accessToken.token # this is accessToken acquired from above step.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': database,
'USER': user,
'PASSWORD': password,
'HOST': host
}
}
安装依赖项。
go get "github.com/go-sql-driver/mysql"
go get "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
go get "github.com/Azure/azure-sdk-for-go/sdk/azcore"
在代码中,通过 azidentity
获取访问令牌,然后使用令牌连接到 Azure MySQL。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。
import (
"context"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/go-sql-driver/mysql"
)
func main() {
// Uncomment the following lines corresponding to the authentication type you want to use.
// for system-assigned managed identity
// cred, err := azidentity.NewDefaultAzureCredential(nil)
// for user-assigned managed identity
// clientid := os.Getenv("AZURE_MYSQL_CLIENTID")
// azidentity.ManagedIdentityCredentialOptions.ID := clientid
// options := &azidentity.ManagedIdentityCredentialOptions{ID: clientid}
// cred, err := azidentity.NewManagedIdentityCredential(options)
// for service principal
// clientid := os.Getenv("AZURE_MYSQL_CLIENTID")
// tenantid := os.Getenv("AZURE_MYSQL_TENANTID")
// clientsecret := os.Getenv("AZURE_MYSQL_CLIENTSECRET")
// cred, err := azidentity.NewClientSecretCredential(tenantid, clientid, clientsecret, &azidentity.ClientSecretCredentialOptions{})
if err != nil {
}
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
token, err := cred.GetToken(ctx, policy.TokenRequestOptions{
Scopes: []string("https://ossrdbms-aad.database.windows.net/.default"),
})
connectionString := os.Getenv("AZURE_MYSQL_CONNECTIONSTRING") + ";Password=" + token.Token
db, err := sql.Open("mysql", connectionString)
}
安装依赖项
npm install --save @azure/identity
npm install --save mysql2
使用 @azure/identity
获取访问令牌,并从服务连接器服务添加的环境变量中获取 Azure MySQL 数据库信息。 使用下面的代码时,请对要使用的身份验证类型的代码片段的一部分取消评论。
import { DefaultAzureCredential,ClientSecretCredential } from "@azure/identity";
const mysql = require('mysql2');
// Uncomment the following lines corresponding to the authentication type you want to use.
// for system-assigned managed identity
// const credential = new DefaultAzureCredential();
// for user-assigned managed identity
// const clientId = process.env.AZURE_MYSQL_CLIENTID;
// const credential = new DefaultAzureCredential({
// managedIdentityClientId: clientId
// });
// for service principal
// const tenantId = process.env.AZURE_MYSQL_TENANTID;
// const clientId = process.env.AZURE_MYSQL_CLIENTID;
// const clientSecret = process.env.AZURE_MYSQL_CLIENTSECRET;
// const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
// acquire token
var accessToken = await credential.getToken('https://ossrdbms-aad.database.windows.net/.default');
const connection = mysql.createConnection({
host: process.env.AZURE_MYSQL_HOST,
user: process.env.AZURE_MYSQL_USER,
password: accessToken.token,
database: process.env.AZURE_MYSQL_DATABASE,
port: process.env.AZURE_MYSQL_PORT,
ssl: process.env.AZURE_MYSQL_SSL
});
connection.connect((err) => {
if (err) {
console.error('Error connecting to MySQL database: ' + err.stack);
return;
}
console.log('Connected to MySQL database');
});
有关更多代码示例,请参阅使用托管标识从应用服务连接到 Azure 数据库,而无需使用密钥 。
后续步骤
按照文档了解有关服务连接器的详细信息。