Mongodb 3.x 安装及权限配置

来源:互联网 发布:华为的程序员 编辑:程序博客网 时间:2024/05/18 08:08

Intro

Mongodb本身已经是比较成熟并已经广泛使用的一款nosql产品。了解该产品最好的方式当然是官网,考虑到网络和语言习惯,一些具有中文站则会给我们更大的便利。这篇文章主要记录一下折腾Mongodb3.x的一些步骤,其中所有的内容都是通过阅读官方文档了解的。

一、Mongodb安装

由于大部分时候Mongodb serever都是跑在Linux环境下,所以这里默认操作系统都是Linux centos6。Mongodb版本为当前最新,v3.4.2。

  • tgz包下载
wget 'https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-3.4.2.tgz'
  • 解压缩
tar zxvf  mongodb-linux-x86_64-amazon-3.4.2.tgzcd mongodb-linux-x86_64-amazon-3.4.2/bin

这里会看到所有Mongodb相关的可执行文件,目前只关注

executable desc mongod Server启动程序 mongo Client启动程序


二、Mongodb启动

1. 启动Server

知道了Mongodb server的启动文件是mongod,那么猜想 ./mongod既能启动server,但是很自然我们首先会关注这样几个问题。
1) 默认监听端口是多少,如果设置我自己想用的端口号
2) 运行日志在哪里看
3) 持久化的数据文件放在哪里
4) 是否有配置文件支持更多细节的配置

启动命令

./mongod --port 27017 --dbpath /mongodb/data --logpath /logs/mongodb.log  -f /mongodb/server.conf

以上命令解答上面提到的4个问题。

--port 指定客户端连接端口号,默认27017--dbpath 持久化数据所在路径,启动前该路径必须存在--logpath 日志文件-f 指定配置文件,简单的properties文件,自己创建即可

如果个性化参数都写在配置文件中会让启动命令变得清爽一些,我自己是这样做的

./mongod -f /mongodb/server.conf

配置文件 cat /mongodb/server.conf

port=27017logpath=/logs/mongodb.loglogappend=true #日志生产方式 (追加/覆盖)dbpath=/mongodb/data

2. 客户端连接

Mongodb client的启动文件是mongo,而我们又知道mongodb服务的ip:port,猜都能猜到客户端连接命令

./mongo 127.0.0.1:27017

如果连接成功,mongodb的安装就到此结束了。


三、权限配置

现在mongodb已经安装启动可以使用了,但是很奇怪,一直都没有遇到过权限问题,如果其他人也能随意连上我的数据篡改数据岂不是麻烦了。那下一个要解决的问题 就是为我的数据库加上权限控制。

总的来说是以下几步:

1. 开启权限验证

在server.conf中加上一行

auth=true

2. 添加管理员账号

这里所说的管理员账号不是像linux里面无所不能的root,而是一个能分配账号的账号。在server所在的系统,用客户端连接上server,执行以下代码

use admindb.createUser({    user:'admin',    pwd:'123456',     roles:[{role:'userAdminAnyDatabase', db:'admin'}]})

这样就创建了一个账号,user为admin, 密码为123456,他能在admin库中管理任何库的用户。

3. 添加数据操作账号

一旦开启的权限管理,接下来所有的操作都必须用合适的账号去做,刚刚我们能成功的添加用户,是因为这是我们的第一个账号(第一就有特权,呵)。我们创建的admin账号只能管理用户,而我们真正需要的账号是要能用来读写数据的,那就需要创建一个可读写数据的账号。

接下来,我们要为一个名为”testDatabase”的库添加读写用户rwuser。

use admindb.auth("admin","123456")use testDatabasedb.createUser({    user:'rwuser',    pwd:'123456',     roles:[{role:'readWrite', db:'testDatabase'}]})

使用exit退出连接后,我们就可以使用该账号连接server了

./mongo 127.0.0.1:27017/testDatabase -urwuser -p123456


四. mongodb相关概念

mongodb也存在和mysql类似的“库”概念,大体概念是相似的,同样默认会有一个test库。Collection的概念则对应mysql中的表。

相关的命令:

command desc use ${databaseName} 切换到databaseName db 当前所在库名 show collections 列出当前所在库中所有collection名字 show dbs 列出所有库



在这里“库”的概念之下,我们回头看添加账号时的一些操作。

//use testDatabase =>use admindb.createUser({    user:'rwuser',    pwd:'123456',     roles:[{role:'readWrite', db:'testDatabase'}]})

admin账号登录后,为testDatabase库创建账号时,做了一次库切换use testDatabase,可明明在roles:[{role:'readWrite', db:'testDatabase'}]这一行代码里已经指明给该账号的是testDatabase库的读写权限,还需要多此一举吗。在mongodb里,这确实是有意义的。简单的说来,就是在某个库下创建的账号,只能用来登录到这个库,若再要操作其他库,则需要先做库切换。举个例子,如果上一节中use testDatabase改成use admin,登录命令则需要改成:

./mongo 127.0.0.1:27017/admin -urwuser -p123456

而此时连接成功后是登录到admin库,然后需要use testDatabase才能做后续的读写操作。

0 0