سؤال

أحاول اكتشاف MongoDB من أجل تقييم ما إذا كان هذا هو الطريق الذي أرغب في اتباعه للتطبيقات المستقبلية أم لا.من أجل نشره بشكل معقول على الخادم الخاص بي، يجب أن أقوم بتشغيله مع تمكين المصادقة (أي:مع ال --auth حجة أو مع auth = true في ملف التكوين).

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

جري بدون auth يعطي النتيجة التي يأملها المرء - يتم تشغيله بالإخراج التالي:

Thu Dec 10 21:14:24 Mongo DB : starting : pid = 9350 port = 27017 dbpath = /var/mongodb_data master = 0 slave = 0  64-bit 
Thu Dec 10 21:14:24 db version v1.3.0-, pdfile version 4.5
Thu Dec 10 21:14:24 git version: 32d56f6d81a98b569103149c9ffea9f25a1ece81
Thu Dec 10 21:14:24 sys info: Darwin erh2.10gen.cc 9.6.0 Darwin Kernel Version 9.6.0: Mon Nov 24 17:37:00 PST 2008; root:xnu-1228.9.59~1/RELEASE_I386 i386 BOOST_LIB_VERSION=1_37
Thu Dec 10 21:14:24 waiting for connections on port 27017

ومع ذلك، تشغيل مع المصادقة (باستخدام أي من الطريقتين، arg أو توجيه التكوين) تعطي المخرجات التالية وتخرج العملية على الفور:

Thu Dec 10 21:15:37 Mongo DB : starting : pid = 9361 port = 27017 dbpath = /var/mongodb_data master = 0 slave = 0  64-bit 
Thu Dec 10 21:15:37 User Exception unauthorized
Thu Dec 10 21:15:37  local.system.namespaces  Caught Assertion in runQuery ns:local.system.namespaces userassert:unauthorized
Thu Dec 10 21:15:37   ntoskip:0 ntoreturn:0
Thu Dec 10 21:15:37   query:{ name: /^local.temp./ }
Thu Dec 10 21:15:37 query local.system.namespaces ntoreturn:0 exception  0ms
Thu Dec 10 21:15:37 Dropping old temporary collection: 
Thu Dec 10 21:15:37 User Exception no collection name
Thu Dec 10 21:15:37   exception in initAndListen std::exception: no collection name, terminating
Thu Dec 10 21:15:37  dbexit: 
Thu Dec 10 21:15:37   shutdown: going to flush oplog...
Thu Dec 10 21:15:37   shutdown: going to close sockets...
Thu Dec 10 21:15:37   shutdown: waiting for fs...
Thu Dec 10 21:15:37   shutdown: closing all files...
Thu Dec 10 21:15:37      closeAllFiles() finished
Thu Dec 10 21:15:37   shutdown: removing fs lock...
Thu Dec 10 21:15:37  dbexit: really exiting now
ERROR: Client::shutdown not called!

كما هو مذكور في العلامات، يتم تشغيل هذا على OS X Snow Leopard ويستخدم أحدث تنزيل ثنائي OS X 64bit ليليًا 1.3.x (هل يجب أن أعود إلى الإصدار 1.2 المستقر ربما؟)

هل لديك أي فكرة عن سبب هذا وما الذي يمكنني فعله لحله؟إنه ليس مهمًا جدًا على جهازي المحلي ولكني أحتاجه للعمل في الوضع الآمن لجعله عمليًا لأي استخدام إنتاجي على الإطلاق.


ملاحظة:إذا كان يجب أن يكون هذا على ServerFault بدلاً من SO، فلا تتردد في نقله هناك.لم أكن متأكدة من البيئة التي تناسبه بشكل أفضل.


تحديث:

لقد حاولت التشغيل بدون مصادقة وإضافة مستخدم وإعادة التشغيل باستخدام المصادقة على النحو الموصى به من قبل mdirolf وMathias.ومع ذلك، فإنه لا يزال يطرح نفس الخطأ.تمت إضافة المستخدم بالطريقة التالية:

Mark@Destiny mongodb$ sudo bin/mongo
MongoDB shell version: 1.3.0-
url: test
connecting to: test
type "help" for help
> use admin
switched to db admin
> db.addUser("Mark", "my-password-went-here")   
{ "user" : "Mark", "pwd" : "9934...be15da0" }
> db.system.users.find()
{ "_id" : ObjectId("4b216ed0be8a0b185767654e"), "user" : "Mark", "pwd" : "9934a190b...babe15da0" }
> exit
bye

يثبت التشغيل اللاحق بدون مصادقة والدخول إلى mongo Shell أن المستخدم لا يزال موجودًا في الواقع.هل أفعل شيئًا غبيًا؟

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

المحلول

اه، يبدو أنك وجدت خطأ في الماجستير.لقد قمت بإنشاء حالة لذلك: http://jira.mongodb.org/browse/SERVER-474.

يرجى تجربة الإصدار mongodb 1.2.0 الذي تم إصداره مؤخرًا.Git master (فرع 1.3.x) هو لا جاهز للاستخدام حتى الآن.

نصائح أخرى

يجب أن يكون لديك بالفعل مستخدم في قاعدة بيانات المشرف قبل بدء تشغيل الخادم باستخدام --auth.لقد أضفت للتو ملاحظة إلى المستندات لذكر ذلك حتى لا يتفاجأ أي شخص آخر.

بالمناسبة، معظم عمليات نشر mongodb للإنتاج (إن لم يكن كلها) تعمل بدون مصادقة.نوصي بالتعامل مع المصادقة في التطبيق الخاص بك وتكوين جدار الحماية على خادم قاعدة البيانات الخاص بك للسماح فقط بالاتصالات من خوادم الويب/التطبيقات الخاصة بك.

تحتاج إلى إضافة مستخدم قبل البدء بـ --auth.ابدأ بدون --auth وأضف مستخدمًا، ثم أعد التشغيل باستخدام --auth.

تم تحديث قسم الأمان لوصف ذلك.

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