حماية قواعد بيانات MySQL

 

حماية قواعد بيانات MySQL

كما يعلم أصحاب المواقع والسيرفرات أن قواعد بيانات MySQL مستخدمة بشكل واسع وكبير وتكاد تكون الخيار الوحيد كقاعدة بيانات بناء موقع أو سيرفر.

سوف أتطرق بهذة التدوينة إلى طرق رفع مستوى قواعد بيانات بيانات MySQL على مستوى “السيرفر”، وليس على مستوى التطبيق الذي يستخدم قواعد البيانات.

تطبيق هذة الخطوات الأمنية جداً سهل وسلسل، فقط تحتاج حساب المستخدم الجذري Root قبل البدء بأي خطوة، وسيتم التطبيق على أنظمة لينكس RedHat/Fedora/CentOs. وقد تنطبق على أنظمة لينكس الأخرى.

سيتم التعديل بشكل كامل على الملف my.cnf، لذلك قم بفتحه عن طريق vi أو أي محرر نصوص تفضله:

vi /etc/my.cnf
وتأكد أن تقوم بإعادة تشغيل قواعد بيانات MySQL بعد أي عملية تعديل في الملف my.cnf كالتالي:
/etc/init.d/mysql-server restart

الخيارات 1 و 2 التي سوف أتطرق لها قم بإضافاتها أسفل

[mysqld]

1- تعطيل الإتصال بالشبكة بشكل كامل:

skip-networking

سبب هذا الأجراء الأمني أنه في حالة وجود حساب على قاعدة البيانات غير مؤمن بكلمة مرور أو كلمة مرور ضعيفة أو في حالة سرقة أحد الحسابات الموجودة على قاعدة البيانات لن يستطيع الإستفادة منه عن بعد للتحكم أو لخرق خصوصية قاعدة البيانات.

علماً أن التطبيقات التي تعمل على نفس السيرفر  وتستخدم هذة قاعدة البيانات تستخدم Sockets وليس عن طريق الشبكة، إلا في بعض الحالات.

2- تشغيل قاعدة البيانات للعمل على IP محدد، وليس على جميع IPs السيرفر:

bind-address  = aa.bb.cc.dd

سبب هذا الإجراء في حالة وجود كرتي شبكة على نفس السيرفر، الكرت الأول يحتوي على IP خاص للتواصل بين السيرفرات التي بنفس شبكته، والكرت الثاني يحتوي على IP عام Public متصل بالإنترنت. يمكنك إجبار قاعدة البيانات فقط بالإتصال بالسيرفرات الموجودة في شبكتك الداخلية الخاصية وعدم إستقبالها لأي إتصال من قادم من الإنترنت.

علماً أنه يمكن الإستغناء عن الخيار رقم 1 بالأعلى بجعل قاعدة البيانات تعمل على الأي بي المحلي 127.0.0.1 كالتالي:

bind-address = 127.0.0.1

3- وضع كلمة مرور للحساب الجذري root:

# mysqladmin -u root password "NEW-PASSWORD"

قم بإستبدال NEW-PASSWORD بكلمة مرور تريدها للحساب root الخاص بقاعدة البيانات وليس الخاص بالسيرفر.

سبب هذا الأجراء الأمني أنه للأسف بعد تثبيت قاعدة البيانات MySQL لايتم وضع كلمة مرور للحساب الجذري root! مما يعني أنه يمكن ﻷي مستخدم محدود، ليس root، لديه صلاحية الدخول على السيرفر أن يدخل على قاعدة البيانات بصلاحيات المستخدم الجذري بالشكل التالي:

$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
mysql> use mysql;
Database changed
mysql> select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+

كما تلاحظ، إستطعت أن أدخل على الحساب الجذري بدون كلمة مرور مع أنني مستخدم محدود على السيرفر!

4- تفادي إستخدام الحساب الجذري root بشكل كامل بداخل تطبيقك وإستخدام مستخدم محدد

mysql> create database jerais_blog;
mysql> grant all privileges on jerais_blog.* to jerais@"localhost" identified by "PASSWORD"

