查看“MongoDB安全认证”的源代码
←
MongoDB安全认证
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
=MongoDB权限介绍= 3.x之前如此 3.x这后的呢 pi3的版本是 c.1 MongoDB是没有默认管理员账号的,所以要先添加管理员账号,在开启权限认证。 c.2 切换到admin数据库,添加的账号才是管理员的账号。 c.3 用户只能在用户所在的数据库登录,包括管理员账号。 c.4 管理员可以管理所有的数据库,但是不能直接管理其它数据库,要先在admin数据库中认证才可以,也是为了 安全性考虑。 =mongodb简单开启安全验证= ==1.设置mongodb的用户名和密码(管理员)== mongodb默认是没有用户名和密码的,我们安装好mongodb的客户端,在本地连接本地客户端的mongodb时,直接就"mongo"就可以了,默认是127.0.0.1,默认监听27017端口,不需要什么安全验证,那如何来开启安全验证呢? 如果要开启安全验证,就必须要用--auth来开启安全性的检查,创建的用户名都是存放在system.admin.Users下面的 ===1.设置mongodb的用户名和密码(管理员):=== <pre> 创建管理员: use admin #添加管理员 db.createUser({user:"root",pwd:"123456",roles:["root"]}) 然后重新启动mongodb,但是必须加上--auth选项, mongod --auth --dbpath /data/apps/mongodb/data/ 或者在sysd 启动文件加 [Service] User=mongodb Group=mongodb EnvironmentFile=-/etc/default/mongod #by evan #ExecStart=/usr/bin/mongod --config /etc/mongod.conf ExecStart=/usr/bin/mongod --auth --config /etc/mongod.conf systemctl daemon-reload systemctl restart mongod 或者使用配置文件,增加参数: security: authorization: enabled //冒号后面需要空一格 全验证检查开启成功了,此时你应该这样连接: mongo admin -u root -p 123456 </pre> ===2.针对某个数据库(database)建立用户(权限:read,readWrite,write)=== <pre> a.创建用户(如果不选中对应的数据库use foobar,那么你创建的用户认证会不成功,也无法登陆mongo): 给foobar数据库一个用户root read权限 use foobar db.createUser({ user: 'root', pwd: '123456', roles: [{role: 'read', db: 'foobar'}] }); b.认证db.auth("user","pwd")--也必须选中对应的数据库use foobar,因为我上面选中了,所以直接就认证,出现1表示认证成功 > db.auth("root", "123456"); 1 c.接下来重启mongo,使用刚才创建的用户登陆,验证权限 mongo foobar -u root -p 123456 [root@work2 ~]# mongo foobar -u root -p 123456 MongoDB shell version: 3.2.0 connecting to: foobar</pre> =MongoDB 用户和身份验证= 内容和上面有点重复 创建用户管理员账户 2.1 创建用户管理员账户 当前数据库版本:Mongodb 3.4 使用 mongod 启动数据库 mongod --port 27017 --dbpath /data/db1 参数默认可以不加,若有自定义参数,才要加上,下同。 另起一个终端,运行下列命令 mongo --port 27017 use admin db.createUser( { user: "adminUser", pwd: "adminPass", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } ) 管理员创建成功,现在拥有了用户管理员 用户名:adminUser 密码:adminPass 然后,断开 mongodb 连接, 关闭数据库 两个终端下 <C - c> 2.2 Mongodb 用户验证登陆 启动带访问控制的 Mongodb 新建终端 mongod --auth --port 27017 --dbpath /data/db1</pre> ==现在有两种方式进行用户身份的验证== ===第一种 (类似 MySql)=== 客户端连接时,指定用户名,密码,db名称 mongo --port 27017 -u "adminUser" -p "adminPass" --authenticationDatabase "admin" ===第二种=== <pre>客户端连接后,再进行验证 mongo --port 27017 use admin db.auth("adminUser", "adminPass") // 输出 1 表示验证成功 2.3 创建普通用户 过程类似创建管理员账户,只是 role 有所不同 use foo db.createUser( { user: "simpleUser", pwd: "simplePass", roles: [ { role: "readWrite", db: "foo" }, { role: "read", db: "bar" } ] } ) 现在我们有了一个普通用户 用户名:simpleUser 密码:simplePass 权限:读写数据库 foo, 只读数据库 bar。 创建某个数据库的允许访问账号 mongo use admin db.getSiblingDB("spring_boot_test").createUser({"user" : "liang","pwd" : "hahaha", roles: [{"role" : "readWrite", "db" : "spring_boot_test"}]}) 用这个账号登录 mongo -u liang -password test2 -authenticationDatabase spring_boot_test 注意 NOTE WARN use foo表示用户在 foo 库中创建,就一定要 foo 库验证身份,即用户的信息跟随随数据库。比如上述 simpleUser 虽然有 bar 库的读取权限,但是一定要先在 foo 库进行身份验证,直接访问会提示验证失败。 use foo db.auth("simpleUser", "simplePass") use bar show collections 还有一点需要注意,如果 admin 库没有任何用户的话,即使在其他数据库中创建了用户,启用身份验证,默认的连接方式依然会有超级权限 </pre> =2.4 内建角色= <pre> Read:允许用户读取指定数据库 readWrite:允许用户读写指定数据库 dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限 readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限 userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 root:只在admin数据库中可用。超级账号,超级权限 2.5 URI 形式的访问 生产中常用 URI 形式对数据库进行连接 mongodb://your.db.ip.address:27017/foo 添加用户名密码验证 mongodb://simpleUser:simplePass@your.db.ip.address:27017/foo </pre> =see also= [https://blog.csdn.net/jeanette_zlj/article/details/79563954 MongoDB开启安全认证] [[category:nosql]]
返回至
MongoDB安全认证
。
导航菜单
个人工具
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
我的导航
关于我
shell
python
ops
linuxchina.net
blog.linuxchina
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息