سؤال

للحصول على تطبيق داخلي Tomcat / Java / Struts، نقوم بإجراء تحويل رمز مصادقة مكتوب مخصص لاستخدام JDBCREALMM. قاعدة البيانات هي MySQL 5.0، ويتم تخزين كلمات المرور كما PASSWORD()-السلاسل الأربطة. في نسختنا من mysql، PASSWORD() وظيفة هو غير قياسي (الملكية؟) 41 بايت التجزئة. (أعرف الآن أننا يجب أن لا نستخدمها لكل كلمات المرور الخاصة بنا، ولكن يجب أن تستخدم بدلا من ذلك SHA1() أو MD5(). وبعد ولكن هنا نحن.)

هل هناك أي طريقة لاستخدام JDBMREALM دون إجبار جميع مستخدمينا على إعادة إدخال كلمات المرور الخاصة بهم حتى نتمكن من إعادة تشفيرها؟ هل هناك DBCREALM Digest الذي سيسمح لنا بمصادقة ضد PASSWORD()-عمود كلمة المرور العمود؟

هل كانت مفيدة؟

المحلول

إصدارات MySQL الجديدة تقديم وظيفة مسمى OLD_PASSWORD() أن هضم كلمة المرور بطريقة متوافقة مع 4.0 وقبل.

ما يمكنك القيام به، لذلك، هو تكوين jdbcrealmm. بطريقة أنه:

  1. لا يستخدم أي نوع من الهضم بنفسه. من الواضح أن هذا ليس مثاليا حتى في بيئة آمنة ويكون خطيرا بشكل مباشر إذا كان خادم قاعدة البيانات الخاص بك يعيش عبر اتصال غير موثوق به. أنت تفعل هذا من خلال عدم تحديد digest ينسب.
  2. يستخدم ما سبق OLD_PASSWORD() وظيفة لتشفير كلمة المرور قبل مقارنتها مع واحد من قاعدة البيانات. سيتعين عليك تمديد JDBCREALM، ولا يتم تقديم هذه الوظيفة من الصندوق. بالنسبة إلى Tomcat 6.0، عليك تجاوز authenticate(Connection c, String username, String credentials) طريقة.

يمكنك أيضا استخدام النهج المذكور أعلاه كجزء من استراتيجية الترحيل: هل دعم طريقة Overidenden كل من OLD_PASSWORD() وهضم وإجبار المستخدمين الذين لديهم مصادقة باستخدام OLD_PASSWORD() لتغيير كلمة المرور الخاصة بهم. مع مرور الوقت، نأمل أن تكون قادرا على التبديل إلى نهج هضم قياسي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top