使用手册
https://www.runoob.com/mongodb/mongodb-window-install.html
https://www.runoob.com/docker/docker-install-mongodb.html
https://blog.csdn.net/weixin_42388485/article/details/112438174
常用语句
https://www.csdn.net/tags/OtTaAgwsNzcxNzYtYmxvZwO0O0OO0O0O.html
https://www.runoob.com/mongodb/mongodb-tutorial.html
https://www.runoob.com/mongodb/mongodb-create-database.html
mongo -port 27017
show dbs
官网下载
https://www.mongodb.com/download-center/community
下一步安装 “install mongoDB compass” 不勾选(当然你也可以选择安装它,可能需要更久的安装时间),MongoDB Compass 是一个图形界面管理工具,我们可以在后面自己到官网下载安装,下载地址
客户端
https://www.mongodb.com/download-center/compass
绿色版本安装
https://blog.csdn.net/qq_40975034/article/details/86636738
客户端
https://www.mongodb.com/download-center/compass
绿色版本安装
https://blog.csdn.net/qq_40975034/article/details/86636738
安装 MongoDB服务
通过执行mongod.exe,使用–install选项来安装服务,使用–config选项来指定之前创建的配置文件。
C:\mongodb\bin\mongod.exe –config “C:\mongodb\mongod.cfg” –install
C:\Program Files\MongoDB\Server\4.4\bin\mongod.exe –config “C:\Program Files\MongoDB\Server\4.4\bin\mongod.cfg” –install
要使用备用 dbpath,可以在配置文件(例如:C:\mongodb\mongod.cfg)或命令行中通过 –dbpath 选项指定。
如果需要,您可以安装 mongod.exe 或 mongos.exe 的多个实例的服务。只需要通过使用 –serviceName 和 –serviceDisplayName 指定不同的实例名。只有当存在足够的系统资源和系统的设计需要这么做。
启动MongoDB服务
net start MongoDB
关闭MongoDB服务
net stop MongoDB
移除 MongoDB 服务
C:\mongodb\bin\mongod.exe –remove
安装成功
创建用户
Q:Exception authenticating MongoCredential{mechanism=null, userName='root', source='admin', password=<hidden>, mechanismProperties={}}
1.打开mongoDB数据库,并进入xiaomu数据库
use xiaomu
2.添加一个用户
db.createUser(
{undefined
user: "wenqiang",
pwd: "1438438",
roles: ["readWrite"]
}
)
3.登录用户,并测试是否好用
db.auth("mutianwei", "123568")
db.createCollection("logs")
db.logs.insert( { name: "wangwenqiang", age: 3} )
db.logs.find()
docker mongodb
https://www.runoob.com/docker/docker-install-mongodb.html
docKer操作 mongodb
https://blog.csdn.net/clover661/article/details/123037297
- docker安装
[root@adscom ~]# docker pull mongo
- 查看docker镜像,看MongoDB镜像是否拉取成功
[root@adscom ~]# docker images
mongo latest dfda7a2cf273 2 months ago 693MB
- 启动docker并查看状态
[root@adscom ~]# systemctl start docker.service
[root@adscom ~]# systemctl status docker.service
- 创建并启动容器,不指定用户名和密码
[root@adscom ~]# docker run --name some-mongo -v /my/own/datadir:/data/db -d mongo
a3fbac6a6a32caf45dff2f180b61e7815b8e72296b330ebef9260c6963615276
该-v /my/own/datadir:/data/db命令的一部分将/my/own/datadir目录从底层主机系统挂载/data/db到容器内部,默认情况下 MongoDB 将在其中写入其数据文件。
- 进入容器
[root@adscom ~]# docker exec -it a3fbac6a6a32 /bin/bash
root@a3fbac6a6a32:/#
- 输入MongoDB连接MongoDB数据库
root@a3fbac6a6a32:/# mongo
创建root账户
> use admin; switched to db admin > db.createUser( ... { ... user: "root", ... pwd: "root", ... roles: [ { role: "root",db: "admin" } ] ... } ... ); Successfully added user: { "user" : "root", "roles" : [ { "role" : "root", "db" : "admin" } ] }
退出重新连接
exit
docker exec -it +容器ID bash
mongo -u root -p root admin
如果要为某个数据库创建普通用户
use test
db.createUser(
{
user: "testuser",
pwd: "password",
roles: [
{ role: "readWrite", db: "test" }
]
}
);
use admin
show users >>查看当前库内已有用户
show roles >>查看当前库内可用的roles,默认只有built-in roles
db.createUser({user: “root”,pwd: “root”,roles: [ { role: “root”, db:
“admin” } ]}) >>创建用户,roles可以使用当前库内的角色,或者其他库内的角色
db.changeUserPassword(‘root’,‘rootNew’); >>如何修改密码
db.grantRolesToUser(’’, [{ role: ‘’, db:
‘admin’ }])
db.revokeRolesFromUser( “”, [{ role: ‘’, db:
‘admin’ }]) >>已有用户新增和解除built-in roles
use db_name db.dropUser("") >> 删除用户命令如下,虽然所有库的用户信息全存在admin的system.users中,删用户时还是要use <库名>才能删除
创建用户时需要牢记的几点:
创建用户必须指定库名,即用户是和库绑定的。即便是超级用户的创建也是如此,如果你创建root用户时是在业务库里,那你以后登录root也只能指定业务库的库名了(超级账户一般建于admin库下)。
创建用户时指定的built-in roles也是与库绑定的,指定的哪个库的角色,就拥有哪个库的操作权限,即在test库内创建db.createUser({user: “test”,pwd: “test”,roles: [ { role: “read”, db: “test1” } ]})只能读test1下的collection不能读test下的。
不同的库下可以存在相同的用户名,即admin.root用户和test.root用户是可以同时存在的。
登陆mongo shell时如果不指定库名,默认登入的test库(只在3.6验证过,其他版本自行验证),你需要use db_name后才能进行db.auth(),当然你可以选择直接mongo db_name -u username -p password登陆。
一般来说创建一个root角色的超级用户root即可(或一个__system权限的system用户),创建一些普通权限的用户做日常操作。
use test
db.createUser(
{
user: "myTester",
pwd: "xyz123",
roles: [ { role: "readWrite", db: "test" },
{ role: "read", db: "reporting" } ]
}
)
//这里第二个role是reporting.read,说明此用户拥有reporting下的读权限。
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
//未指定db的role默认是使用当前库下的角色的,这里其实readWriteAnyDatabase相当于{ role: "readWriteAnyDatabase", db: "admin" }
权限详解:
- read
提供本库下所有非系统collection的读权限,以及少数几个系统collection的读权限,例如system.indexes, system.js, and system.namespaces
- readWrite
提供本库下所有非系统collection的读写权限,以及系统collection system.js的读写权限。
Database Administration Roles: - dbAdmin
提供一些库管理的权限,诸如索引创建,增删集合,删库等等,并没有对所有集合的读权限,因此其实很少会用到。 - userAdmin
提供在本库下创建用户、角色,删除用户、角色,修改密码等一系列用户相关的权限。 - dbOwner
库拥有者权限,即readWrite、dbAdmin、userAdmin角色的合体。
Cluster Administration Roles: - clusterAdmin
集群管理权限,clusterManager、clusterMonitor、hostManager角色的合体,此外再加上dropDatabase权限。 - clusterManager
集群管理者权限,提供诸如添加shard,删除shard,修改副本集配置等权限。 - clusterMonitor
集群监控权限,顾名思义拥有查看一系列集群状态的权限。 - hostManager
参考官网链接的解释,很少使用。
Backup and Restoration Roles: - backup
即进行数据备份的权限,实例级别的角色。 - restore
即进行数据还原的权限,实例级别的角色,还包含很多与dbOwner重合的权限,参见官网中的相关解释。
All-Database Roles: - readAnyDatabase
提供针对除了local和config库外所有其他库的读权限。 - readWriteAnyDatabase
提供针对除了local和config库外所有其他库的读写权限。
14 . userAdminAnyDatabase
同userAdmin角色,只不过范围扩大到了所有库。 - dbAdminAnyDatabase
同dbAdmin角色,只不过范围扩大到了所有库。
Superuser Roles:
16.root
即超级用户的权限,拥有此权限你可以管理任意数据库,可以将此角色理解为dbOwner of All Database。
Internal Role:
system
系统内置角色,拥有很高的权限(高于root),在做一些集群操作时可以使用此包含此角色的用户
一般不推荐设置此角色的用户,使用keyfile进行internal auth的副本集之间的交互就是使用此角色的。
一般来说应用使用的用户只需要readWrite角色即可,DBA可使用root账户和system账户进行诸如集群配置,备份恢复等操作