mongodb用户权限管理配置
环境
mongodb 3.4
window7
MongoDB常用命令
> db.dropDatabase() #删除当前使用数据库
> db.cloneDatabase("127.0.0.1") #将指定机器上的数据库的数据克隆到当前数据库
> db.copyDatabase("mydb", "temp", "127.0.0.1") #将本机的mydb的数据复制到temp数据库中
> db.repairDatabase() #修复当前数据库
> db.getName() #查看当前使用的数据库,也可以直接用db
> db.stats() #显示当前db状态
> db.version() #当前db版本
> db.getMongo() #查看当前db的链接机器地址
> db.serverStatus() #查看数据库服务器的状态
需求
MongoDB安装完成后,默认是不需要输入用户名密码即可登录的,但是往往数据库方面我们会出于安全性的考虑而设置用户名密码,本篇文章主要介绍了MongoDB添加管理员/普通用户的方法。
用户权限设置
网上总结了四条
MongoDB是没有默认管理员账号,所以要先添加管理员账号,再开启权限认证。 切换到admin数据库,添加的账号才是管理员账号。 用户只能在用户所在数据库登录,包括管理员账号。 管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。
创建管理员账号
In the admin database, add a user with the userAdminAnyDatabase role.
For example, the following creates the user myUserAdmin in the admin
database:
在admin数据库中,添加一个用户并赋予userAdminAnyDatabase角色。
例如,下面是在admin数据库中创建一个名为myUserAdmin用户。
注意: The database where you create the user (in this example, admin) is the user’s authentication database. Although the user would authenticate to this database, the user can have roles in other databases; i.e. the user’s authentication database does not limit the user’s privileges.
注意:你创建用户的这个数据库(这里就是admin数据库)是用户认证数据库。
尽管用户是在这个数据库认证,而用户又有其他数据库的角色;即,用户认证数据库不限制用户权限。
在window管理员下启动cmd,并且连接上mongodb,
连接命令:
D:\Program Files\MongoDB\Server\3.4\bin>mongo.exe
创建用户命令:
window中:
D:\Program Files\MongoDB\Server\3.4\mongod.cfg
这个配置文件是我自己手动配置,关于mongodb配置,可以参考:
mongodb3.4的安装和配置
在配置文件中添加.
验证权限是否生效
Once authenticated as the user administrator, use db.createUser() to create additional users. You can assign any built-in roles or user-defined roles to the users.
一旦经过认证的用户管理员,可以使用db.createUser()去创建额外的用户。
你可以分配mongodb内置的角色或用户自定义的角色给用户。The myUserAdmin user only has privileges to manage users and roles. As myUserAdmin, if you attempt to perform any other operations, such as read from a foo collection in the test database, MongoDB returns an error.
这个myUserAdmin用户仅仅只有特权去管理用户和角色,myUserAdmin,如果你试图执行其他任何操作,例如在test数据库中的foo集合中去读数据,mongodb将返回错误。
注意:The database where you create the user (in this example, test) is that user’s authentication database. Although the user would authenticate to this database, the user can have roles in other databases; i.e. the user’s authentication database does not limit the user’s privileges.
你创建用户的数据库(这里就是test数据库)是该用户认证数据库。尽管用户认证是这个数据库,用户依然可以有其他数据库的角色。即用户认证数据库不限制用户权限。
创建普通用户:
window中的cmd中执行:
内建的角色
数据库用户角色:read、readWrite;
数据库管理角色:dbAdmin、dbOwner、userAdmin;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
内部角色:__system
角色说明:
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限