对于各种数据库软件,启用认证的方法都不同,比如PG是在pg_hba.conf中对用户设置使用启用密码认证,而Oracle远程登录均需要使用密码认证。Mongodb是在参数中控制是否启用密码认证,并且启用后,对所有用户生效,并不能像PG一样对用户区别对待。需要启用认证,使用mongod --auth或者在参数文件中加入authorization: enabled。mongodb的认证分为用户验证(client auth)和集群间认证(internal auth),在复制集中启用认证需指定keyFile参数,指定后即默认启用了用户验证。
从3.0开始,mongodb默认采用SCRAM加密算法,在3.0以前默认使用MongoDB-CR算法,所以如果数据库是从2.X版本升级上来的数据库,可能出现认证机制不兼容导致客户端无法连接数据库的情况。另外mongodb还支持x.509算法,主要用于加密连接中,本人也未使用过,此处不做探讨。
——用户创建
▼▼▼
use admin
db.createUser({user:"fhtest", pwd:"Ba@31^T2cy",roles:[{role:"read",db:"production"}]});
表示在production库有read角色,可以看到roles值是一个数组,所以可以具有多个库的多种角色或者一个库的多种角色
——用户授权
▼▼▼
db.grantRolesToUser( "ticket" , [ { role: "dbOwner", db: "pc_ticket" },{ role: "dbOwner", db: "pc_payment" } ]) ;
——权限回收
▼▼▼
db.revokeRolesFromUser( "ticket", [{role:"clusterMonitor",db:"admin"}] );
——用户查询
▼▼▼
db.getUsers();
内置角色包括root、dbOwner、clusterAdmin、read、readWrite等,root角色相当于PG的superuser超管权限。在生产环境中,会有给用户授予所有数据库读权限的需求,类似oracle的select any table ,Mongodb中具有all database role,如readAnyDatabase、readWriteAnyDatabase等 ,详细内置role可查看官方文档。
由于不能将对象权限授予用户,所以当要进行精细的权限控制,内置角色无法满足需求,就只能自定义角色。自定义角色里面可以直接对对象(resource)进行操作(action)的权限,也可以包含某个角色。如:
▼▼▼
use admin
db.createRole(
{
role: "myClusterwideAdmin",
privileges: [
{ resource: { cluster: true }, actions: [ "addShard" ] },
{ resource: { db: "config", collection: "" }, actions: [ "find", "update", "insert", "remove" ] },
{ resource: { db: "users", collection: "usersCollection" }, actions: [ "update", "insert", "remove" ] },
{ resource: { db: "", collection: "" }, actions: [ "find" ] }
],
roles: [
{ role: "read", db: "admin" }
]
},
{ w: "majority" , wtimeout: 5000 }
)
当然也可以将role授权给role,使用db.grantRolesToRole() 。
在生产环境中若,经常需要在mongo上执行javascript脚本,并且使用db.eval()调用javascript脚本,则可能出现如下报错,提示无权限
eval需要所有资源的所有权限,需创建如下角色并授予用户
▼▼▼
db.createRole(
{
role: "eval_role",
privileges: [
{ resource: { anyResource: true }, actions: [ "anyAction" ] }
],
roles:[]
}
)
在此,强烈不建议授予此类权限!调用javascript可以使用其他方案,比如load 。
相关阅读
更多精彩干货分享
点击下方名片关注
IT那活儿
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/129932.html
摘要:可选,抛出异常的级别。示例教程更新一条数据标题。命令行下执行进入数据库进入库可查看当前库用户列表执行新建用户设置账户密码,并指定级别。重启服务重新进入数据库,发现命令无法执行,报权限不足错误。命令可以正常执行。 1.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB ...
摘要:可选,抛出异常的级别。示例教程更新一条数据标题。命令行下执行进入数据库进入库可查看当前库用户列表执行新建用户设置账户密码,并指定级别。重启服务重新进入数据库,发现命令无法执行,报权限不足错误。命令可以正常执行。 1.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB ...
摘要:默认是不开启权限认证的,而我也是一直这么做的。自从上次爆发了赎金门事件,必须重视下的权限认证了。开启认证也很简单,在配置文件默认是里面加入这样一行就行了。 MongoDB version: v3.4.4 MongoDB默认是不开启权限认证的,而我也是一直这么做的。自从上次MongoDB爆发了赎金门事件,必须重视下MongoDB的权限认证了。 开启认证也很简单,在配置文件(默认是/etc...
摘要:一下安装数据库进入官网,选择相应的版本下载,安装时默认勾选安装服务和修改一些数据库配置,如已有数据库连接工具,可取消默认勾选的安装。 一、Win下安装数据库 进入mongo官网,选择相应的msi版本下载,安装时默认勾选安装MongoD服务和修改一些数据库配置,如已有数据库连接工具Robo 3T,可取消默认勾选的compass安装。 若启动服务报mp错误,可修改binmongod.cfg...
阅读 1346·2023-01-11 13:20
阅读 1684·2023-01-11 13:20
阅读 1132·2023-01-11 13:20
阅读 1858·2023-01-11 13:20
阅读 4100·2023-01-11 13:20
阅读 2704·2023-01-11 13:20
阅读 1385·2023-01-11 13:20
阅读 3597·2023-01-11 13:20