之前用MongoDB没有设置用户和权限,一直都是本机应用程序连接MongoDB。在服务器上部署后对外没有开数据库连接端口,本机应用程序连接再开放应用程序端口供外部访问。
我部署的环境是ubuntu 14.04下MongoDB。首先要开启安全模式的话,在启动MongoDB服务的时候就要加上--auth参数,命令如下:
/usr/local/mongodb/mongod -dbpath=/data/mongodb --fork --port 27017 --logpath=/usr/local/mongodb/log/work.log --logappend --auth
这样的话再连接MongoDB操作的时候就需要一定的权限。
一、首先我们需要在没有加"--auth"权限参数启动服务进行用户权限管理
我们这样启动MongoDB服务:
/usr/local/mongodb/mongod -dbpath=/data/mongodb --fork --port 27017 --logpath=/usr/local/mongodb/log/work.log --logappend --auth
或者编辑 开机启动 /etc/rc.local 下 添加以上指令。
这时不指定用户连接mongodb,是可以登录并操作的,我的操作如下:
root@timeless-HP-Pavilion-g4-Notebook-PC:# /usr/local/mongodb/mongo MongoDB shell version: 2.6.6 connecting to: test > show tables 2015-03-10T19:26:59.186+0800 error: { "$err" : "not authorized for query on test.system.namespaces", "code" : 13 } at src/mongo/shell/query.js:131 >
可以看到,使用show tables 指令提示 没有权限执行,原因是 我在admin 数据库中添加了用户认证。
> use admin //切换到 admin switched to db admin > db.user.find() //查看用户信息提示 没有权限 error: { "$err" : "not authorized for query on admin.user", "code" : 13 } > use admin switched to db admin > db.a db.addUser( db.adminCommand( db.auth( > db.auth('root','xxxxx') //数据库超级管理员认证 1 //表示认证成功
//mongoDB 默认没有用户认证
> use admin switched to db admin > db.addUser('sa','sa') { "user" : "sa", "readOnly" : false, "pwd" : "75692b1d11c072c6c79332e248c4f699", "_id" : ObjectId("53af835ada88ac42a40917a0") } > db.system.users.find() { "_id" : ObjectId("53af835ada88ac42a40917a0"), "user" : "sa", "readOnly" : false, "pwd" : "75692b1d11c072c6c79332e248c4f699" }
以上为添加用户的操作
注意 :
1、用户认证只能在指定的数据库中认证。 比如在 admin 中 执行 db.addUser('root','xxxxxxx'); 执行认证的时候需要 use admin 然后执行 db.auth('user','xxxxxx');
2、如果有数据库没有设置用户 超级管理员可以 查看并修改该数据库中的数据,已经设置用户超级管理员依然可以查看并修改数据。
3、同时可以指定用户 指定数据库 登陆mongo。 比如
root@timeless-HP-Pavilion-g4-Notebook-PC:/usr/local/apache243/htdocs# /usr/local/mongodb/mongo -uroot -p201671zhuang localhost:27017/admin MongoDB shell version: 2.6.6 connecting to: localhost:27017/admin >show tables
system.indexes
system.users
system.version
>
二、添加完顶层admin用户,可以用admin账户进行其他用户的设置
如果想让单独的库有单独的用户名就得先从admin登录然后设置相应的用户信息,具体操作如下:
> use test switched to db test > show collection 2015-03-10T19:42:33.621+0800 don't know how to show [collection] at src/mongo/shell/utils.js:729 > db.addUser('root','xxxxxxxxxxx'); WARNING: The 'addUser' shell helper is DEPRECATED. Please use 'createUser' instead Successfully added user: { "user" : "root", "roles" : [ "dbOwner" ] }
> exit bye root@timeless-HP-Pavilion-g4-Notebook-PC:/usr/local/apache243/htdocs# /usr/local/mongodb/mongo -uroot -pxxxxxx localhost:27017/test MongoDB shell version: 2.6.6 connecting to: localhost:27017/test >