/* */

mongo安装及mongo验证机制修改方法

分类:技术文章 时间:2023-04-11 10:10 浏览:0 评论:0
0

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

mongo安装及mongo验证机制修改方法  第1张

# 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安装及mongo验证机制修改方法  第2张

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

mongo安装及mongo验证机制修改方法  第3张

注:mongodb_cr 和 scram_sha1 两种验证机制对权限的影响,以后再具体研究。

关于⻆角⾊色,参考官⽅方⽂文档提取总结如下:

mongo安装及mongo验证机制修改方法  第4张

mongo安装及mongo验证机制修改方法  第5张

END!!!

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 技术文章 > mongo安装及mongo验证机制修改方法

用户评论