1 设置管理员账户
use admin
db.createUser({ user: "useradmin", pwd: "adminpassword", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] })
mongodb中的用户是基于身份role的,该管理员账户的 role是 userAdminAnyDatabase。 ‘userAdmin’代表用户管理身份,’AnyDatabase’ 代表可以管理任何数据库。
2 验证
db.auth("useradmin", "adminpassword")
如果返回1,则表示成功。
3 修改配置文件(注意缩进)
sudo vi /etc/mongod.conf
#security:
security:
authorization: enabled
4 重启mongodb
sudo service mongod restart
5 创建普通用户
进入mongodb,用第3步的 管理员账户登录,用该账户创建其他数据库管理员账号
+先进行管理员认证
use admindb.auth("useradmin", "adminpassword")
+设置其他库的账号密码及权限
use yourdatabasedb.createUser({ user: "youruser", pwd: "yourpassword", roles: [{ role: "dbOwner", db: "yourdatabase" }] })
rote:dbOwner 代表数据库所有者角色,拥有最高该数据库最高权限。比如新建索引等
6 python 连接脚本
#coding=utf-8#导入模块from pymongo import MongoClient #建立连接client=MongoClient("localhost",27017)#数据库名admindb=client.admin#认证用户密码db.authenticate(‘root‘,‘123456‘)#创建集合和数据db.test.insert({"name":"this is test"})col=db.test#打印数据输出for item in col.find(): print item#关闭连接client.close()
7 注意
mongo --port 27017 -u "adminUser" -p "adminPass" --authenticationDatabase "admin"
use foodb.createUser( { user: "simpleUser", pwd: "simplePass", roles: [ { role: "readWrite", db: "foo" }, { role: "read", db: "bar" } ] })现在我们有了一个普通用户用户名:simpleUser密码:simplePass权限:读写数据库 foo, 只读数据库 bar。注意use foo表示用户在 foo 库中创建,就一定要 foo 库验证身份,即用户的信息跟随随数据库。
比如上述 simpleUser 虽然有 bar 库的读取权限,但是一定要先在 foo 库进行身份验证,直接访问会提示验证失败。use foodb.auth("simpleUser", "simplePass")use barshow collections还有一点需要注意,如果 admin 库没有任何用户的话,即使在其他数据库中创建了用户,启用身份验证,默认的连接方式依然会有超级权限
参考:
https://www.2cto.com/database/201802/724340.html
https://www.jianshu.com/p/79caa1cc49a5
https://blog.51cto.com/1767340368/2092960