mongoDB-3.x启用认证
官方文档:
https://www.mongodb.org/downloads#production
https://docs.mongodb.org/manual/reference/method/js-user-management/
https://docs.mongodb.org/manual/reference/configuration-options/
https://docs.mongodb.org/manual/core/authentication/
环境:
CentOS6.5 x64
mongoDB-3.2.0
一.创建管理员用户
在启用认证前要先创建制授权用户
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
二.启用认证
命令行启动时加上 --auth
或
配置文件
security:
authorization: enabled
三.认证用户登录
mongo --host 192.168.192.10 --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
或
mongo shell交互式登录
注意: 用户是建在mongo内嵌的admin库中,验证时也需指定认证库
说明: 通过mongo shell命令行认证和登录都没问题,但通过第三方gui工具(如robomongo,目前还没适配3.x)可能会报认证失败的错,具体解决方法请参看mongoDB跨平台图形管理工具之robomongo
2015-12-30T18:11:20.019+0800 I ACCESS [conn7] Failed to authenticate myUserAdmin@admin with mechanism MONGODB-CR: AuthenticationFailed UserNotFound Could not find user myUserAdmin@admin
个人使用来看,mongoboost还是挺不错的
======================
(3)使用用刚才的超级帐号登录数据库(admin)mongo localhost:27017admin -u admin -p admin
现在,我们就可以为其他数据库添加用户了:
比如filedb库
use filedb
db.addUser("xzsp"," xzsp")
授予这个用户的权限:(必须要,否则无法进行读写操作)
db.auth("xzsp "," xzsp")
(4)现在可以用新用户登录并且操作filedb数据库了
3.关闭本地例外登录方式
一旦拥有了超级管理员,就可以考虑关闭本地例外方式登录了
方法如下:
重启数据库,启动时候加上--setParameter enableLocalhostAuthBypass=0即可,这样登录的话就必须要用账户认证了
4.删除用户
删除用户要针对某个数据库进行删除
> use filedb
switched to db test
> db.removeUser("xzsp")
5.修改用户密码
普通用户只能修改自己的密码,userAdmin角色帐号可以修改其他用户密码
例如:
mongo 192.168.69.54:40000/admin -u admin -p admin
use filedb
db.changeUserPassword("xzsp","xzsp@123")
(3)用管理员账户登录,建立新账户,让他可以读写数据库test
[root@54 ~]# mongo localhost:30000/admin -u superman -p superman
mongos> use test
switched to db test
mongos> db.addUser("test","test")
{
"user" : "test",
"readOnly" : false,
"pwd" : "a6de521abefc2fed4f5876855a3484f5",
"_id" : ObjectId("51fb5d4ecaa5917203f37f63")
}
mongos> db.auth("test","test")
1
(4)用新帐号test登录,操作数据库test
[root@54 ~]# mongo localhost:30000/test -u test -p test
MongoDB shell version: 2.4.4
connecting to: localhost:30000/test
> for( var i = 1; i < 100000; i++ ) db.test.insert( { x:i, C_ID:i } );
说明:为分片集群启用认证后,本地例外方式登录由于只具备admin数据库读写权限,无法进行分片操作。对本例来讲,添加分片,查看分片状态等操作都需要用superman帐号登录才行。执行数据库test操作用test帐号,这个帐号就是提供给客户端的帐号。
来源:oschina
链接:https://my.oschina.net/u/1038053/blog/788344