在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
前言 Mongodb 数据库默认情况下是没有访问控制的,整个数据库对外是开发的,只要能连上数据库,则可以进行任何操作,这会对数据带来很大的风险。当然,我们可以启用mongodb的访问控制,只让通过认证的用户才能对数据库进行角色范围内的操作。 启用访问控制可以通过在启动 mongodb 时指定 db.createUser() 用法 db.createUser({ user: "$USERNAME", pwd: "$PASSWROD", roles: [ { role: "$ROLE_NAME", db: "$DBNAME"} ] }) 参数说明:
Mongodb 预定义角色 Mongodb 中预定义了一些角色,把这些角色赋予给适当的用户上,用户就只能进行角色范围内的操作。 1、数据库用户角色 (所有数据库都有)
2、数据库管理角色(所有数据库都有)
3、集群管理角色(admin数据库可用)
4、备份和恢复角色(admin数据库可用)
5、所有数据库角色(admin数据库可用)
6、超级角色(admin数据库可用)
7、内部角色
更多预定于角色的信息请参看:https://docs.mongodb.com/manual/core/security-built-in-roles/ 启用访问控制的步骤 1, 启动 mongodb 实例,关闭 访问控制 不带 ./mongod 2, 连接上 mongodb 实例 ./mongo 3,创建用户管理员 在 admin 数据库中添加一个 具有 userAdminAnyDatabase 角色的用户作为用户管理用户。下面的例子中创建了 admin 为用户管理员。 > use admin switched to db admin > db.createUser({ ... user: "admin", ... pwd: "admin", ... roles: [ ... { role: "userAdminAnyDatabase", db: "admin"} ... ] ... }) Successfully added user: { "user" : "admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] } > 退出连接 4,重启数据库启用访问控制 命令行启动,只需要添加 --auth 参数 ./mongo --auth 5,使用管理用户连接,有两种方法
我们使用第二种 > > use admin switched to db admin > db.auth("admin", "admin") 1 > 1 表示认证成功 6, 为某个数据库创建独立用户 以下为 test 数据库 创建具有读写权限的用户 test admin 用户由于只有 userAdminAnyDatabase 权限,所以没有 test 数据的读写权限,所以,为了读写 test 数据库,我们需要创建一个用户。先看一下直接用 admin 会报什么错误 > use test > show collections 2017-01-13T13:49:17.691+0800 E QUERY [thread1] Error: listCollections failed: { "ok" : 0, "errmsg" : "not authorized on test to execute command { listCollections: 1.0, filter: {} }", "code" : 13 } : _getErrorWithCode@src/mongo/shell/utils.js:25:13 DB.prototype._getCollectionInfosCommand@src/mongo/shell/db.js:773:1 DB.prototype.getCollectionInfos@src/mongo/shell/db.js:785:19 DB.prototype.getCollectionNames@src/mongo/shell/db.js:796:16 shellHelper.show@src/mongo/shell/utils.js:754:9 shellHelper@src/mongo/shell/utils.js:651:15 @(shellhelp2):1:1 我们直接使用 show collections , 则报错:not authorized on test to execute command ,意思是没有权限。 > use test switched to db test > db.createUser({ ... user: "test", ... pwd: "test", ... roles: [ ... { role: "readWrite", db: "test"} ... ] ... }) Successfully added user: { "user" : "test", "roles" : [ { "role" : "readWrite", "db" : "test" } ] } > 然后我们使用 > db.auth("test", "test") 1 > > show collections 试着写入一条数据,也是正常的。 > db.t.insert({name:"buzheng"}); WriteResult({ "nInserted" : 1 }) > db.t.find(); { "_id" : ObjectId("58786c84bf5dd606ddfe1144"), "name" : "buzheng" } > 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。 |
请发表评论