MongoDB安装和配置
<p>官网下载5.0.3, 并安装. Windows下安装后并选择使用windows 服务来启动mongo服务.</p><p> </p>
<p>======================================</p>
<p>免密登录</p>
<p>======================================</p>
<p>初次登录, 打开 mongo.exe 客户端, 不需要输入用户密码就能登录, 安全性不高, 后面介绍如何加上安全认证.</p>
<p><img src="https://img2020.cnblogs.com/blog/194640/202111/194640-20211107162123443-962276995.png" alt="" loading="lazy"></p>
<p> </p>
<p> </p>
<p>在mongo.exe中执行show dbs命令, 能显示有三个数据库, 说明登录成功. </p>
<p><img src="https://img2020.cnblogs.com/blog/194640/202111/194640-20211107162143206-1535651261.png" alt="" loading="lazy"></p>
<p> </p>
<p> </p>
<p>查看 mongo 的配置文件mongod.cfg</p>
<p>注意默认绑定IP 是127.0.0.1, 如果要在局域网内访问mongo服务, 需要修改IP为 0.0.0.1, 即绑定所有的网卡. </p>
<p><img src="https://img2020.cnblogs.com/blog/194640/202111/194640-20211107162217009-1339412286.png" alt="" loading="lazy"></p>
<p> </p>
<p> </p>
<p>======================================</p>
<p>创建账号</p>
<p>====================================== </p>
<p>创建一个mongoDB 的超级管理员root账号</p>
<p>先切到admin db下, 账号名设定为 root, 角色也选 root. </p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">use admin
db.createUser({user:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">root</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)">123456</span><span style="color: rgba(128, 0, 0, 1)">'</span>, roles:[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">root</span><span style="color: rgba(128, 0, 0, 1)">'</span>]})</pre>
</div>
<p>使用 db.auth() 方法可以验证用户密码是否OK.</p>
<p><img src="https://img2020.cnblogs.com/blog/194640/202111/194640-20211107162327523-2129451693.png" alt="" loading="lazy"></p>
<p> </p>
<p> </p>
<p> </p>
<p>在test db 下的test_user/test_guest/test_owner 账号</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">use test
db.createUser({user:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">test_user</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)">123456</span><span style="color: rgba(128, 0, 0, 1)">'</span>, roles:[{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>, 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><span style="color: rgba(0, 0, 0, 1)">}]})
db.createUser({user:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">test_guest</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)">123456</span><span style="color: rgba(128, 0, 0, 1)">'</span>, roles:[{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>, role:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">read</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">}]})
db.createUser({user:</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">test_owner</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)">123456</span><span style="color: rgba(128, 0, 0, 1)">'</span>, roles:[{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>, role:<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">dbOwner</span><span style="color: rgba(128, 0, 0, 1)">'</span>}]})</pre>
</div>
<p><img src="https://img2020.cnblogs.com/blog/194640/202111/194640-20211107162406640-216342073.png" alt="" loading="lazy"></p>
<p> </p>
<p> </p>
<p>在 admin 数据库的 system.users 集合中, 可以查看所有用户信息. </p>
<p><img src="https://img2020.cnblogs.com/blog/194640/202111/194640-20211107162442132-248544605.png" alt="" loading="lazy"></p>
<p> </p>
<p>======================================</p>
<p>启用验证方式登录</p>
<p>======================================</p>
<p>mongo 的配置文件mongod.cfg 增加 auth 选项</p>
<p>mongod.cfg新版使用yml格式, 配置如下:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">security:
authorization: enabled</span></pre>
</div>
<p>mongod.cfg老版文件, 配置如下:</p>
<div class="cnblogs_code">
<pre>auth=<span style="color: rgba(0, 0, 255, 1)">true</span></pre>
</div>
<p> </p>
<p>再次启动mongo.exe客户端, 运行 show dbs, 没有列出任何数据库, 可见并未进行真正登录成功</p>
<p><img src="https://img2020.cnblogs.com/blog/194640/202111/194640-20211107162627719-402788934.png" alt="" loading="lazy"></p>
<p> </p>
<p> </p>
<p>mongodb.exe 客户端使用账号密码方式登录, 以root账号登录:</p>
<div class="cnblogs_code">
<pre>.\mongo.exe mongodb:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">localhost:27017/admin -u root -p 123456</span></pre>
</div>
<p>端口后的/db, 这里的db和应用程序连接url的authSource含义相同, 用来指定在哪个库验证用户. 虽然 admin 库下存储所有账号的用户名和密码, 但 authSource 参数不一定就是 admin 库, 准确地说: 在哪个库下创建用户, authSource 就是那个库.</p>
<p>root 账号虽然能管理任何数据库, 但不能直接登录test 数据库. </p>
<p><img src="https://img2020.cnblogs.com/blog/194640/202111/194640-20211107162739710-1395939765.png" alt="" loading="lazy"></p>
<p> </p>
<p> </p>
<p>test_owner 账号登录:</p>
<p><img src="https://img2020.cnblogs.com/blog/194640/202111/194640-20211107162801918-1755427822.png" alt="" loading="lazy"></p>
<p> </p>
<p> </p>
<p>======================================</p>
<p> 应用程序url写法:</p>
<p>====================================== </p>
<div class="cnblogs_code">
<pre>mongodb:<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">root:123456@127.0.0.1:27017/admin?authSource=admin&w=majority&wTimeoutMS=5000&journal=true&readPreference=primary&retryWrites=true</span>
<span style="color: rgba(0, 0, 0, 1)">
mongodb:</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">test_owner:123456@127.0.0.1:27017/test?authSource=test&w=majority&wTimeoutMS=5000&journal=true&readPreference=primary&retryWrites=true</span></pre>
</div>
<ul>
<li>authSource 参数, 用来指定在哪个库验证用户. 虽然 admin 库下存储所有账号的用户名和密码, 但 authSource 参数不一定就是 admin 库, 准确地说: 在哪个库下创建用户, authSource 就是那个库.</li>
<li>retryWrites 采用可重试写入方式, 设定 retryWrites 为true 后, writeConcern 参数配不能设置为 0</li>
<li>w 参数即 writeConcern, 设置为 majority, 保证每次写操作都成功写入到复制集中的多数服务器中, 数据安全性较好.</li>
<li>j 参数即 journal HAL日志, j=true, 落盘后返回写操作, j=false, 刷到内存后即返回写操作.</li>
<li>wTimeoutMS 设定 writeConcern 的超时时间, 单位毫秒, 如果没有设定, 则写操作可能会无限阻塞等待.</li>
<li>readPreference 参数, 设定读操作选用节点的策略, 默认为只从主节点读取, 可选项有:
<ul>
<li> primary (只主)只从 primary 节点读数据,这个是默认设置</li>
<li> primaryPreferred (先主后从)优先从 primary 读取,primary 不可服务,从 secondary 读</li>
<li> secondary (只从)只从 scondary 节点读数据</li>
<li> secondaryPreferred (先从后主)优先从 secondary 读取,没有 secondary 成员时,从 primary 读取</li>
<li> nearest (就近)根据网络距离就近读取,根据客户端与服务端的PingTime实现</li>
</ul>
</li>
</ul>
<p> </p>
<p>======================================</p>
<p>MongoDB for VS Code插件的使用</p>
<p>======================================</p>
<p>MongoDB 官方的VS code插件, 可以编写playground 文件, 语法是 js, 可以编写一些CRUD的脚本, </p>
<p>如果是使用Run selected line from playground 命令, 选择部分要包含 use("test") 代码来切换到目标DB, 否则都是在默认db中执行.</p>
<p>另外, 输出窗口也切换到 Playground output, 这样我们能看到一些自己的print()结果. </p>
<p><img src="https://img2020.cnblogs.com/blog/194640/202111/194640-20211107164700145-967167522.png" alt="" loading="lazy"></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>======================================</p>
<p>mongodb role类型</p>
<p>======================================</p>
<p><strong>数据库用户角色(Database User Roles)</strong>:</p>
<p>read:授予User只读数据的权限</p>
<p>readWrite:授予User读写数据的权限</p>
<p> </p>
<p><strong>数据库管理角色(Database Administration Roles)</strong>:</p>
<p>dbAdmin:在当前DB中执行管理操作</p>
<p>dbOwner:在当前DB中执行任意操作</p>
<p>userAdmin:在当前DB中管理User</p>
<p> </p>
<p><strong>备份和还原角色(Backup and Restoration Roles):</strong></p>
<p>backup</p>
<p>restore</p>
<p> </p>
<p><strong>跨库角色(All-Database Roles):</strong></p>
<p>readAnyDatabase:授予在所有数据库上读取数据的权限</p>
<p>readWriteAnyDatabase:授予在所有数据库上读写数据的权限</p>
<p>userAdminAnyDatabase:授予在所有数据库上管理User的权限</p>
<p>dbAdminAnyDatabase:授予管理所有数据库的权限</p>
<p> </p>
<p><strong>集群管理角色(Cluster Administration Roles):</strong></p>
<p>clusterAdmin:授予管理集群的最高权限</p>
<p>clusterManager:授予管理和监控集群的权限,A user with this role can access the config and local databases, which are used in sharding and replication, respectively.</p>
<p>clusterMonitor:授予监控集群的权限,对监控工具具有readonly的权限</p>
<p>hostManager:管理Server</p>
<p> </p>
<p><strong>超级角色(super master Roles)</strong></p>
<p>root :超级账户和权限,只在admin中可用</p>
<p> </p>
<p>======================================</p>
<p>参考</p>
<p>======================================</p>
<p>MongoDB - 标签 - EdisonZhou - 博客园 (cnblogs.com)</p>
<p>https://docs.anaconda.com/anaconda-repository/admin-guide/install/config/config-mongodb-authentication/</p>
<p>https://blog.csdn.net/qq_33692349/article/details/90524189</p><br><br>
来源:https://www.cnblogs.com/harrychinese/p/mongodb.html
頁:
[1]