mongoDB 3.0 以上安全访问,设置密码

本文详细介绍了如何在MongoDB 3.x版本中设置认证,包括创建管理员用户、配置安全认证、创建普通用户及角色,并演示了如何通过不同权限的操作验证权限配置的有效性。
  • 第一、首先,不使用 –auth 参数,启动 mongoDB:

    mongod -f /etc/mongodb.conf
    此时你 show dbs 会看到只有一个local数据库,那个所谓的admin是不存在的。
    mongoDB 没有用户root,只有能管理用户的用户 userAdminAnyDatabase。
    此时打开mongo客户端
    /usr/local/mongodb/bin/mongo

  • 第二、添加管理用户
    use admin
    db.createUser(
    {
    user: “admin”,
    pwd: “123456”,
    roles: [ { role: “userAdminAnyDatabase”, db: “admin” } ]
    }
    )
    有很多文章记录的是使用 db.addUser(…) 方法,这个方法是旧版的,3.0中已经不存在,详见:http://docs.mongodb.org/manual/reference/method/js-user-management
    原文章:http://ibruce.info/2015/03/03/mongodb3-auth/

    切换到admin下,查看刚才创建的用户:
    show users

    db.system.users.find()

    怎么关闭 mongoDB?千万不要 kill -9 pid,可以 kill -2 pid 或 db.shutdownServer()

    开启认证
    –关闭之前打开的服务,重庆启用认证
    mongod -f /etc/mongodb.conf

    授权:
    –再次登陆
    use admin
    db.auth(‘admin’,’123456’)#认证,返回1表示成功

    /usr/local/mongodb/bin/mongo -u admin -p 123456 –authenticationDatabase admin

    和其他所有数据库一样,权限的管理都差不多一样。mongodb存储所有的用户信息在admin 数据库的集合system.users中,保存用户名、密码和数据库信息。mongodb默认不启用授权认证,只要能连接到该服务器,就可连接到mongod。若要启用安全认证,需要更改配置文件参数auth。

  • 第三、创建用户,用户都跟着库走,创建的用户都是
    1、先访问到admin数据库(创建角色)
    use admin
    db.auth(“admin”,”admin”)

    切换到 chat,在数据库 chat 中创建角色
    roles: 创建角色”testRole”在数据库 “chat” 中
    privileges: 该角色可查看”find”数据库”mydb”的所有集合
    db.dropRole(“testRole”) 删除操作

use chat
db.createRole({
role: “testRole”,
privileges: [{resource: { db: “chat”, collection: “” }, actions: [ “find” ] }],
roles: []
})

在admin数据库生成集合system.roles。查看角色。
use admin
switched to db admin
db.system.roles.find();
{ “_id” : “mydb.testRole”, “role” : “testRole”, “db” : “mydb”, “privileges” : [ { “resource” : { “db” : “mydb”, “collection” : “” }, “actions” : [ “find” ] } ], “roles” : [ ] }

回到mydb,在数据库mydb中创建用户并授予角色”testRole”
db.dropUser(“userkk”)

use mydb
db.createUser(
{
user: “userkk”,
pwd: “userkk”,
roles: [ { role: “testRole”, db: “mydb” } ]
}
)
退出mongodb,重新登录进行操作。发现只能使用find

给角色 “testRole” 添加3个 “Privileges”权限: “update”, “insert”, “remove”。再重新操作。
use admin

db.auth(“admin”,”admin”)

use mydb

添加Privileges给角色

db.grantPrivilegesToRole("testRole",  
 [{ resource: { db: "mydb", collection: "" },actions: [ "update", "insert", "remove" ]}  
])  

exit #退出mongodb重新登录  
use mydb    
db.auth("userkk","userkk")    
增删数据可以操作了!~  
db.tab.insert({"id":1000})  
db.tab.find({"id":1000})  
db.tab.remove({"id":1000})  

此时admin的角色记录为:  
> db.system.roles.find();  
{ "_id" : "mydb.testRole", "role" : "testRole", "db" : "mydb", "privileges" : [ { "resource" : { "db" : "mydb", "collection" : "" }, "actions" : [ "find", "insert", "remove", "update" ] } ], "roles" : [ ] }  

更改角色 roles,把roles值全部更新。同样Privileges也可以更新替换!~

use admin  
db.auth("admin","admin")  
use mydb  
db.updateRole("testRole",{ roles:[{ role: "readWrite",db: "mydb"}]},{ w:"majority" })  
db.auth("userkk","userkk")  
show dbs  

主要参考文章:http://blog.youkuaiyun.com/kk185800961/article/details/45619863
http://ibruce.info/2015/03/03/mongodb3-auth/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值