默认情况下,mongodb不启用验证的。数据库级别的权限,要么可读写要么只读权限。mongod的验证配置比较操蛋。
分两种情形:一种是单服务器,只需启动时添加–auth参数即可。 另一种是复制集、分片集群服务器,必须指定keyfile参数,其他节点之间的通讯基于该keyfile。
在这种情况下,–auth参数是隐含启用的,所有的mongodb访问都必须验证的。
Mongodb中安全权限验证是数据库级别的
1、在admin中创建的 权限账号是全局性的,可以访问所有DB;
2、在非admin中创建的权限账号是 本地账号,只对本地DB具有操作权限;
3、如果在非 admin数据中 创建权限账号时指定了具有对其他DB的权限,则相应的具有其权限;
4、密码中不能有 < > & " ' : @
************************************************
db.createUser({user:"wenzhong",pwd:"yearmonth@20140111",roles:["root"]},{w:1,wtimeout:10000});
************************************************
一、单服务器模式
添加管理员用户,admin库下的用户是全局用户,对所有的数据库可读写。
# ./mongo
> use admin
> db.addUser("root","www.ttlsa.com")
> db.auth("root","www.ttlsa.com")
创建普通的用户,是数据库级别的。
> use database_name
> db.addUser('guest','www.ttlsa.com') 可读写
> db.addUser('guest','www.ttlsa.com',true) 只可读
查看用户
> db.system.users.find()
删除用户
> db.removeUser(username)
或
> db.system.users.remove( { user: username } )
配置文件加上下面的参数后重新启动mongod实例
auth = ture
二、复制集与分片集群模式下
2.1 keyfile规则
1. 集群服务器之间通讯通过keyfile进行身份验证。
2. 每个实例的keyfile文件内容要一致。
3. keyfile文件权限仅当前用户可读。
4. 集群成员都需要指定–keyFile参数。
5. 每个客户端连接到数据库之前必须验证。
6. key长度必须在6到1024个字符之间,否则会报错,mongod无法启动。
7. 任何空格被忽略。
8. 最好是3的倍数 。key不能包含非法字符=,否则会报错,mongod无法启动 。
1、在primary服务器上 生产keyfile文件秘钥 (注必须是 600权限,否则会报错)
先在 Admin库先创建 超级账号(primary)
replSet:primary>use admin
replSet:primary>db.createUser({user:"wenzhong",pwd:"yearmonth@20140111",roles:["root"]},{w:1,wtimeout:10000});
2、
sheel> openssl rand -base64 666 > /opt/mongo/conf/MongoReplSet_KeyFile
sheel> chown mongod.mongod /opt/mongo/conf/MongoReplSet_KeyFile
sheel> chmod 600 /opt/mongo/conf/MongoReplSet_KeyFile
3、
将 产生的 keyfile 文件 拷贝到 其他成员服务器
4、
修改配置文件
keyFile=/opt/mongo/conf/MongoReplSet_KeyFile
5、
重启mongod服务(primary-secondary)
replSet:primary>use admin
replSet:primary>rs.stepDown(60);
replSet:secondary>db.shutdownServer()
cat /etc/rc.local
sudo runuser -c "/usr/local/mongo/bin/mongod -f /opt/mongo/conf/mongo.conf" mongod
依次重启 secondary成员