1.Mongo中的权限架构
mongo中以用户-角色-数据来进行相对应权限的配置,其中只有部分角色有对系统级数据库有操作权限
具体架构大致如下:
2.Mongo中的内置角色信息
- read:提供读取所有非系统的集合(数据库)
- readWrite:提供读写所有非系统的集合(数据库)和读取所有角色的所有权限
- dbAdmin:提供执行管理任务的功能,例如与架构相关的任务,索引编制,收集统计信息。此角色不授予用户和角色管理权限。
- dbOwner:提供对数据库执行任何管理操作的功能。此角色组合了readWrite,dbAdmin和userAdmin角色授予的权限。
- userAdmin:提供在当前数据库上创建和修改角色和用户的功能。由于userAdmin角色允许用户向任何用户(包括他们自己)授予任何权限,因此该角色还间接提供对数据库的超级用户访问权限,或者,如果作用于管理数据库,则提供对群集的访问权限。
- clusterAdmin:提供最佳的集群管理访问。此角色组合了clusterManager,clusterMonitor和hostManager角色授予的权限。此外,该角色还提供了dropDatabase操作。
- readAnyDatabase:仅在admin 数据库中使用,提供所有数据库的读权限。
- readWriteAnyDatabase:仅在admin 数据库中使用,提供所有数据库的读写权限
- userAdminAnyDatabase:仅在admin 数据库中使用,提供与userAdmin相同的用户管理操作访问权限,允许用户向任何用户(包括他们自己)授予任何权限,因此该角色还间接提供超级用户访问权限。
- dbAdminAnyDatabase:仅在admin 数据库中使用,提供与dbAdmin相同的数据库管理操作访问权限,该角色还在整个群集上提供listDatabases操作。
-
3.单节点mongo授权步骤
在部署并启动mongo后,也需要对mongo进行权限配置。因为通常在生产环境中通常对于权限的设置都比较严格。因此在日常学习中为了模拟线上环境,同时保证自己mongo服务器的安全,也需要进行相应的配置
需要注意的是,一定在创建用户后,再开启权限认证!!!!!!!!!!!!!!!创建超级管理员
超级管理员可以给任何用户进行授权操作,但是超级管理员只能操作授权的数据库
具体步骤如下 登录mongo
- use admin
- 创建管理员账号:db.createUser({ user:’root’, pwd:’123456’, roles:[{role:’root’,db:’admin’}]})
- 验证管理员账号:db.auth(“root”, “123456”)
-
创建普通管理员(假设目前库为test数据库)
登录mongo
- use test
- 创建管理员账号:db.createUser({ user: “test”,pwd: “test”,roles: [ { role: “dbOwner”, db: “test” }]})
- 验证管理员账号:db.auth(“test”, “test”)
-
修改配置文件重启服务
vim /usr/local/mongodb/etc/mongodb.conf
- 在文件末尾追加内容:auth=true
- cd /usr/local/mongodb/bin
- ./mongod -shutdown —config /usr/local/mongodb/etc/mongodb.conf
./mongod —config /usr/local/mongodb/etc/mongodb.conf
4.副本集mongo授权步骤
登录主节点
创建超级管理员
创建普通管理员(假设目前库为test数据库)
生成keyFIle并复制、授权
openssl rand -base64 666 > /usr/local/mongodb-set/keyfile
- cp /usr/local/mongodb-set/keyfile /usr/local/mongodb-set/primary/config/keyfile
- cp /usr/local/mongodb-set/keyfile /usr/local/mongodb-set/secondary/config/keyfile
- cp /usr/local/mongodb-set/keyfile /usr/local/mongodb-set/arbiter/config/keyfile
- chmod 600 /usr/local/mongodb-set/primary/config/keyfile
- chmod 600 /usr/local/mongodb-set/secondary/config/keyfile
chmod 600 /usr/local/mongodb-set/arbiter/config/keyfile
配置文件添加授权配置
vim /usr/local/mongodb-set/primary/config/mongod.conf
security:
keyFile: /usr/local/mongodb-set/primary/config/keyfile
authorization: enabled
vim /usr/local/mongodb-set/secondary/config/mongod.conf
security:
keyFile: /usr/local/mongodb-set/secondary/config/keyfile
authorization: enabled
vim /usr/local/mongodb-set/arbiter/config/mongod.conf
security:
keyFile: /usr/local/mongodb-set/arbiter/config/keyfile
authorization: enabled
关闭节点
主节点:/usr/local/mongodb-set/mongo/bin/mongod —shutdown —config /usr/local/mongodb-set/primary/config/mongod.conf
- 从节点:/usr/local/mongodb-set/mongo/bin/mongod -shutdown —config /usr/local/mongodb-set/secondary/config/mongod.conf
仲裁节点:/usr/local/mongodb-set/mongo/bin/mongod -shutdown —config /usr/local/mongodb-set/arbiter/config/mongod.conf
启动节点
主节点:/usr/local/mongodb-set/mongo/bin/mongod —config /usr/local/mongodb-set/primary/config/mongod.conf
- 从节点:/usr/local/mongodb-set/mongo/bin/mongod —config /usr/local/mongodb-set/secondary/config/mongod.conf
仲裁节点:/usr/local/mongodb-set/mongo/bin/mongod —config /usr/local/mongodb-set/arbiter/config/mongod.conf
5.Mongo中链接数据库的命令
链接命令格式
链接本地无权限认证:mongo
- 链接远程无权限认证:mongo 120.48.107.224
- 链接本地有权限认证:mongo -u ${用户名} —authenticationDatabase ${授权数据库} -p ${密码}
链接远程有权限认证:mongo -host 120.48.107.224 -u ${用户名} —authenticationDatabase ${授权数据库} -p ${密码}
windows链接示例
链接本地无权限认证:mongo
- 链接远程无权限认证:mongo 120.48.107.224
- 链接本地有权限认证:mongo -u root —authenticationDatabase admin -p 123456
- 链接远程有权限认证:mongo -host 120.48.107.224 -u test —authenticationDatabase files -p test
链接远程有权限认证:mongo -host 120.48.107.224 -u ftc —authenticationDatabase java_test -p 1213456
linux链接示例
链接本地无权限认证:进入安装bin目录下,./mongo
链接本地有权限认证:进入安装bin目录下,./mongo -u root —authenticationDatabase ‘admin’ -p ‘123456’
6.个人常用链接
远程链接副本集主节点(admin):mongo 120.48.107.224 -u root —authenticationDatabase admin -p 123456
- 远程链接副本集主节点(java_test):mongo 120.48.107.224 -u java_test —authenticationDatabase java_test -p java_test
- 远程链接副本集主节点(java_test_bak):mongo 120.48.107.224 -u java_test_bak —authenticationDatabase java_test_bak -p java_test_bak