MongoDB运维与开发(三)
今天来看MongoDB的用户相关的内容,用户、权限,这块儿的内容还是比较多的。慢慢来看
NO.1
MongoDB用户初始化
在我们第一次启动MongoDB的时候,仅仅是制定了data数据目录和log日志目录,并没有指定--auth选项,也就是并不需要认证。
[root@VM-0-14-centos mongo_27017]# mongo MongoDB shell version v4.0.6 connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb Implicit session: session { "id" : UUID("61c35b47-f43b-48fc-a43e-066f56987e9a") } MongoDB server version: 4.0.6 > db test > show dbs; admin 0.000GB config 0.000GB local 0.000GB > use admin switched to db admin > show users; > db.system.user.find()
我们第一次登录MongoDB的服务,输入db,发现当前数据库是test,但是show dbs却看不到test数据库,其实这个是MongoDB的一个特点,test是一个虚的数据库,想要看到test中的内容,你只需要给test数据库中插入一个文档即可。
接着,我们可以看到,当我们输入show users的时候,没有看到任何账号信息。接下来我们准备开启--auth参数来重启MongoDB服务,在重启之前,我们需要保证已经分配了新的账号,下面我们开始分配账号:
> db.createUser({ user: "root", pwd: "123456", roles: [ { role: "root", db: "admin"} ]}) Successfully added user: { "user" : "root", "roles" : [ { "role" : "root", "db" : "admin" } ] }
这里,我们可以看到,我们分配了一个账号:
user:root # 用户名
pwd:123456 # 密码
roles:root # 角色
db:admin # 数据库
角色root有必要做一下解释:
Read: 允许用户读取指定数据库, readWrite:允许用户读写指定数据库 dbAdmin: 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile userAdmin:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户 clusterAdmin: 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 readAnyDatabase: 只在admin数据库中可用,赋予用户所有数据库的读权限 readWriteAnyDatabase: 只在admin数据库中可用,赋予用户所有数据库的读写权限 userAdminAnyDatabase: 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 dbAdminAnyDatabase: 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 root: 只在admin数据库中可用。超级账号,超级权限
更详细的内容,请参看官方文档:
https://docs.mongodb.com/manual/reference/built-in-roles/#dbAdmin
好了,创建好用户之后,我们重启MongoDB服务,在配置文件中打开--auth参数,或者直接在命令行里面指定auth参数,重新登陆:
[root@VM-0-14-centos mongo_27017]# mongo MongoDB shell version v4.0.6 connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb Implicit session: session { "id" : UUID("5f2b0fa6-a1e3-4aaf-b43f-3525e19c33d2") } MongoDB server version: 4.0.6 > > use admin switched to db admin > show users 2020-10-28T23:42:06.127+0800 E QUERY [js] Error: command usersInfo requires authentication : _getErrorWithCode@src/mongo/shell/utils.js:25:13 DB.prototype.getUsers@src/mongo/shell/db.js:1763:1 shellHelper.show@src/mongo/shell/utils.js:859:9 shellHelper@src/mongo/shell/utils.js:766:15 @(shellhelp2):1:1 > db.auth("root","123456") 1 > show users { "_id" : "admin.root", "user" : "root", "db" : "admin", "roles" : [ { "role" : "root", "db" : "admin" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] }
可以看到,当我们第一次使用show users的命令查看用户的时候,系统拒绝了我们,显示:
Error: command usersInfo requires authentication
然后我们进行权限校验:
use admin
db.auth("root","123456")
这下可以了。
不知道大家有没有留意到一个细节,我们登陆的时候,使用mongo命令登陆的,然后进行用户认证,有没有一种方法可以直接在登陆的时候就进行用户认证呢?答案是有的。
登陆方法一:
mongo
use admin
db.auth("user":"password")
登陆方法二:
mongo -u "user" -p "password"
如下:
[root@VM-0-14-centos mongo_27017]# mongo -u "root" -p "123456" MongoDB shell version v4.0.6 connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb Implicit session: session { "id" : UUID("ef872d7a-77d9-43c2-bf3d-e04867379c0a") } MongoDB server version: 4.0.6 > use admin switched to db admin > show users { "_id" : "admin.root", "user" : "root", "db" : "admin", "roles" : [ { "role" : "root", "db" : "admin" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] } >
到这里,我们已经学会了第一次登陆MongoDB之后,如何进行初始用户配置、如何开启MongoDB的认证模式(--auth参数)、以及在登录的时候如何进行用户认证,用户这块儿还有很多其他内容,下一节我们展开说。
快要写完的时候,朋友给了我一张刚出炉的2020工信部互联网百强企业图,附在这里,大家看看就好,看看自己是给哪个大厂打工的打工人。
最最后,一句鸡汤送给大家:你越努力,老板越幸运。(手动狗头-_-)
晚安,打工人。