mongodb数据库3.0没有admin数据库了,怎么添加超级管理员

mongodb3.0没有admin数据库了,怎么添加超级管理员_百度知道
mongodb3.0没有admin数据库了,怎么添加超级管理员
我有更好的答案
参照官方的说明,使用db.createUser()方法添加。 db.createUser(user, writeConcern) Creates a new user for the database where the method runs. db.createUser() returns a duplicate user error if the user already exists on the database. -------------------------- use products db.createUser( { &user& : &accountAdmin01&,
&pwd&: &cleartext password&,
&customData& : { employeeId: 12345 },
&roles& : [ { role: &clusterAdmin&, db: &admin& },
{ role: &readAnyDatabase&, db: &admin& },
&readWrite&
{ w: &majority& ...
其他类似问题
为您推荐:
超级管理员的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁MongoDB已经使用很长一段时间了,基于MongoDB的数据存储也一直没有使用到权限访问(MongoDB默认设置为无权限访问限制),今天特地花了一点时间研究了一下,研究成果如下:
注:研究成果基于Windows平台
MongoDB在本机安装部署好后
1. 输入命令:show dbs,你会发现它内置有两个数据库,一个名为admin,一个名为local。local好像没啥用,如果哪位在使用过程中发现了这个local表的用途,希望能够留言提醒,那我们就专心来说说admin表
2. 输入命令:use admin,你会发现该DB下包含了一个system.user表,呵呵,没错,这个表就等同于MsSql中的用户表,用来存放超级管理员的,那我们就往它里面添加一个超级管理员试试看
3. 输入命令:db.addUser('sa','sa'),这里我添加一个超级管理员用户,username为sa,password也为sa,即然我们添加了超级管理员,那咱们就来测试下,看看咱们再次连接MongoDB需不需要提示输入用户名、密码,我们先退出来(ctrl+c)
4. 输入命令:use admin
5. 输入命令:show collections,查看该库下所有的表,你会发现,MongoDB并没有提示你输入用户名、密码,那就奇怪了,这是怎么回事呢?在文章最开始提到了,
MongoDB默认设置为无权限访问限制,即然这样,那我们就先把它设置成为需要权限访问限制,咱们再看看效果,怎么设置呢?
6. 在注册表中,找到MongoDB的节点,在它的ImgPath中,我们修改一下,加入 -auth,如下所示:
"D:\Program Files\mongodb\bin\mongod" -dbpath& e:\work\data\mongodb\db& -logpath& e:\work\data\mongodb\log -auth -service
7. 输入命令:use admin
8. 输入命令:show collections,呵呵,我们发现无法查看该库下的表了,提示:"$err" : "unauthorized db:admin lock type:-1 client:127.0.0.1",很明显,提示没有权限,看来关键就在于这里,我们在启动MongoDB时,需要加上-auth参数,这样我们设置的权限才能生效,好,接下来我们使用刚刚之前设置的用户名、密码来访问
9. 输入命令:db.auth('sa','sa'),输出一个结果值为1,说明这个用户匹配上了,如果用户名、密码不对,会输入0
10. 输入命令:show collections,呵呵,结果出来了,到这里,权限设置还只讲到一多半,接着往下讲,我们先退出来(ctrl+c)
11. 输入命令:mongo TestDB,我们尝试连接一个新的库(无论这个库是否存在,如果不存在,往该库中添加数据,会默认创建该库),然后,我们想看看该库中的表
12. 输入命令:show collections,好家伙,没权限,我们输入上面创建的用户名、密码
13. 输入命令:db.auth('sa','sa'),输入结果0,用户不存在,这下有人可能就不明白了,刚刚前面才创建,怎么会不存在呢?原因在于:当我们单独访问MongoDB的数据库时,需要权限访问的情况下,用户名密码并非超级管理员,而是该库的system.user表中的用户,注意,我这里说的是单独访问的情况,什么是不单独访问的情况呢?接下来再讲,现在咋办,没权限,那我们就尝试给库的system.user表中添加用户
14. 输入命令:db.addUser('test','111111'),哇靠,仍然提示没有权限,这可咋办,新的数据库使用超级管理员也无法访问,创建用户也没有权限,呵呵,别急,即然设定了超级管理员用户,那它就一定有权限访问所有的库
15. 输入命令:use admin
16. 输入命令:db.auth('sa','sa')
17. 输入命令:use TestDB
18. 输入命令:show collections,哈哈,一路畅通无阻,我们发现可以利用超级管理员用户访问其它库了,呵呵,这个就是不单独访问的情况,不难发现,我们是先进入admin库,再转到其它库来的,admin相当于是一个最高级别官员所在区域,如果你是个地产商,想在地方弄个大工程做做,你想不经过那些高级官员就做,这是行不通的,你需要先去到他们那里,送点礼,再顺着下到地方,工程你就可以拿到手了,此言论仅为个人观点,不代表博客园;即然工程拿到手了,就要开始建了,那我们不至于每加块砖、添个瓦都得去和那帮高级官员打招呼吧,所以我们得让这个工程合法化,咱们得把相关的手续和证件弄齐全,不至于是违建
19. 输入命令:db.addUser('test','111111'),我们给TestDB库添加一个用户,以后每次访问该库,我都使用刚刚创建的这个用户,我们先退出(ctrl+c)
20. 输入命令:mongo TestDB
21. 输入命令:show collections,提示没有权限
22. 输入命令:db.auth('test','111111'),输出结果1,用户存在,验证成功
23. 输入命令:show collections,没再提示我没有权限,恭喜您,成功了
好累啊!一口气写完,呵呵
注:当需要使用权限才能访问MongoDB时,如果需要查看MongoDB中所有的库,我们只能通过超级管理员权限,输入命令show dbs来查看了。
阅读(...) 评论()MongoDB的权限管理
MongoDB 2.4新引入了一套权限控制的机制,而旧的addUser的方法在3.0已经不再提供,这对我们管理MongoDB造成了诸多不便。本文简单总结一下新版MongoDB关于权限管控的一些技巧。 MongoDB使用了
MongoDB 2.4新引入了一套权限控制的机制,而旧的addUser的方法在3.0已经不再提供,这对我们管理MongoDB造成了诸多不便。本文简单总结一下新版MongoDB关于权限管控的一些技巧。
& MongoDB使用了基于角色的访问策略来管理MongoDB的安全控制。可以赋予用于一个或多个权限来让用户能访问的资源并进行某项数据库的操作。如果不对用于赋予权限,用户没有任何权限。
& MongoDB默认不启用安全授权机制。在单节点环境下,你需要在启动mongod时指定&auth,或者在参数里设置auth=true来启用这个特性。如果你是一个shard集群或者RS的环境时,你就需要为每一个节点指定key,这个文件内包含相同的字符串信息(不能包含符号),用于节点成员验证。如果制定了keyfile,就默认对RS/集群启用了auth。例如以此对MongoDB中的member执行:
echo &mongomemberspassword& & /etc/mongod.key
echo &keyfile=/etc/mongod.key& && /etc/mongod.conf
mongodb:root /etc/mongod.key
600 /etc/mongod.key
service mongod restart
&& MongoDB提供了很多内建角色,用户通用的数据库管理。内建角色的文档在这里http://docs.mongodb.org/manual/reference/built-in-roles/。MongoDB提供了数据库管理权限和数据库用户权限两种类型,其他的权限只能作用于admin数据库上。具体如下:
(1).数据库用户角色
针对每一个数据库进行控制。
read :提供了读取所有非系统集合,以及系统集合中的system.indexes, system.js, system.namespaces
readWrite: 包含了所有read权限,以及修改所有非系统集合的和系统集合中的system.js的权限.
(2).数据库管理角色
每一个数据库包含了下面的数据库管理角色。
dbOwner:该数据库的所有者,具有该数据库的全部权限。
dbAdmin:一些数据库对象的管理操作,但是没有数据库的读写权限。(参考:http://docs.mongodb.org/manual/reference/built-in-roles/#dbAdmin)
userAdmin:为当前用户创建、修改用户和角色。拥有userAdmin权限的用户可以将该数据库的任意权限赋予任意的用户。
(3).集群管理权限
admin数据库包含了下面的角色,用户管理整个系统,而非单个数据库。这些权限包含了复制集和共享集群的管理函数。
clusterAdmin:提供了最大的集群管理功能。相当于clusterManager, clusterMonitor, and hostManager和dropDatabase的权限组合。
clusterManager:提供了集群和复制集管理和监控操作。拥有该权限的用户可以操作config和local数据库(即分片和复制功能)
clusterMonitor:仅仅监控集群和复制集。
hostManager:提供了监控和管理服务器的权限,包括shutdown节点,logrotate, repairDatabase等。
备份恢复权限:admin数据库中包含了备份恢复数据的角色。包括backup、restore等等。
(4).所有数据库角色
admin数据库提供了一个mongod实例中所有数据库的权限角色:
readAnyDatabase:具有read每一个数据库权限。但是不包括应用到集群中的数据库。
readWriteAnyDatabase:具有readWrite每一个数据库权限。但是不包括应用到集群中的数据库。
userAdminAnyDatabase:具有userAdmin每一个数据库权限,但是不包括应用到集群中的数据库。
dbAdminAnyDatabase:提供了dbAdmin每一个数据库权限,但是不包括应用到集群中的数据库。
(5). 超级管理员权限
root: dbadmin到admin数据库、useradmin到admin数据库以及UserAdminAnyDatabase。但它不具有备份恢复、直接操作system.*集合的权限,但是拥有root权限的超级用户可以自己给自己赋予这些权限。
了解权限了之后,就是赋权语句了。新版的函数比之前的要麻烦很多:
db.createUser(user, writeConcern)
user 关于用户的身份认证和访问信息(JSON);
writeConcern这个文档描述MongoDB提供写操作的成功报告。
user文档,定义了用户的以下形式:
{ user: &&name&&,
pwd: &&cleartext password&&,
customData: { &any information& },
{ role: &&role&&, db: &&database&& } | &&role&&,
user文档字段介绍:
user字段,用户的名字;
pwd字段,用户的密码;
cusomData字段,为任意内容,例如可以为用户全名介绍;
roles字段,指定用户的角色,可以用一个空数组给新用户设定空角色;roles字段,可以指定内置角色和用户定义的角色。
那么创建一个管理员,直接给几个所有数据库权限即可。
db.createUser({
user:&test&,
role:&userAdminAnyDatabase&,
db:&admin&
role:&readWriteAnyDatabase&,
db:&admin&
role:&dbAdminAnyDatabase&,
db:&admin&
创建某个数据库的只读权限,该用户首先要使用&use db_&到对应的数据库下创建权限,否则它会创建在其他数据库下面(比如admin)。
db.createUser({
user:&test&,
role:&read&,
以此类推。我们可以通过db.auth(&username&,&password&)或者下面的方式来验证:
mongo -u test - --authentiionDatabase test
除了db.createUser(),下面几个函数也是常用的:
获得数据库的所有用户权限信息:db.getUsers()
获得某个用户的权限信息:db.getUser()
创建角色: db.createRole()
更新角色:db.updateRole()
删除角色:db.dropRole()
获得某个角色信息:db.getRole()
删除用户:db.dropUser()
删除所有用户:db.dropAllUsers()
将一个角色赋予给用户:db.grantRolesToUser()
撤销某个用户的某个角色权限:db.revokeRolesFromUser()
更改密码:db.changeUserPassword()
转载请保留固定链接:
------分隔线----------------------------
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
一、集群复制状态检查 1、SHOW GLOBAL STATUS LIKE wsrep_%;+-------------...
1. 什么是表分区? 表分区,是指根据一定规则,将数据库中的一...
在你原来的网站服务商处利用phpmyadmin导出数据库为sql文件,这个...
MongoDB 2.4新引入了一套权限控制的机制,而旧的addUser的方法在...
内容提纲 MySQL的特点; 硬件、系统优化; MySQL 配置优化; SCH...
数据库在运行中突然断电,当服务器重启发现MySQL无法启动,查...用Robomongo 0.8.5连接mongodb 3.0.x应该有很多同学用前面一篇文章介绍方式设置好用户后,用Robomongo 0.8.5连接mongodb 3.0.x会发现怎么都连接不上,为什么呢?咱先看下日志文件会发现有这么一句T09:28:47.588+0800 I ACCESS
[conn5] Failed to authenticate admin@admin with mechanism MONGODB-CR: AuthenticationFailed UserNotFound Could not find user admin@admin原来,在mongodb 2.x采用的默认认证机制是MONGODB-CR而在mongodb官网说明中mongodb 3.0.x采用的认证机制是SCRAM-SHA-1而Robomongo 0.8.5的认证机制并没有升级(个人推测,也有可能可以在Robomongo哪个配置文件可以设置一下也不一定)第一步修改配置文件:xxx@xxx:~$ sudo gedit /etc/mongod.conf将下面security:
authorization: enabled改为#security保存退出xxx@xxx:~$ ps -ef | grep mongodbxxx@xxx:~$ sudo kill xxxxxxx@xxx:~$ sudo service mongod startxxx@xxx:~$ mongoMongoDB shell version: 3.0.7connecting to: testT18:10:13.137+0800 I CONTROL
[initandlisten] T18:10:13.138+0800 I CONTROL
[initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.T18:10:13.138+0800 I CONTROL
[initandlisten] **
We suggest setting it to 'never'T18:10:13.138+0800 I CONTROL
[initandlisten] T18:10:13.138+0800 I CONTROL
[initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.T18:10:13.138+0800 I CONTROL
[initandlisten] **
We suggest setting it to 'never'T18:10:13.138+0800 I CONTROL
[initandlisten] & show dbsadmin
0.078GBlocal
0.078GBzyb
0.078GB& use adminswitched to db admin& show collectionssystem.indexessystem.userssystem.version& db.system.version.find(){ &_id& : &authSchema&, &currentVersion& : 5 }从上面可以看到&currentVersion& : 5 currentVersion为5则表示当前数据库的认证机制是SCRAM-SHA-1而在mongodb 2.x中采用的默认认证机制是MONGODB-CR所以想要在3.x版本中使用Robomongo 0.85中使用用户名密码连接数据库则可以将mongodb的数据库认证机制(当前为SCRAM-SHA-1)改为MONGODB-CR那如何改呢?请看下面操作:& var schema=db.system.version.findOne({&_id& : &authSchema&})& schema.currentVersion=33& db.system.version.save(schema)WriteResult({ &nMatched& : 1, &nUpserted& : 0, &nModified& : 1 })& db.system.version.find(){ &_id& : &authSchema&, &currentVersion& : 3 }在这表示已经修改成功了。下面创建用户(注意,若之前已经创建过用户的则要将用户删除,因为之前创建的用户采用的认证机制是SCRAM-SHA-1)本人因为之前创建过,所以先drop掉用户& use adminswitched to db admin& db.dropUser('admin')true& db.createUser(... {... user:&admin&,... pwd:&admin&,... roles:[{role:&userAdminAnyDatabase&,db:&admin&},{role:&readWriteAnyDatabase&,db:&admin&}]... }... )Successfully added user: {
&user& : &admin&,
&roles& : [
&role& : &userAdminAnyDatabase&,
&db& : &admin&
&role& : &readWriteAnyDatabase&,
&db& : &admin&
]}& db.system.users.find(){ &_id& : &admin.admin&, &user& : &admin&, &db& : &admin&, &credentials& : { &MONGODB-CR& : &7c67ef13bbd4cae106df704& }, &roles& : [ { &role& : &userAdminAnyDatabase&, &db& : &admin& }, { &role& : &readWriteAnyDatabase&, &db& : &admin& } ] }& eixtbye接下来在配置文件中恢复认证xxx@xxx:~$ sudo gedit /etc/mongod.conf改#security:为security:
authorization: enabled保存退出接下来xxx@xxx:~$ ps -ef | grep mongodbxxx@xxx:~$ sudo kill xxxxxxx@xxx:~$ sudo service mongod start然后在mongo shell操作(注意1.该方式添加的用户不能用Robomongo 0.8.5连接,具体原因在下面;注意2.既然认证了就要先db.auth('xxx','xxx')返回1后再进行其他操作)如下操作xxx@xxx:~$ mongoMongoDB shell version: 3.0.7connecting to: test& use adminswitched to db admin& db.auth('admin','admin')1&show dbsadmin
0.078GBlocal
0.078GB有个题外话:有些同学会发现怎么我的数据库怎么没有/etc下没有mongod.conf文件,那怎么操作没有mongod.conf配置文件,数据库其实加载的配置应该是内置的(本人理解)此时如果不显示指定配置文件启动数据库的话,可能不好添加权限认证,因为mongodb默认情况下就是不认证的,那如何操作呢?xxx@xxx:~/mongodb/mongodb/bin$ ./mongod --config /home/zyb/mongodb/mongodb.conf &上述操作即可指定配置文件启动数据库(上面路径是本人数据库存放的路径)其他设置权限的操作和上面一样。长按二维码即可关注源码工作室(JavaSourceCode) 
 文章为作者独立观点,不代表微头条立场
的最新文章
感知机:是二分类的线性分类模型此篇开始将开启Go web之旅,我们在这趟旅程中领略源码之雄伟,框架之奇艳,中间件之灵秀...Go web精彩之旅现在开始了,源码解析之http...Go web杂谈Go web之旅(路由篇)mongodb 3.0.x 添加用户名,密码,权限设置应该有很多同学用前面一篇文章介绍的方式设置好用户后,用Robomongo 0.8.5连接mongodb 3.0.x会发现怎么都连接不上,
为什么呢?JavaSourceCode最好java,android技术分享热门文章最新文章JavaSourceCode最好java,android技术分享mongodb3.0没有admin数据库了,怎么添加超级管理员_百度知道
mongodb3.0没有admin数据库了,怎么添加超级管理员
我有更好的答案
参照官方的说明,使用db.createUser()方法添加。 db.createUser(user, writeConcern) Creates a new user for the database where the method runs. db.createUser() returns a duplicate user error if the user already exists on the database. -------------------------- use products db.createUser( { &user& : &accountAdmin01&,
&pwd&: &cleartext password&,
&customData& : { employeeId: 12345 },
&roles& : [ { role: &clusterAdmin&, db: &admin& },
{ role: &readAnyDatabase&, db: &admin& },
&readWrite&
{ w: &majority& ...
其他类似问题
为您推荐:
超级管理员的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 mongodb 超级管理员 的文章

 

随机推荐