环境
MongoDB:4.4.6
MacBook Pro
前言
已经安装好了MongoDB
;
如何安装MongoDB
,可以参考:Macbook pro 安装 MongoDB
这篇和以前写的
测试数据
我们现在假设,创建好了两个数据库:ssm
和woos
;
数据库:ssm
|__user 表
数据库:woos
|__template 表
启用权限前,需要先创建管理员用户
官方说明:
With access control enabled, ensure you have a user with userAdmin or userAdminAnyDatabase role in the admin database. This user can administrate user and roles such as: create users, grant or revoke roles from users, and create or modify customs roles.
启用访问控制后,请确保您在admin数据库中拥有一个具有userAdmin或userAdminAnyDatabase角色的用户。该用户可以管理用户和角色,例如:创建用户,向用户授予或撤消角色,以及创建或修改海关角色。
https://docs.mongodb.com/manual/tutorial/enable-authentication/#user-administrator
创建管理员账号
admin数据库是管理用户权限的数据库。
在Robo 3T中执行如下命令:
use admin
db.createUser(
{
user: "admin",
pwd: "admin", // or cleartext password
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
执行后的结果:
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
},
"readWriteAnyDatabase"
]
}
说明:
use admin: 切换数据库的作用;
上面的过程是:
①先切换到admin
数据库
②然后创建admin
账号,并赋予相应的角色。
认证数据库
MongoDB用户账号有个特点是和数据库进行绑定的
userAdminAnyDatabase
角色具有的权限:
https://docs.mongodb.com/manual/reference/built-in-roles/#mongodb-authrole-userAdminAnyDatabase
创建普通账号
接下来创建一个普通用户:
use woos
db.createUser(
{
user: "yutao",
pwd: "yutao",
roles: [{role: "readWrite", db: "woos"},
{role: "read", db: "ssm"}]
}
)
上面是创建了一个账户名:yutao
,密码是:yutao
的用户,该用户,注册数据是woos
,具有读写权限;除此之外,授予该账户,具有数据库ssm
的读权限;
修改用户权限:
use woos
db.updateUser("yutao",
{
roles: [{role: "readWrite", db: "woos"},
{role: "read", db: "ssm"}]
}
);
创建超级用户root账户
use admin
db.createUser(
{
user: "root",
pwd: "root",
roles: [ {role: "root", db: "admin"} ]
}
)
root
角色具有的权限:https://docs.mongodb.com/manual/reference/built-in-roles/#mongodb-authrole-root
启用权限
在配置文件中添加如下配置:
我配置文件的路径是:vim data/mongodb/config/mongod.conf
security:
authorization: enabled
完整的配置:
systemLog:
destination: file
path: "logs/mongodb/mongod.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: "data/mongodb/db"
net:
port: 27017
security:
authorization: enabled
我们先停止mongodb服务,因为我是使用命令方式启动,所以只需要Ctrl + C
就可以关闭服务;
也可以在Robo 3T客户端中,执行如下命令来关闭MongoDB服务:
// 执行该命令需要root角色的账号才行。
db.adminCommand( { shutdown: 1 } )
执行上面的命令,需要root
角色的账号才行。
然后,再启动MongoDB服务。
yutao@MacBook-Pro ~ % mongod --config ~/data/mongodb/config/mongod.conf
使用账号登录
利用Robo 3T进行登录:
成功后的效果:
特别说明
Robo 3T
以前的版本,普通账号,只能看到认证数据,是不会显示其他数据的;
比如:普通账号:yutao
的认证数据库是woos
,并且也对ssm
数据库拥有读权限,没有写权限;以前的版本中,是看不到ssm
的显示的;但是新版本中,如上面的图示,已经能看到了。
今天想到这里时,我突然有个疑问:
① 到底是mongodb取消了认证数据库的限制,还是因为robo 3T
的版本升级的缘故,所以能看到非认证数据库?
带着这样的疑问,我在window电脑上做实验(因为window电脑上,安装的mongodb是3.4.2)
账号说明:
{
"_id" : "test.yutao",
"user" : "yutao",
"db" : "test",
"credentials" : {
"SCRAM-SHA-1" : {
"iterationCount" : 10000,
"salt" : "qgewkOikdl4c/tXTAjd+4Q==",
"storedKey" : "0k7fgg42EFwmrrykGUsxotvL/x0=",
"serverKey" : "LvjDxD/rbSVgMUEixrbbbQF5BBg="
}
},
"roles" : [
{
"role" : "read",
"db" : "myTest"
},
{
"role" : "readWrite",
"db" : "test"
}
]
}
也就是说:yutao
账号的认证数据库是test
,并且对myTest
数据库有读的权限。
然后我再下载最新版的Robo 3T
,之后在连接:
上面的提示是指,如果想访问指定的数据库,可以在window -> Authentication tab
页面中指定。
可以看到,只能看到认证数据库test
;
现在我们根据提示来操作下:
实际上,认证数据库
test
可以不用指定,也会显示出来。
看到截图中粗体字:listDatabases;可以猜测, Robo 3T利用这道命令来达到显示效果;
再次,连接:
我们发现,已经可以显示出来了,所以这只是因为Robo 3T
版本升级带来的变化。
参考地址: