教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 MongoDB创建用户名密码

MongoDB创建用户名密码

发布时间:2022-01-04   编辑:jiaochengji.com
教程集为您提供MongoDB创建用户名密码等资源,欢迎您收藏本站,我们将为您提供最新的MongoDB创建用户名密码资源
<h1>Mongodb enable authentication</h1>

MongoDB 默认直接连接,无须身份验证,如果当前机器可以公网访问,且不注意Mongodb 端口(默认 27017)的开放状态,那么Mongodb就会产生安全风险,被利用此配置漏洞,入侵数据库。

<h1>容易遭受入侵的环境</h1> <ul><li>使用默认 mongod 命令启动 Mongodb</li><li>机器可以被公网访问</li><li>在公网上开放了 Mongodb 端口</li></ul><h1>安全风险</h1> <ul><li>数据库隐私泄露</li><li>数据库被清空</li><li>数据库运行缓慢</li></ul><h1>解决方案</h1> <h2>1. 禁止公网访问 Mongodb 端口</h2> <h3>1.1 网络配置</h3>

由于网络配置因人而异,需要根据自己实际环境进行配置,不作冗述。大致可以从以下方面禁止。

<ul><li>在路由器中关闭端口转发</li><li>防火墙 iptables 禁止访问</li></ul><h3>1.2 验证端口能否访问方式</h3>

在外网机器命令行中运行

<pre class="has"><code>telnet your.machine.open.ip 27017 </code></pre> <h2>2. 启用验证</h2> <h3>2.1 创建用户管理员账户</h3>

当前数据库版本:Mongodb 3.4

使用 mongod 启动数据库
新建终端

<pre class="has"><code>mongod --port 27017 --dbpath /data/db1 </code></pre>

参数默认可以不加,若有自定义参数,才要加上,下同。

另起一个终端,运行下列命令

<pre class="has"><code>mongo --port 27017 use admin db.createUser( { user: "adminUser", pwd: "adminPass", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } ) </code></pre>

管理员创建成功,现在拥有了用户管理员
用户名:adminUser
密码:adminPass
然后,断开 mongodb 连接, 关闭数据库
两个终端下 <C - c>

<h3>2.2 Mongodb 用户验证登陆</h3>

启动带访问控制的 Mongodb
新建终端

<pre class="has"><code>mongod --auth --port 27017 --dbpath /data/db1 </code></pre>

现在有两种方式进行用户身份的验证
第一种 (类似 MySql)
客户端连接时,指定用户名,密码,db名称

<pre class="has"><code>mongo --port 27017 -u "adminUser" -p "adminPass" --authenticationDatabase "admin" </code></pre>

第二种
客户端连接后,再进行验证

<pre class="has"><code>mongo --port 27017 use admin db.auth("adminUser", "adminPass") // 输出 1 表示验证成功 </code></pre> <h3>2.3 创建普通用户</h3>

过程类似创建管理员账户,只是 role 有所不同

<pre class="has"><code>use foo db.createUser( { user: "simpleUser", pwd: "simplePass", roles: [ { role: "readWrite", db: "foo" }, { role: "read", db: "bar" } ] } ) </code></pre>

现在我们有了一个普通用户
用户名:simpleUser
密码:simplePass
权限:读写数据库 foo, 只读数据库 bar。

注意
NOTE
WARN
<code>use foo</code>表示用户在 foo 库中创建,就一定要 foo 库验证身份,即用户的信息跟随随数据库。比如上述 simpleUser 虽然有 bar 库的读取权限,但是一定要先在 foo 库进行身份验证,直接访问会提示验证失败。

<pre class="has"><code>use foo db.auth("simpleUser", "simplePass") use bar show collections </code></pre>

还有一点需要注意,如果 admin 库没有任何用户的话,即使在其他数据库中创建了用户,启用身份验证,默认的连接方式依然会有超级权限

<h3>2.4 内建角色</h3> <ul><li>Read:允许用户读取指定数据库</li><li>readWrite:允许用户读写指定数据库</li><li>dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile</li><li>userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户</li><li>clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。</li><li>readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限</li><li>readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限</li><li>userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限</li><li>dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。</li><li>root:只在admin数据库中可用。超级账号,超级权限</li><li>注:本人用fastadmin集成MongoDB时发现必须用root角色才可以实现全部功能</li></ul><h3>2.5 URI 形式的访问</h3>

生产中常用 URI 形式对数据库进行连接

<pre class="has"><code class="language-bash">mongodb://your.db.ip.address:27017/foo </code></pre>

添加用户名密码验证

<pre class="has"><code>mongodb://simpleUser:simplePass@your.db.ip.address:27017/foo </code></pre> <h1>参考链接</h1> <ul><li>Enable Authentication</li><li>Build-in Roles</li><li>Mongodb 3.0 用户创建</li><li>Mongodb Authentication</li></ul> 到此这篇关于“MongoDB创建用户名密码”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
Windows MongoDB4.2.0安装教程
Ubuntu安装指定版本mongodb使用及卸载
windows x86下安装mongodb且配置自动运行
MongoDB创建用户名密码
MongoDB为用户设置访问权限
在MongoDB上如何进行数据的导入与导出
MongoDB访问控制方法举例
如何掌握Python3中PyMongo的用法?
centos6.8安装MongoDB
Mongodb数据库的开启与关闭

[关闭]
~ ~