วันศุกร์ที่ 12 กันยายน พ.ศ. 2557

มาทำให้ MongoDB มี การ authen User ด้วย(Password) กันเถอะ

เริ่มแรก ต้อง ต้องกำหนดให้ mongod มีการ  authen ด้วย(Password) ก่อน
ทำได้ 2 วิธี (อาจจะมีวิธีอื่น แต่ผู้เขียนขี้เกียจหาแล้ว)

วิธีที่ 1

start service ด้วย command นี้   (เพิ่มอันนี้เข้ามา--auth )
D:\Nosql_DB\mongodb2.6.4\bin\mongod.exe --auth --dbpath "D:\Nosql_DB\mongodb2.6.4\data"

วิธีที่ 2
start service ด้วย command นี้   แล้วไปอ่านค่าใน config เอา

D:\Nosql_DB\mongodb2.6.4\bin\mongod.exe --config "D:\Nosql_DB\mongodb2.6.4\bin\mongodb.conf"

สำหรับ ไฟล์ config สามารถเขียนได้ดังนี้
storage:
 dbPath: D:\Nosql_DB\mongodb2.6.4\data
security:
 authorization: enabled

แสนจะง่ายดาย

เสร็จแล้วลองเข้าใช้งาน mongoDB ด้วย command ดังนี้ D:\Nosql_DB\mongodb2.6.4\bin\mongo.exe

เมื่อเข้าไปแล้ว ขั้นตอนต่อไป คือ การเริ่มสร้าง USER ขึ้นมา โดยเราจะเริ่มสร้าง USER ที่มีชื่อว่า SiteAdmin ใน DB ชื่อว่า admin
ด้วย command ต่อไปนี้นะจ๊ะ

use admin;
db.createUser(
{
       user:  "SiteAdmin "  ,
        pwd:  "password"   ,
        roles:  
        [
             {
              role:   "userAdminAnyDatabase" ,
              db:   "admin"
             }
        ]
}
)
เมื่อ create เสร็จแล้ว ให้ restart instance service mongodb แล้ว login เข้ามาใหม่นะจ๊ะ
ทดสอบ login ด้วย user และ password ที่เราได้ create ขึ่นเมื่อกี๊ ด้วย command ดังนี้
mongo.exe -u SiteAdmin  -p password --authenticationDatabase admins
หลังจาก login สำเร็จ ผู้อ่านจะพบถึงความแตกต่าง คือ จะไม่สามารถ ใช้ command show collections ของ DB ที่เราไม่มีสิทธ์ ได้

ถ้าหากต้องการตรวจตอบว่าเรา มีสิทธื ใน db นี้หรือไม่ สามารถตรวจสอบได้จากคำสั่งดังต่อไปนี้
db.runCommand( { userInfo: "SiteAdmin" , showPrivileges: true});

ถ้าจำไม่ได้ว่ามี User อะไรบ้าง ก้อให้ใช้ command นี้
db.getUsers() ;

ต่อไปจะเป็นตัวอย่าง การเพิ่ม สิทธ์ (Role) ให้สามารถอ่านเขียนได้
db.grantRolesToUser(
       "SiteAdmin ",
       [
               {role: "readWrite" , db: "products"}  ,
               { role:  "readAnyDatabase" , db: "admin"}
       ]
)

ต่อไปเป็นการลบ User ออกจากระบบ  (ลบทั้งหมดนะ)

db.dropAllUsers( {w: "majority"  , wtimeout: 5000})

ยังมีคำสั่งอีกมากมายไว้มีเวลา จะมาเขียนให้ดูใหม่นะจ๊ะ บะบาย