MongoDb中怎么控制用户权限
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,今天就跟大家聊聊有关MongoDb中怎么控制用户权限,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Mongodb创建用户的语法在不用的版本之间
千家信息网最后更新 2025年11月07日MongoDb中怎么控制用户权限
今天就跟大家聊聊有关MongoDb中怎么控制用户权限,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
Mongodb创建用户的语法在不用的版本之间还是不一样的。我这里使用的版本3.0.6。版本3.0之前使用的是db.addUser(),但3.0之后使用的是db.createUser()。3.0后版本中再使用db.addUser()会报如下错误:
> db.addUser('dba','dba')2017-11-17T13:17:08.001+0800 E QUERY TypeError: Property 'addUser' of object admin is not a function如果数据库中还没有添加任何用户,要想新创建一个用户,要先把auth认证停掉,在进入数据库,也就是让auth=false。
[root@MidApp mongodb]# cat mongodb.conf#配置文件dbpath=/data/dblogpath=/usr/local/mongodb/logs/mongodb.loglogappend=trueport=27000fork=trueauth=falsenohttpinterface=falsebind_ip=192.168.221.161journal=falsequiet=true
登入数据库,只能看到一个库,看不到admin库:
[root@MidApp mongodb]# mongo 192.168.221.161:27000 MongoDB shell version: 3.0.6connecting to: 192.168.221.161:27000/test> show dbslocal 0.078GB
现在需要创建一个帐号,该账号需要有grant权限,即:账号管理的授权权限。注意一点,mongodb帐号是跟着库走的,所以在指定库里授权,必须也在指定库里验证(auth)
> use adminswitched to db admin> db.createUser({user:"dba",pwd:"dba",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})Successfully added user: {"user" : "dba","roles" : [{"role" : "userAdminAnyDatabase","db" : "admin"}]}> db.system.users.find(){ "_id" : "admin.dba", "user" : "dba", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "MXvU7oJanxW7gPw+NwI7rw==", "storedKey" : "lTPmK31qbk1YKmx5stmYiphsQZE=", "serverKey" : "gVovcstiwC0nuU6LTXZAiWkucfA=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }> db.system.users.find().pretty(){"_id" : "admin.dba","user" : "dba","db" : "admin","credentials" : {"SCRAM-SHA-1" : {"iterationCount" : 10000,"salt" : "MXvU7oJanxW7gPw+NwI7rw==","storedKey" : "lTPmK31qbk1YKmx5stmYiphsQZE=","serverKey" : "gVovcstiwC0nuU6LTXZAiWkucfA="}},"roles" : [{"role" : "userAdminAnyDatabase","db" : "admin"}]}可以看到创建了一个用户dba,密码dba,拥有admin库的userAdminAnyDatabase角色。下面看一下mongodb中的内置角色:
1. 数据库用户角色:read、readWrite; 2. 数据库管理角色:dbAdmin、dbOwner、userAdmin; 3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager; 4. 备份恢复角色:backup、restore; 5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase 6. 超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase) 7. 内部角色:__system
看一下具体的角色定义:
Read:允许用户读取指定数据库readWrite:允许用户读写指定数据库dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profileuserAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。root:只在admin数据库中可用。超级账号,超级权限
我们打开auth参数,来验证一下。
[root@MidApp mongodb]# mongo 192.168.221.161:27000 MongoDB shell version: 3.0.6connecting to: 192.168.221.161:27000/test> show dbs#没有验证,不会有权限2017-11-17T13:04:35.357-0800 E QUERY Error: listDatabases failed:{"ok" : 0,"errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }","code" : 13} at Error () at Mongo.getDBs (src/mongo/shell/mongo.js:47:15) at shellHelper.show (src/mongo/shell/utils.js:630:33) at shellHelper (src/mongo/shell/utils.js:524:36) at (shellhelp2):1:1 at src/mongo/shell/mongo.js:47> use admin#在admin库下面添加的账号,所以要切到admin下面认证switched to db admin> db.auth('dba','dba')1> show dbsadmin 0.078GBlocal 0.078GB 可以看到,创建的dba用户已经验证成功。接下来我在创建两个用户,验证一下其他角色权限。创建一个只读用户,一个读写用户。
> use test;switched to db test> db.createUser({user:"zduser",pwd:"zduser",roles:[{role:"read",db:"test"}]})Successfully added user: {"user" : "zduser","roles" : [{"role" : "read","db" : "test"}]}> db.createUser({user:"dxuser",pwd:"dxuser",roles:[{role:"readWrite",db:"test"}]})Successfully added user: {"user" : "dxuser","roles" : [{"role" : "readWrite","db" : "test"}]}> show users;{"_id" : "test.zduser","user" : "zduser","db" : "test","roles" : [{"role" : "read","db" : "test"}]}{"_id" : "test.dxuser","user" : "dxuser","db" : "test","roles" : [{"role" : "readWrite","db" : "test"}]}>在test库中创建一个集合,验证一下这两个用户权限:
> show tables;#userAdminAnyDatabase权限只针对用户管理,没有其他的权限2017-11-17T13:47:39.845-0800 E QUERY Error: listCollections failed: {"ok" : 0,"errmsg" : "not authorized on test to execute command { listCollections: 1.0 }","code" : 13} at Error () at DB._getCollectionInfosCommand (src/mongo/shell/db.js:646:15) at DB.getCollectionInfos (src/mongo/shell/db.js:658:20) at DB.getCollectionNames (src/mongo/shell/db.js:669:17) at shellHelper.show (src/mongo/shell/utils.js:625:12) at shellHelper (src/mongo/shell/utils.js:524:36) at (shellhelp2):1:1 at src/mongo/shell/db.js:646> exitbye[root@MidApp mongodb]# mongo 192.168.221.161:27000 #重新登录一下MongoDB shell version: 3.0.6connecting to: 192.168.221.161:27000/test> use testswitched to db test> db.tb1.insert({"a":1,"b":2})#先试着插入数据看看WriteResult({"writeError" : {"code" : 13,"errmsg" : "not authorized on test to execute command { insert: \"tb1\", documents: [ { _id: ObjectId('5a0f595b3b6523dcb81d4f76'), a: 1.0, b: 2.0 } ], ordered: true }"}})> db.auth('dxuser','dxuser')#用可读写的用户认证1> db.tb1.insert({"a":1,"b":2})#可以插入数据WriteResult({ "nInserted" : 1 })> db.tb1.insert({"a":11,"b":22})WriteResult({ "nInserted" : 1 })> db.tb1.insert({"a":111,"b":222})WriteResult({ "nInserted" : 1 })> db.tb1.find(){ "_id" : ObjectId("5a0f597f3b6523dcb81d4f77"), "a" : 1, "b" : 2 }{ "_id" : ObjectId("5a0f59933b6523dcb81d4f78"), "a" : 11, "b" : 22 }{ "_id" : ObjectId("5a0f59983b6523dcb81d4f79"), "a" : 111, "b" : 222 }> db.auth('zduser','zduser')#切换只读用户1> db.tb1.insert({"a":1111,"b":2222})#没有权限插入数据WriteResult({"writeError" : {"code" : 13,"errmsg" : "not authorized on test to execute command { insert: \"tb1\", documents: [ { _id: ObjectId('5a0f59c63b6523dcb81d4f7a'), a: 1111.0, b: 2222.0 } ], ordered: true }"}})> db.tb1.find()#可以查看数据{ "_id" : ObjectId("5a0f597f3b6523dcb81d4f77"), "a" : 1, "b" : 2 }{ "_id" : ObjectId("5a0f59933b6523dcb81d4f78"), "a" : 11, "b" : 22 }{ "_id" : ObjectId("5a0f59983b6523dcb81d4f79"), "a" : 111, "b" : 222 }> 看完上述内容,你们对MongoDb中怎么控制用户权限有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
用户
数据
数据库
权限
角色
管理
验证
版本
账号
内容
认证
控制
两个
函数
库里
帐号
成功
接下来
不用
之间
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
黑苹果能做web服务器吗
亚太网络安全法全文
数据库建表导入数据sql语言
华为2288xv5服务器上架
数据库系统主要包括哪两个
协同软件开发费用低
社区网络安全示范小区
钦州市app软件开发价格
对计算机网络技术基础的建议
nodejs做游戏服务器开发
全国网络安全产业
中国农业银行网络安全处罚
和平精英怎么使用第二个服务器
华师数据库设计
自己搭建nas存储服务器
软件开发cs bs
数据库基础设计
博士的怎么恢复数据库
apple数据库管理系统架构
数据库计算机考试难买吗
筑牢网络安全抵制有害信息
深圳易通网络技术有限公司
亚太网络安全法全文
连接数据库修改字符集
sql网上宠物数据库
我国制定了网络安全的目的是为了
广州市梦想网络技术有限公司
苹果方舟手游搜不到服务器怎么办
云隙服务器ip
服务器安全狗程序守护