mongo安装及mongo验证机制修改方法
mongo安装方法
1、下载安装包:
# cd /data
# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.7.tgz
# curl -O -L https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.7.tgz
(可选择其他版本)
# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.1.tgz
2、解压:
# tar -zxvf mongodb-linux-x86_64-3.0.7.tgz
3、跳转目录:
# cd mongodb-linux-x86_64-3.0.7/
4、创建数据库目录和⽇志⽬录:
# mkdir db
# mkdir log
5、启动mongo:
# ./bin/mongod --dbpath=./db --logpath=./log/mongodb.log --fork -auth
6、关闭mongo:
# ps -x | grep mong
# netstat -nalupt | grep mongo
# kill -15 24674
通过配置⽂件启动Mongo
# mkdir data
# ./bin/mongod -f mongod.conf &
# /data/mongodb-linux-x86_64-3.0.7/bin/mongod -f /data/mongodblinux-x86_64-3.0.7/mongod.conf &
# /data/mongo/bin/mongod -f /data/mongo/mongod.conf &
创建账户:
# ./bin/mongo
use admin
db.createUser({user: "admin",pwd: "admin",roles: [ { role: "root", db:"admin" }]})
db.createUser({user: "admin",pwd: "ua#a.!@A4",roles: [ { role: "root", db: "admin" }]})
db.system.users.find()
db.dropUser("admin")
db.auth("admin","admin")
开机⾃自动启动:
# vi /etc/rc.d/rc.local
#mongo
/data/mongodb-linux-x86_64-3.0.7/bin/mongod -f /data/mongodblinux-x86_64-3.0.7/mongod.conf &
/data/mongo/bin/mongod -f /data/mongo/mongod.conf
/etc/rc.local 不执行的问题(Cenots7 不能自动执行)
chmod +x /etc/rc.d/rc.local
性能查看(密码包含特殊字符需要\转义)
./bin/mongotop -uadmin -padmin --authenticationDatabase=admin
./bin/mongotop -uadmin -pua#a.\!@A4 --authenticationDatabase=admin
mongo验证机制问题:
⼀切配置正常,本地以及远程客户端都可以正常连接,但是skynet连接失败
mongo的⽇志:
2017-01-20T01019015.461+0800 I NETWORK [initandlisten] connection accepted from
127.0.0.1059086 #6 (4 connections now open)
2017-01-20T01019015.462+0800 I ACCESS [conn6] authenticate db: admin { authenticate: 1, user: "admin", nonce: "xxx", key: "xxx" }
2017-01-20T01019015.462+0800 I ACCESS [conn6] Failed to authenticate admin@admin with mechanism MONGODB-CR: AuthenticationFailed MONGODB-CR credentials missing in the user document
2017-01-20T01019015.462+0800 I NETWORK [conn6] end connection
127.0.0.1059086 (3 connections now open)
发现mongo验证机制有问题。
解决⽅法一:修改 mongo 验证机制
mongod.conf
1、mongod.conf 打开 noauth=true
2、重启mongo,并本地连接
>use admin
>db.system.users.remove({})
>db.system.version.find({})
>db.system.version.remove({})
>db.system.version.insert({ "_id" : "authSchema",
"currentVersion" : 3 })
>db.system.version.find({})
>db.createUser(
{ user: "admin", pwd: "admin", roles: [ { role: "userAdminAnyDatabase", db: "admin" }
]
}
)
3.mongod.conf 打开 auth=true,并重启
同类问题,其它参考⽂文档:
mongodb 认证⽅方式(version:3.0.4):
之前一直在本机上跑,前段时间把后台架到云服务器上了,在settings里加上了username和password,希望同步的时候修改一下settings就能在本地测试。
因为云服务器端数据库连接需要验证,于是在本地也打算加上身份验证,而mongodb默认是没有验证的。
在网上搜索了一下,方法都比较旧,主要是在本地的mongodb中新增一个user:
进入mongodb下的bin
mongodb $ cd bin
不开启验证的方式启动mongodb
bin $ ./mongod -dbpath ../blog
输入mongo命令,进入test数据库
bin $ ./mongo
添加admin用户
use admin
db.createUser({
user:'admin',
pwd:'admin',
roles:[{role:'userAdminAnyDatabase',db:'admin'}]
})
切换到我的数据库(blog 为我的数据库名称),在我的数据库下创建用户
use blog
db.createUser({
user:'testuser',
pwd:'test',
roles:[{role:'dbOwner',db:'blog'}]
})
重启服务器,开启验证
bin $ ./mongod -dbpath ../blog --auth
使用Robomongo登陆,显示Authentication Failed,查看服务器日志:
2015-08-31T17:39:46.416+0800 I ACCESS [conn46] Failed to authenticate testuser@blog with mechanism MONGODB-CR: AuthenticationFailed MONGODB-CR credentials missing in the user document
查看文档,发现是因为mongodb验证方式改变,加入了(SCRAM)SHA-1
在mongo里将刚创建的用户删除
use blogdb.dropUser('testuser')
关闭验证重启数据库
在mongo里修改system.version文档里面的authSchema版本为3(旧版本)
use admin
db.system.version.update({'_id':'authSchema'},{$set:{'currentVersion':3}})
db.system.version.find()
可以看到:
{ "_id" : "authSchema", "currentVersion" : 3 }
删除之前创建的用户,重新创建用户(这一次使用验证方式为MONGODB-CR)
use blog
db.dropUser('testuser')
db.createUser({
user:'testuser',
pwd:'test',
roles:[{role:'dbOwner',db:'blog'}]
})
这一次可以用Robomongo成功登陆!
解决方法二:修改框架使验证方式
可配置框架本身可以⽀支持 mongo 的两种模式验证,⼀一劳永逸的解决⽅方法
config_db 配置添加 authmod 选项:
--authmod = "mongodb_cr"
authmod = "scram_sha1"
mian_db_svc.lua 添加参数
local function connect()
local dbhost = skynet.getenv("dbhost")
local dbport = skynet.getenv("dbport")
local dbname = skynet.getenv("dbname")
local username = skynet.getenv("username")
local password = skynet.getenv("password")
local authmod = skynet.getenv("authmod")
local conf = {host = dbhost, port = dbport, username = username, password = password, authmod = authmod}
local dbclient = mongo.client(conf)
db = dbclient:getDB(dbname)
initDBIndex(db)
end
需要注意的问题:
currentVersion为5(scram_sha1 模式)时,userAdminAnyDatabase 没有权限操作其它数据库(原因未知!!!)
数据库⽇日志:
2017-01-20T11025025.175+0800 I ACCESS [conn261] Unauthorized not authorized on cswz to execute command { createIndexes: "Role", indexes: [ { unique: true, name: "nickname_1_sid_1", key: { nickname: 1, sid: 1 } } ] }
2017-01-20T11025025.175+0800 I ACCESS [conn261] Unauthorized not authorized on cswz to execute command { createIndexes: "Role", indexes: [ { unique: true, name: "uid_1_sid_1", key: { uid: 1, sid: 1 } } ] }
2017-01-20T11025025.178+0800 I ACCESS [conn261] Unauthorized not authorized on cswz to execute command { createIndexes: "MailState", indexes: [ { unique: false, name: "roleId_-1", key: { roleId: -1 } } ] }
需要修改⻆角⾊色权限为:root
注:mongodb_cr 和 scram_sha1 两种验证机制对权限的影响,以后再具体研究。
关于⻆角⾊色,参考官⽅方⽂文档提取总结如下:
END!!!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 技术文章 > mongo安装及mongo验证机制修改方法