企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] # 开启用户验证 ## 添加用户 启动mongodb: mongod 启动mongodb shell mongo 添加用户: ~~~ use admin db.createUser( { user: "myUserAdmin", pwd: "abc123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } ) ~~~ ## 更改配置文件 在配置文件中将 #security: 中的#去掉,并在其下一行,空两个空格,加上authorization: enabled,如下 ~~~ security: authorization: enabled ~~~ 注意:authorization: enabled中冒号后加一个空格,这是yaml语法所要求的 ## 重启mongodb数据库 ~~~ sudo service mongod restart ~~~ 注意:命令中是mongod,不是mongodb 设置远程连接 注意:老版本的图形界面管理软件可能不支持新版本的数据库,测试之前请保证软件是可用的 在配置文件中将 bindIp: 127.0.0.1 注释掉(即在句首加#) #bindIp: 127.0.0.1 重启数据库 ~~~ sudo service mongod restart ~~~ 更改数据目录 默认的数据存储目录是/var/lib/mongodb,假设我们的目的路径是/home/mongodb 关闭数据库 ~~~ sudo service mongod stop ~~~ 在配置文件中将storage.dbPath项设置为目的路径,修改后如下 ~~~ storage: dbPath: /home/mongodb ~~~ 将原目录下的文件复制到新目录中: ~~~ sudo cp -r /var/bin/mongodb/* /home/mongodb/ ~~~ 将mongod.lock文件删除后启动数据库 ~~~ sudo rm /home/mongodb/mongod.lock sudo service mongod start ~~~ 测试远程连接 注意: 当你的mongo命令报错,连接失败时,请尝试删除数据存储目录下的mongod.lock文件后,重启mongodb数据库 # 配置权限 我的mongodb是通过brew install mongod安装的,所以按默认配置启动服务mongod --config /usr/local/etc/mongod.conf,此命令不是挂起的,所以我们另开窗口执行mongo,连接到admin库,在admin库添加超级用户: ~~~ Eugene-mac:~ Eugene$ mongo MongoDB shell version v3.4.3 connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.3 Server has startup warnings: 2017-04-27T17:19:15.356+0800 I CONTROL [initandlisten] 2017-04-27T17:19:15.356+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. 2017-04-27T17:19:15.356+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. 2017-04-27T17:19:15.356+0800 I CONTROL [initandlisten] > show dbs admin 0.000GB local 0.000GB test 0.000GB > use admin switched to db admin > db.createUser({ user: 'admin', pwd: 'admin', roles: [ { role: "__system", db: "admin" } ] }) Successfully added user: { "user" : "admin", "roles" : [ { "role" : "__system", "db" : "admin" } ] } > ~~~ 这样,超级用户就建成了,通过这个用户可以对任何库进行任何超做。但是利用这个超级用户来连接数据库显然是不安全的,所以我们可以对每个库进行权限配置。接下来就来配置其他库的用户权限,比如现在有一个test测试库,我配置一个读写权限的用户: ~~~ > use admin switched to db admin > db.createUser({ user: 'testUser', pwd: 'testPwd', roles: [ { role: 'readWrite', db: 'test'} ] }) Successfully added user: { "user" : "testUser", "roles" : [ { "role" : "readWrite", "db" : "test" } ] } ~~~ 这样,这个用户名为testUser密码为testPwd的用户就建成了,如果我们用工具mongoose直连mongodb的话也是很方便的。 ~~~ mongoose.connect('mongodb://testUser:testPwd@localhost:27017/test', { auth: { authdb: 'admin' } }, function(err){ if (err) { console.error(err); } else { cosnole.log('连接数据库成功') } }); ~~~ 以上是连接test库的方式,如果要使用之前建的超级用户来访问test库的话,只要修改url中的账号和密码就行啦。(注意一定要访问的时候要对admin库验证,即authdb: 'admin')。 ~~~ db.auth("admin","admin") ~~~ # 权限的角色 ![](https://box.kancloud.cn/6666b013634210475f3b79b68a8d8f6b_2563x1021.jpg) 还有个root和__system这一般不对外开放 # 创建用户 创建语法 createUser(2.6之前为addUser) 语法 ~~~ {user:"<name>", pwd:"<password>", customData:{<any information>}, roles:[{role:"<role>",db:"<database>"}] } ~~~ 角色类型 内建类型(read,readWrite,dbAdmin,dbOwner,userAdmin)