MySQL Flexible Server enforces SSL connections
Azure Database for MySQL Flexible Server uses the require_secure_transport parameter to enforce encrypted connections. This evaluation determines whether the server is configured to require TLS/SSL for all client sessions.
Risk
Without TLS enforcement, credentials and queries may traverse the network in cleartext, enabling man-in-the-middle, credential theft, tampering, and data exfiltration. This directly impacts confidentiality and integrity and can lead to compliance violations.
Run this check with Prowler
Run in Prowler Cloudprowler azure --checks mysql_flexible_server_ssl_connection_enabledRecommendation
Set require_secure_transport=ON and permit only TLS 1.2+. Ensure clients validate certificates and use FQDNs. Combine with private access (Private Link or VNet), restrictive firewall rules, and least privilege to reduce exposure. Avoid legacy TLS or plaintext connections.
Remediation
CLI
az mysql flexible-server parameter set --resource-group <RESOURCE_GROUP> --server-name <SERVER_NAME> --name require_secure_transport --value ONTerraform
# Enforce SSL/TLS on MySQL Flexible Server
resource "azurerm_mysql_flexible_server_configuration" "secure" {
name = "require_secure_transport"
resource_group_name = "<example_resource_group>"
server_name = "<example_server_name>"
value = "ON" # Critical: enables SSL enforcement
}NativeIaC
// Enforce SSL/TLS by enabling require_secure_transport on MySQL Flexible Server
resource reqSecureTransport 'Microsoft.DBforMySQL/flexibleServers/configurations@2023-12-30' = {
name: '<example_resource_name>/require_secure_transport'
properties: {
value: 'ON' // Critical: turns on SSL enforcement (require_secure_transport)
}
}Other
Check Code
from prowler.lib.check.models import Check, Check_Report_Azure
from prowler.providers.azure.services.mysql.mysql_client import mysql_client
class mysql_flexible_server_ssl_connection_enabled(Check):
def execute(self) -> Check_Report_Azure:
findings = []
for (
subscription_id,
servers,
) in mysql_client.flexible_servers.items():
subscription_name = mysql_client.subscriptions.get(
subscription_id, subscription_id
)
for server in servers.values():
report = Check_Report_Azure(metadata=self.metadata(), resource=server)
report.subscription = subscription_id
report.status = "FAIL"
report.status_extended = f"SSL connection is disabled for server {server.name} in subscription {subscription_name} ({subscription_id})."
if "require_secure_transport" in server.configurations:
report.resource_id = server.configurations[
"require_secure_transport"
].resource_id
if (
server.configurations["require_secure_transport"].value.lower()
== "on"
):
report.status = "PASS"
report.status_extended = f"SSL connection is enabled for server {server.name} in subscription {subscription_name} ({subscription_id})."
findings.append(report)
return findings