灵嘉 發表於 2019-6-28 18:09:00

MongoDB 设置参数

<p>&nbsp;</p>
<h2>服务器配置文件分析</h2>
<p>bin目录下的mongod.cfg是服务器的配置文件,文件中主要的配置参数:</p>
<p>1、数据库文件的存放位置</p>
<p><img src="https://img2018.cnblogs.com/blog/1685101/201906/1685101-20190628061534704-396625069.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>2、服务器日志文件的存放位置</p>
<p><img src="https://img2018.cnblogs.com/blog/1685101/201906/1685101-20190628061623212-827257219.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>3、默认的IP地址、端口号</p>
<p><img src="https://img2018.cnblogs.com/blog/1685101/201906/1685101-20190628061652254-1111422149.png" alt=""></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>设置密码</h2>
<p>默认情况下,MongoDB的服务器地址是127.0.0.1,端口号是27017,存储数据库管理员信息的admin数据库是空的,即没有管理员账户,任何客户端可以直接连接服务器,不需要认证。</p>
<p>好处是,用户可以即时上手,不用担心被一堆配置弄的心烦意乱。坏处是,所有人都可以直接访问并修改数据库数据。</p>
<p>&nbsp;</p>
<p>1、使用admin数据库,创建一个管理员账户</p>
<div class="cnblogs_code">
<pre>use admin</pre>
</div>
<div class="cnblogs_code">
<pre>db.createUser({user:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">chy</span><span style="color: rgba(128, 0, 0, 1)">"</span>,pwd:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">abc</span><span style="color: rgba(128, 0, 0, 1)">"</span>,roles:[{role:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">userAdminAnyDatabase</span><span style="color: rgba(128, 0, 0, 1)">"</span>,db:<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">admin</span><span style="color: rgba(128, 0, 0, 1)">"</span>}]})</pre>
</div>
<p>会提示创建成功。role指定账户角色(权限),db指定此账户管理的是哪个db。因为是roles:[],数组,所以可同时设置多个role。</p>
<p>如果是role中带有AnyDatabase,则可管理所有数据库。</p>
<p>如果role中不带AnyDatabase,则只能管理指定的db。</p>
<p>不管是哪种,这个账户只能进入指定的db。比如权限指定为"userAdminAnyDatabase",db指定为"admin",此账户只能通过数据库admin的验证,不能通过其他数据库的验证。要进入admin数据库后,在admin数据库中管理所有数据库。</p>
<p>"userAdminAnyDatabase"是管理所有数据库,可进行删除某个数据库之类的操作,是管理,并不能对某个数据库进行读写。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>mongodb的内置role</h3>
<p>&nbsp; &nbsp; 1. 数据库用户角色:read、readWrite;<br>&nbsp; &nbsp; 2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;<br>&nbsp; &nbsp; 3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;<br>&nbsp; &nbsp; 4. 备份恢复角色:backup、restore;<br>&nbsp; &nbsp; 5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase<br>&nbsp; &nbsp; 6. 超级用户角色:root&nbsp;&nbsp;<br>&nbsp; &nbsp; 7. 内部角色:__system</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>2、修改配置文件mongod.cfg,使用密码。</p>
<p><img src="https://img2018.cnblogs.com/blog/1685101/201906/1685101-20190628162312062-1464840378.png" alt=""></p>
<p>我们看到默认是注释了的,不使用安全验证。</p>
<p>取消注释,修改如下:</p>
<p><img src="https://img2018.cnblogs.com/blog/1685101/201906/1685101-20190628164532536-1301539350.png" alt=""></p>
<p>注意空格、缩进,authorization冒号后面有一个空格。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">security:
authorization: enabled</span></pre>
</div>
<p>&nbsp;</p>
<p>3、重启MongoDB服务。</p>
<p>&nbsp;</p>
<p>4、&nbsp;</p>
<p><span class="cnblogs_code">exit</span>&nbsp; &nbsp; //先退出客户端</p>
<p>&nbsp;<span class="cnblogs_code">mongo</span>&nbsp; &nbsp; &nbsp;</p>
<p>&nbsp;<span class="cnblogs_code">use admin</span>&nbsp;</p>
<p>&nbsp;<span class="cnblogs_code">db.auth(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">username</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">password</span><span style="color: rgba(128, 0, 0, 1)">"</span>)</span>&nbsp; &nbsp; //验证密码。1表示通过验证,0表示不通过。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>刚才创建的账户可进入所有db。可创建某个db的账户。</p>
<div class="cnblogs_code">
<pre>db.createUser({user:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">chy1</span><span style="color: rgba(128, 0, 0, 1)">'</span>,pwd:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">abc1</span><span style="color: rgba(128, 0, 0, 1)">'</span>,roles:[{role:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">readWrite</span><span style="color: rgba(128, 0, 0, 1)">'</span>,db:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">test</span><span style="color: rgba(128, 0, 0, 1)">'</span>}]})</pre>
</div>
<p>读写权限,此账户只能操作数据库test,且只能对test进行读写。</p>
<p>创建好之后就可以使用&nbsp; mongodb://username:password@host[:port]/database&nbsp; 进行连接了(需要先&nbsp; mongo&nbsp; 进入客户端 )。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>注意:</p>
<ul>
<li>MongoDB系统的最高权限是root,根权限</li>
<li>某个数据库的最高权限是dbOwner,数据库所有者,可创建索引、进行读写等操作。</li>
<li>MongoDB的数据库是相互独立的,每个数据库都有单独的密码、权限,互不通用。</li>
<li>给某个数据库创建账号,必须限use进入该数据库,然后db.createUser(),要指定roles中的db为该数据库。是在该数据库中创建该数据库的账号,不是说都是在admin数据库中创建账号。在admin数据库中创建的账号只能用于admin数据库的验证,不能用于其他数据库的验证。</li>
<li>可以用db.auth("username","pwd")&nbsp; 验证账户,1表示通过,0表示不通过。</li>
</ul>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/chy-x/p/11100589.html
頁: [1]
查看完整版本: MongoDB 设置参数