إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
ينطبق على:
قاعدة بيانات Azure ل MySQL - خادم مرن
يدعم Azure Database for MySQL Flexible Server توصيل تطبيقات العميل بمثيل Azure Database for MySQL Flexible Server باستخدام طبقة مآخذ التوصيل الآمنة (SSL) مع تشفير أمان طبقة النقل (TLS). TLS هو بروتوكول قياسي صناعي يضمن اتصالات شبكة مشفّرة بين خادم قاعدة البيانات وتطبيقات العميل، ما يسمح لك بالالتزام بمتطلبات الامتثال.
تدعم قاعدة بيانات Azure لخادم MySQL المرن الاتصالات المشفرة باستخدام أمان طبقة النقل (TLS 1.2) بشكل افتراضي ويتم رفض جميع الاتصالات الواردة مع TLS 1.0 وTLS 1.1 بشكل افتراضي. يمكن تغيير فرض الاتصال المشفر أو تكوين إصدار TLS على الخادم المرن كما تمت مناقشته في هذه المقالة.
فيما يلي التكوينات المختلفة لإعدادات SSL وTLS التي يمكنك الحصول علىها لمثيل Azure Database for MySQL Flexible Server:
هام
وفقا لإزالة الدعم لبروتوكولات TLS 1.0 وTLS 1.1، خططنا مسبقا للإهمال الكامل ل TLS 1.0 و1.1 بحلول سبتمبر 2024. ومع ذلك، بسبب التبعيات التي حددها بعض العملاء، قررنا توسيع المخطط الزمني.
- بدءا من 31 أغسطس 2025، سنبدأ الترقية القسرية لجميع الخوادم التي لا تزال تستخدم TLS 1.0 أو 1.1. بعد هذا التاريخ، قد تتوقف أي اتصالات تعتمد على TLS 1.0 أو 1.1 عن العمل في أي وقت. لتجنب انقطاع الخدمة المحتمل، نوصي بشدة بأن يكمل العملاء ترحيلهم إلى TLS 1.2 قبل 31 أغسطس 2025.
- اعتبارا من سبتمبر 2024، لن يسمح للخوادم الجديدة باستخدام TLS 1.0 أو 1.1، ولن يسمح للخوادم الموجودة بالتراجع إلى هذه الإصدارات.
نوصي بشدة بأن يقوم العملاء بتحديث تطبيقاتهم لدعم TLS 1.2 في أقرب وقت ممكن لتجنب انقطاع الخدمة.
| السيناريو | إعدادات معلمات الخادم | الوصف |
|---|---|---|
| تعطيل فرض SSL | require_secure_transport = إيقاف التشغيل | إذا كان تطبيقك القديم لا يدعم الاتصالات المشفرة بقاعدة بيانات Azure لخادم MySQL المرن، يمكنك تعطيل فرض الاتصالات المشفرة إلى مثيل Azure Database for MySQL Flexible Server عن طريق تعيين require_secure_transport=OFF. |
| فرض SSL مع الإصدار < 1.2 من TLS (سيتم إهماله في سبتمبر 2024) | require_secure_transport = ON و tls_version = TLS 1.0 أو TLS 1.1 | إذا كان تطبيقك القديم يدعم الاتصالات المشفرة ولكنه يتطلب إصدار < TLS 1.2، يمكنك تمكين الاتصالات المشفرة، ولكن تكوين مثيل Azure Database for MySQL Flexible Server للسماح بالاتصالات بإصدار TLS (1.0 أو 1.1) المدعوم من قبل التطبيق الخاص بك. مدعوم فقط مع قاعدة بيانات Azure لإصدار خادم MySQL المرن v5.7 |
| فرض SSL مع إصدار = 1.2 من TLS (التكوين الافتراضي) | require_secure_transport = ON و tls_version = TLS 1.2 | هذا هو التكوين الموصى به والافتراضي لقاعدة بيانات Azure لخادم MySQL المرن. |
| فرض SSL مع إصدار TLS = 1.3 | require_secure_transport = ON و tls_version = TLS 1.3 | هذا مفيد ويوصى به لتطوير التطبيقات الجديدة. مدعوم فقط مع قاعدة بيانات Azure لإصدار خادم MySQL المرن v8.0 |
إشعار
التغييرات على SSL Cipher على قاعدة بيانات Azure لخادم MySQL المرن غير مدعومة. يتم فرض مجموعات تشفير FIPS بشكل افتراضي عند تعيين tls_version إلى إصدار TLS 1.2 . بالنسبة لإصدارات TLS بخلاف الإصدار 1.2، يتم تعيين SSL Cipher إلى الإعدادات الافتراضية التي تأتي مع تثبيت مجتمع MySQL.
في هذه المقالة، ستتعرف على كيفية:
- تكوين قاعدة بيانات Azure لمثيل خادم MySQL المرن
- مع تعطيل SSL
- مع فرض SSL مع إصدار TLS
- الاتصال بمثيل Azure Database for MySQL Flexible Server باستخدام سطر أوامر mysql
- مع تعطيل الاتصالات المشفرة
- مع تمكين الاتصالات المشفرة
- التحقق من حالة التشفير للاتصال
- الاتصال بقاعدة بيانات Azure لمثيل خادم MySQL المرن مع اتصالات مشفرة باستخدام أطر عمل تطبيقات مختلفة
تعطيل فرض SSL على قاعدة بيانات Azure لمثيل خادم MySQL المرن
إذا كان تطبيق العميل الخاص بك لا يدعم الاتصالات المشفرة، فأنت بحاجة إلى تعطيل فرض الاتصالات المشفرة على قاعدة بيانات Azure لمثيل خادم MySQL المرن. لتعطيل فرض الاتصالات المشفرة، تحتاج إلى تعيين معلمة خادم require_secure_transport إلى إيقاف التشغيل كما هو موضح في لقطة الشاشة، وحفظ تكوين معلمة الخادم حتى يصبح ساري المفعول. require_secure_transport هي معلمة خادم ديناميكية تسري على الفور ولا تتطلب إعادة تشغيل الخادم حتى تسري.
الاتصال باستخدام عميل سطر الأوامر mysql مع تعطيل SSL
يوضح المثال التالي كيفية الاتصال بخادمك المرن باستخدام واجهة سطر أوامر psql. استخدم إعداد سلسلة الاتصال --ssl-mode=DISABLED لتعطيل اتصال TLS/SSL من عميل mysql. استبدل القيم باسم الخادم الفعلي وكلمة المرور.
mysql.exe -h mydemoserver.mysql.database.azure.com -u myadmin -p --ssl-mode=DISABLED
هام
لا يعني تعيين require_secure_transport إلى إيقاف التشغيل أن الاتصالات المشفرة غير مدعومة على جانب الخادم. إذا قمت بتعيين require_secure_transport إلى إيقاف تشغيل على مثيل Azure Database for MySQL Flexible Server، ولكن إذا كان العميل يتصل بالاتصال المشفر، فلا يزال مقبولا. يعمل الاتصال التالي باستخدام عميل mysql بمثيل Azure Database for MySQL Flexible Server الذي تم تكوينه باستخدام require_secure_transport=OFF كما هو موضح أدناه.
mysql.exe -h mydemoserver.mysql.database.azure.com -u myadmin -p --ssl-mode=REQUIRED
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 5.7.29-log MySQL Community Server (GPL)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show global variables like '%require_secure_transport%';
+--------------------------+-------+
| Variable_name | Value |
| +--------------------------+-------+ |
| require_secure_transport | OFF |
| +--------------------------+-------+ |
| 1 row in set (0.02 sec) |
باختصار، يؤدي إعداد require_secure_transport=OFF إلى تخفيف فرض الاتصالات المشفرة على قاعدة بيانات Azure لخادم MySQL المرن ويسمح بالاتصالات غير المشفرة بالخادم من العميل بالإضافة إلى الاتصالات المشفرة.
فرض SSL مع إصدار TLS
لتعيين إصدارات TLS على قاعدة بيانات Azure لمثيل خادم MySQL المرن، تحتاج إلى تعيين *tls_version- معلمة الخادم. الإعداد الافتراضي لبروتوكول TLS هو TLS 1.2. إذا كان تطبيقك يدعم الاتصالات بخادم MySQL مع SSL، ولكنه يتطلب أي بروتوكول آخر غير TLS 1.2، فأنت بحاجة إلى تعيين إصدارات TLS في معلمة الخادم. *tls_version- هي معلمة خادم ثابت تتطلب إعادة تشغيل الخادم حتى تسري المعلمة. فيما يلي البروتوكولات المدعومة للإصدارات المتوفرة من قاعدة بيانات Azure لخادم MySQL المرن.
| إصدار الخادم المرن ل Azure Database for MySQL | قيم tls_version المدعومة | الإعداد الافتراضي |
|---|---|---|
| إصدار MySQL 5.7 | TLS 1.0، TLS 1.1(سيتم إهماله في سبتمبر 2024) TLS 1.2 | TLS 1.2 |
| ماي إس كيو إل 8.0 | TLS 1.2، TLS 1.3 | TLS 1.2 |
الاتصال باستخدام عميل سطر الأوامر mysql مع TLS/SSL
تنزيل شهادة SSL العامة
لإنشاء اتصالات مشفرة مع تطبيقات العميل الخاصة بك، قم بتنزيل شهادة DigiCert Global Root G2وشهادة Microsoft RSA Root Certificate Authority 2017. اجمع بين كلتا الشهادتين قبل بدء الاتصال بالخادم. للحصول على خطوات مفصلة، راجع كيفية تحديث مخزن الشهادات الجذر على العميل
إشعار
يجب عليك تنزيل شهادة DigiCert Global Root G2 لخوادمك في سحابة Azure Government.
يجب عليك تنزيل شهادة DigiCert Global Root لخوادمك في Azure Mooncake.
احفظ ملف الشهادة في الموقع الذي تفضله. على سبيل المثال، يستخدم c:\ssl هذا البرنامج التعليمي أو \var\www\html\bin على بيئتك المحلية أو بيئة العميل حيث تتم استضافة التطبيق الخاص بك. يسمح هذا للتطبيقات بالاتصال بأمان بقاعدة البيانات عبر SSL.
إذا قمت بإنشاء مثيل Azure Database for MySQL Flexible Server مع وصول خاص (تكامل VNet)، فستحتاج إلى الاتصال بالخادم الخاص بك من مورد داخل نفس VNet مثل الخادم الخاص بك. يمكنك إنشاء جهاز ظاهري وإضافته إلى VNet الذي تم إنشاؤه باستخدام مثيل Azure Database for MySQL Flexible Server.
إذا قمت بإنشاء مثيل Azure Database for MySQL Flexible Server مع الوصول العام (عناوين IP المسموح بها)، يمكنك إضافة عنوان IP المحلي إلى قائمة قواعد جدار الحماية على الخادم الخاص بك.
يمكنك اختيار إما mysql.exe أو استخدام MySQL Workbench مع قاعدة بيانات Azure ل MySQL - الخادم المرن -> للاتصال بالخادم من بيئتك المحلية.
يوضح المثال التالي كيفية الاتصال بخادمك المرن باستخدام واجهة سطر أوامر psql. استخدم--ssl-mode=REQUIREDإعداد سلسلة الاتصال لفرض التحقق من شهادة TLS/SSL. قم بتمرير مسار ملف الشهادة المحلية إلى--ssl-caالمعلمة. استبدل القيم باسم الخادم الفعلي وكلمة المرور.
sudo apt-get install mysql-client
wget --no-check-certificate https://cacerts.digicert.com/DigiCertGlobalRootG2.crt.pem
mysql -h mydemoserver.mysql.database.azure.com -u mydemouser -p --ssl-mode=REQUIRED --ssl-ca=DigiCertGlobalRootG2.crt.pem
إشعار
تأكد من أن القيمة التي تم تمريرها--ssl-ca تتطابق مع مسار الملف للشهادة التي قمت بحفظها.
إذا كنت تتصل بقاعدة بيانات Azure لـ MySQL - خادم مع SSL وتستخدم خياراً لإجراء التحقق الكامل (sslmode=VERTIFY_IDENTITY) مع اسم موضوع الشهادة، فاستخدم <servername.mysql.database.azure.com> في سلسلة الاتصال الخاصة بك.
إذا حاولت الاتصال بالخادم الخاص بك باستخدام اتصالات غير مشفرة، فسترى خطأ يفيد بأن الاتصالات التي تستخدم النقل غير الآمن محظورة على غرار الاتصالات أدناه:
ERROR 3159 (HY000): Connections using insecure transport are prohibited while --require_secure_transport=ON.
تحقق من اتصال TLS/SSL
نفذ أمر mysql stauts للتحقق من اتصالك بخادم MySQL باستخدام TLS/SSL:
mysql> status
تأكد من تشفير الاتصال من خلال مراجعة الإخراج، والذي يجب أن يظهر: SSL: التشفير قيد الاستخدام هو . تعرض مجموعة التشفير هذه مثالا واستنادا إلى العميل، يمكنك رؤية مجموعة تشفير مختلفة.
كيفية تحديد بروتوكولات TLS التي تم تكوينها على الخادم الخاص بك؟
يمكنك تشغيل الأمر إظهار المتغيرات العمومية مثل "tls_version"؛ وتحقق من القيمة لفهم ما تم تكوين جميع البروتوكولات.
mysql> SHOW GLOBAL VARIABLES LIKE 'tls_version';
كيفية العثور على بروتوكول TLS الذي يستخدمه عملائي للاتصال بالخادم؟
يمكنك تشغيل الأمر أدناه والنظر في tls_version لجلسة العمل لتحديد إصدار TLS المستخدم للاتصال.
SELECT sbt.variable_value AS tls_version, t2.variable_value AS cipher,
processlist_user AS user, processlist_host AS host
FROM performance_schema.status_by_thread AS sbt
JOIN performance_schema.threads AS t ON t.thread_id = sbt.thread_id
JOIN performance_schema.status_by_thread AS t2 ON t2.thread_id = t.thread_id
WHERE sbt.variable_name = 'Ssl_version' and t2.variable_name = 'Ssl_cipher' ORDER BY tls_version;
الاتصال بقاعدة بيانات Azure لمثيل خادم MySQL المرن مع اتصالات مشفرة باستخدام أطر عمل تطبيقات مختلفة
تتضمن سلاسل الاتصال المحددة مسبقًا في صفحة "سلاسل الاتصال" ضمن الخادم الخاص بك في المدخل الخاص بـ Azure المعلمات المطلوبة للغات الأكثر شهرة للاتصال بخادم قاعدة البيانات باستخدام TLS/SSL. تختلف المعلمة TLS/SSL استنادًا إلى الموصل. على سبيل المثال، "useSSL=true" أو "sslmode=required" أو "ssl_verify_cert=true" والتباينات الأخرى.
لإنشاء اتصال مشفر بقاعدة بيانات Azure لمثيل خادم MySQL المرن عبر TLS/SSL من التطبيق الخاص بك، راجع نماذج التعليمات البرمجية التالية:
WordPress
قم بتنزيل شهادة SSL العامة وأضف الأسطر التالية في wp-config.php بعد السطر // **MySQL settings - You can get this info from your web host** //.
//** Connect with SSL ** //
define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);
//** SSL CERT **//
define('MYSQL_SSL_CERT','/FULLPATH/on-client/to/DigiCertGlobalRootG2.crt.pem');
PHP
$conn = mysqli_init();
mysqli_ssl_set($conn,NULL,NULL, "/var/www/html/DigiCertGlobalRootG2.crt.pem", NULL, NULL);
mysqli_real_connect($conn, 'mydemoserver.mysql.database.azure.com', 'myadmin', 'yourpassword', 'quickstartdb', 3306, MYSQLI_CLIENT_SSL);
if (mysqli_connect_errno()) {
die('Failed to connect to MySQL: '.mysqli_connect_error());
}
PHP (باستخدام PDO)
$options = array(
PDO::MYSQL_ATTR_SSL_CA => '/var/www/html/DigiCertGlobalRootG2.crt.pem'
);
$db = new PDO('mysql:host=mydemoserver.mysql.database.azure.com;port=3306;dbname=databasename', 'myadmin', 'yourpassword', $options);
بايثون (MySQLConnector Python)
try:
conn = mysql.connector.connect(user='myadmin',
password='<password>',
database='quickstartdb',
host='mydemoserver.mysql.database.azure.com',
ssl_ca='/var/www/html/DigiCertGlobalRootG2.crt.pem')
except mysql.connector.Error as err:
print(err)
بايثون (PyMySQL)
conn = pymysql.connect(user='myadmin',
password='<password>',
database='quickstartdb',
host='mydemoserver.mysql.database.azure.com',
ssl={'ca': '/var/www/html/DigiCertGlobalRootG2.crt.pem'})
جانغو (PyMySQL)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'quickstartdb',
'USER': 'myadmin',
'PASSWORD': 'yourpassword',
'HOST': 'mydemoserver.mysql.database.azure.com',
'PORT': '3306',
'OPTIONS': {
'ssl': {'ca': '/var/www/html/DigiCertGlobalRootG2.crt.pem'}
}
}
}
ياقوت
client = Mysql2::Client.new(
:host => 'mydemoserver.mysql.database.azure.com',
:username => 'myadmin',
:password => 'yourpassword',
:database => 'quickstartdb',
:sslca => '/var/www/html/DigiCertGlobalRootG2.crt.pem'
)
Golang
rootCertPool := x509.NewCertPool()
pem, _ := ioutil.ReadFile("/var/www/html/DigiCertGlobalRootG2.crt.pem")
if ok := rootCertPool.AppendCertsFromPEM(pem); !ok {
log.Fatal("Failed to append PEM.")
}
mysql.RegisterTLSConfig("custom", &tls.Config{RootCAs: rootCertPool})
var connectionString string
connectionString = fmt.Sprintf("%s:%s@tcp(%s:3306)/%s?allowNativePasswords=true&tls=custom",'myadmin' , 'yourpassword', 'mydemoserver.mysql.database.azure.com', 'quickstartdb')
db, _ := sql.Open("mysql", connectionString)
Java (موصل MySQL لـJava)
# generate truststore and keystore in code
String importCert = " -import "+
" -alias mysqlServerCACert "+
" -file " + ssl_ca +
" -keystore truststore "+
" -trustcacerts " +
" -storepass password -noprompt ";
String genKey = " -genkey -keyalg rsa " +
" -alias mysqlClientCertificate -keystore keystore " +
" -storepass password123 -keypass password " +
" -dname CN=MS ";
sun.security.tools.keytool.Main.main(importCert.trim().split("\\s+"));
sun.security.tools.keytool.Main.main(genKey.trim().split("\\s+"));
# use the generated keystore and truststore
System.setProperty("javax.net.ssl.keyStore","path_to_keystore_file");
System.setProperty("javax.net.ssl.keyStorePassword","password");
System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
System.setProperty("javax.net.ssl.trustStorePassword","password");
url = String.format("jdbc:mysql://%s/%s?serverTimezone=UTC&useSSL=true", 'mydemoserver.mysql.database.azure.com', 'quickstartdb');
properties.setProperty("user", 'myadmin');
properties.setProperty("password", 'yourpassword');
conn = DriverManager.getConnection(url, properties);
Java (موصل MariaDB لـJava)
# generate truststore and keystore in code
String importCert = " -import "+
" -alias mysqlServerCACert "+
" -file " + ssl_ca +
" -keystore truststore "+
" -trustcacerts " +
" -storepass password -noprompt ";
String genKey = " -genkey -keyalg rsa " +
" -alias mysqlClientCertificate -keystore keystore " +
" -storepass password123 -keypass password " +
" -dname CN=MS ";
sun.security.tools.keytool.Main.main(importCert.trim().split("\\s+"));
sun.security.tools.keytool.Main.main(genKey.trim().split("\\s+"));
# use the generated keystore and truststore
System.setProperty("javax.net.ssl.keyStore","path_to_keystore_file");
System.setProperty("javax.net.ssl.keyStorePassword","password");
System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
System.setProperty("javax.net.ssl.trustStorePassword","password");
url = String.format("jdbc:mariadb://%s/%s?useSSL=true&trustServerCertificate=true", 'mydemoserver.mysql.database.azure.com', 'quickstartdb');
properties.setProperty("user", 'myadmin');
properties.setProperty("password", 'yourpassword');
conn = DriverManager.getConnection(url, properties);
.NET (MySqlConnector)
var builder = new MySqlConnectionStringBuilder
{
Server = "mydemoserver.mysql.database.azure.com",
UserID = "myadmin",
Password = "yourpassword",
Database = "quickstartdb",
SslMode = MySqlSslMode.VerifyCA,
SslCa = "DigiCertGlobalRootG2.crt.pem",
};
using (var connection = new MySqlConnection(builder.ConnectionString))
{
connection.Open();
}
Node.js
var fs = require('fs');
var mysql = require('mysql');
const serverCa = [fs.readFileSync("/var/www/html/DigiCertGlobalRootG2.crt.pem", "utf8")];
var conn=mysql.createConnection({
host:"mydemoserver.mysql.database.azure.com",
user:"myadmin",
password:"yourpassword",
database:"quickstartdb",
port:3306,
ssl: {
rejectUnauthorized: true,
ca: serverCa
}
});
conn.connect(function(err) {
if (err) throw err;
});
المحتوى ذو الصلة
- استخدام MySQL Workbench مع Azure Database for MySQL - Flexible Server
- استخدام PHP مع قاعدة بيانات Azure ل MySQL - خادم مرن
- إنشاء وإدارة الشبكات الظاهرية لقاعدة بيانات Azure ل MySQL - خادم مرن باستخدام Azure CLI
- الشبكات في قاعدة بيانات Azure ل MySQL - خادم مرن
- قاعدة بيانات Azure ل MySQL - قواعد جدار حماية الخادم المرن