it-swarm.dev

إزالة الامتيازات من قاعدة بيانات MySQL

قبل أن تظن أن هذا سؤال مكرر ، أعتقد أن لدي حالة فريدة ، حتى لو كانت باهتة إلى حد ما.

قبل بضعة أيام ، قمت بترقية إصدار MySQL على خادم Ubuntu 10.04 الخاص بي إلى 5.3.3 (وهو متقدم على إصدارات Ubuntu لـ 10.04). اليوم ، حاولت تسجيل الدخول إلى phpMyAdmin عن شيء واكتشفت خطأ Connection for controluser as defined in your configuration failed اللعين بعض الشيء.

بعد اتباع الأوصاف من العديد من SO أسئلة حول كيفية إصلاح ذلك ، أصبحت عالقة.

  • حاولت إعادة تكوين phpMyAdmin ، دون نجاح.
  • لقد حاولت إلغاء تثبيت phpMyAdmin وإعادة تثبيته ، لكنه لم يتمكن من إزالة الامتيازات من قاعدة البيانات وفشل.
  • حاولت بعد ذلك إزالة الامتيازات للمستخدم يدويًا - بحماقة إلى حد ما ، قد أضيف - من قاعدة البيانات ، ثم أسقط الديسيبل ، ثم المستخدم (مع flush privileges).
  • لقد أسقطت تثبيت phpMyAdmin بالكامل (حذف التطبيق و/etc/phpmyadmin directory) وأعدت تثبيته (باستخدام apt-get) لكنه قال إن أذونات مستخدم phpmyadmin موجودة بالفعل:

granting access to database phpmyadmin for [email protected]: already exists

لذلك ، ها هو ما تبقى لي. لدي منحة لا يمكنني تعديلها أو إبطالها:

mysql> show grants for 'phpmyadmin'@'localhost';
+-------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                   |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'phpmyadmin'@'localhost' IDENTIFIED BY PASSWORD '*46CFC7938B60837F46B610A2D10C248874555C14' |
| GRANT ALL PRIVILEGES ON `phpmyadmin`.* TO 'phpmyadmin'@'localhost'                                                |
+-------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.26 sec)

mysql> revoke usage on *.* from 'phpmyadmin'@'localhost';
ERROR 1141 (42000): There is no such grant defined for user 'phpmyadmin' on Host 'localhost'

mysql> revoke usage on *.* from 'phpmyadmin'@'localhost' identified by 'trustno1';
ERROR 1141 (42000): There is no such grant defined for user 'phpmyadmin' on Host 'localhost'

(لا تقلق ، لم أعد أستخدم كلمة المرور هذه بعد الآن ، ولكنها كانت كلمة المرور التي تم استخدامها سابقًا وليست كلمة المرور التي اخترتها للتثبيت phpmyadmin الجديد).

كيف يمكنني إزالة هذه المنح/الامتيازات بالكامل؟ أنا سعيد للبدء من جديد من نقطة الصفر إذا لزم الأمر (phpmyadmin ، وليس DB).

50
Cyntech

يعني امتياز USAGE في mysql ببساطة أنه لا توجد امتيازات للمستخدم 'phpadmin' @ 'localhost' المحدد على المستوى العالمي *.*. بالإضافة إلى ذلك ، يتمتع المستخدم نفسه بامتياز ALL على قاعدة بيانات phpmyadmin phpadmin.*.

لذلك إذا كنت ترغب في إزالة جميع الامتيازات والبدء من الصفر تمامًا ، قم بما يلي:

  • إبطال جميع الامتيازات على مستوى قاعدة البيانات:

    REVOKE ALL PRIVILEGES ON phpmyadmin.* FROM 'phpmyadmin'@'localhost';

  • إسقاط المستخدم "phpmyadmin" @ "المضيف المحلي"

    DROP USER 'phpmyadmin'@'localhost';

الإجراء أعلاه سيزيل المستخدم تمامًا من حالتك ، وهذا يعني أنه يمكنك إعادة إنشائه من نقطة الصفر.

لإعطائك خلفية صغيرة حول ما هو موضح أعلاه: بمجرد إنشاء مستخدم ، سيتم ملء جدول mysql.user. إذا نظرت إلى سجل فيه ، فسترى المستخدم وجميع الامتيازات مضبوطة على 'N'. إذا قمت بـ show grants for 'phpmyadmin'@'localhost'; فسترى ، familliar allready ، الإخراج أعلاه. ترجم ببساطة إلى "لا امتيازات على المستوى العالمي للمستخدم". الآن منحتك ALL لهذا المستخدم على مستوى قاعدة البيانات ، سيتم تخزين هذا في الجدول mysql.db. إذا قمت بتنفيذ SELECT * FROM mysql.db WHERE db = 'nameofdb'; ، فسترى 'Y' في كل حالة خاصة.

يظهر أعلاه وصف السيناريو الذي لديك على ديسيبل الخاص بك في الوقت الحاضر. يعني وجود مستخدم لديه امتياز USAGE فقط ، أنه يمكن لهذا المستخدم الاتصال ، ولكن إلى جانب SHOW GLOBAL VARIABLES; SHOW GLOBAL STATUS; ، ليس لديه امتيازات أخرى.

97
Flo Doe

كملاحظة جانبية ، السبب في أن revoke usage on *.* from 'phpmyadmin'@'localhost'; لا يعمل هو أمر بسيط للغاية: لا توجد منحة تسمى USAGE.

المنح الفعلية المسماة موجودة في وثائق MySQL

المنحة USAGE هي منحة منطقية. ماذا؟ يحتوي 'phpmyadmin' @ 'localhost' على إدخال في mysql.user حيث user = 'phpmyadmin' و Host = 'localhost'. أي صف في mysql.user يعني دلالة USAGE. تشغيل DROP USER 'phpmyadmin'@'localhost'; يجب أن يعمل بشكل جيد. تحت الغطاء ، يفعل ذلك حقًا:

DELETE FROM mysql.user WHERE user='phpmyadmin' and Host='localhost';
DELETE FROM mysql.db   WHERE user='phpmyadmin' and Host='localhost';
FLUSH PRIVILEGES;

لذلك ، فإن إزالة صف من mysql.user تشكل تشغيل REVOKE USAGE ، على الرغم من أنه لا يمكن تنفيذ REVOKE USAGE حرفياً.

14
RolandoMySQLDBA