بالأمر الأول قمت بإنشاء قاعدة بيانات بإسم jerais_blog، ثم قمت بالأمر الثاني بمنح كامل الصلاحيات على قاعدة البيانات jerais_blog إلى المستخدم jerais الموجود “فقط” على نفس السيرفر localhost والذي كلمة مروره هي PASSWORD.

الخيار jerais@”localhost” جدا مهم لتحديد من أين يستطيع المستخدم jerais الوصول إلى قاعدة بيانات jerais_blog.

إذا كنت أريد أن يستطيع المستخدم jerais أن يتصل بقاعدة البيانات من السيرفر الذي اسم server.jerais.com فقط، أنفذ الأمر بالشكل التالي:

mysql> grant all privileges on jerais_blog.* to jerais@"server.jerais.com" identified  by "PASSWORD".

اما إذا كنت أردت أن يستطيع المستخدم jerais الوصول إلى قاعدة البيانات jerais_blog من نطاق الشبكة 192.168.1.0/24، أعمل كالتالي:

mysql> grant all privileges on jerais_blog.* to jerais@"192.168.1.0/255.255.255.0" identified by "PASSWORD"

اما إذا كنت تريد ان يكون حساب المستخدم jerais قادر على الوصول إلى قاعدة البيانات من جميع عناوين الشبكة سوا الأمنة والغير أمنة مثل الإنترنت، يمكنك عمله كالتالي:

mysql> grant all privileges on jerais_blog.* to jerais@"%" identified by "PASSWORD"

الأمر الأخير جداً خطير ﻷنه لو تمت سرقة الحساب jerais سيتم الوصول إلى قاعدة بياناتك من جميع أنحاء العالم!

5- إستخدام الأداة mysql_secure_installation  بعد تثبيت MySQL:

# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
Set root password? [Y/n] Y هل تريد وضع كلمة مرور لحساب المستخدم الجذري لقاعدة البيانات؟
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] Y هل تريد حذف المستخدم المجهول من قاعدة البيانات، غالباً توجد في أنظمة ويندوز
... Success!
Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] Y هل تريد السماح للمستخدم الجذري بالدخول إلى قاعدة البيانات عن بعد بواسطة الشبكة؟
... Success!
By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] Y هل تريد حذف قاعدة البيانات التجريبية التي تم إنشائها وقت تثبيت قاعدة البيانات؟
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y هل تريد تطبيق الخيارات بالأعلى الآن؟
... Success!
Cleaning up...
All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.
Thanks for using MySQL!

الأداة mysql_secure_installation جداً رائعة وعملية لزيادة أمان قاعدة البيانات لديك. بعد تنفيذ الأمر بالأعلى سوف تظهر لك قائمة بالخيارات التي بالأعلى، وتستطيع أن تجيب عليها إما ب Y او N.

بعض النقاط:

1- بعد تنفيذ أي أمر في شيل mysql متعلق بالصلاحيات، نفذ  flush privileges;

2- يوجد مشروع GreenSQL لحماية قواعد بيانات MySQL من هجمات الحقن SQL Injection، ويعمل كطبقة فلترة فوق قاعدة البيانات.

3- لزيادة أمان قاعدة البيانات الخاصة بالمستخدم المحدود، يفضل بعد أن تنشىء قاعدة بيانات خاصة به كما في الخطوة 4 أن فقط تمنحه صلاحيات محدودة على قاعدة البيانات، مثلاً تمنحه صلاحية الإستعلام  Select فقط ولن يستطيع عمل إضافة أو تعديل أو حذف على قاعدة البيانات الخاصة به. وهذا يتعمد بشكل كلي على تطبيقك.

4- تأكد من وجود نسخة إحتياطية وبشكل محدث من قواعد بياناتك، قد أتطرق لها في تدوينة قادمة بإذن الsuive la source

suive la source

http://jerais.com/plug/

 

Une réflexion sur “حماية قواعد بيانات MySQL

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s