今天就跟大家聊聊有关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/db logpath=/usr/local/mongodb/logs/mongodb.log logappend=true port=27000 fork=true auth=false nohttpinterface=false bind_ip=192.168.221.161 journal=false quiet=true登入数据库,只能看到一个库,看不到admin库:
[root@MidApp mongodb]# mongo 192.168.221.161:27000 MongoDB shell version: 3.0.6 connecting to: 192.168.221.161:27000/test > show dbs local 0.078GB现在需要创建一个帐号,该账号需要有grant权限,即:账号管理的授权权限。注意一点,mongodb帐号是跟着库走的,所以在指定库里授权,必须也在指定库里验证(auth)
> use admin switched 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.profile userAdmin:允许用户向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.6 connecting 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 (可以看到,创建的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 (看完上述内容,你们对MongoDb中怎么控制用户权限有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。