MongoDB学习之--安全和认证
2013-09-12 17:26
246 查看
本文主要介绍两部分内容,Mongodb的安全检查配置以及安全认证操作:
虽然确保系统安全是系统管理员的重要工作,但是作为程序员了解其机制也是大有好处的,毕竟不是每个公司都很规范,都有严格的分工制度,说不定作为程序员的我们常常身兼数职;
MongoDB支持对单个连接的认证,即便这个认证的权限模式很丑陋。
默认情况下,MongoDB设置为无权限访问限制,但是这种模式除了在开发阶段方便外,产品上线后风险就很大了;如果开启了安全性检查,那么必须认证用户才可访。这里也就我了解和学习到的东西介绍下,希望大家多多补充:
如果你的Mongodb服务没有安装到服务进程中,在设置了管理员账户之后,你就可以重启连接,启动时加上 --auth命令行选项,便会进入安全检查模式;
这里说简要说下对于Mongodb安装到服务进程中的处理方式:
所以可按照下面步骤修改注册表
在注册表编辑页面按照箭头所示层级关系找到相应节点,最后修改Mongodb节点写ImagePath,添加即可,通过shell重启服务即可。
再次进入
这时便是要求你用户登录
接着通过我们创建的管理员用户登录
我们再次为test库添加两个用户(在admin登录的前提下,因为已经开启了安全认证):
(超级用户可以对任何库进行操作,而对于test库建立的用户只能操作单库:他的用户存储在system.users中,也就是说对于其他还是没有任何权限)
但是我在实践的过程中发现,如果你先用超级账户登录那么你可以执行show dbs命令的,但是如果此时你换成只读账户登录,同样可以执行show dbs命令,当然这个有一个前提:不断开连接,也就是超级用户和只读用户用的是同一个连接,我确定原因是什么,因为我没有测试,大致应该是因为Mongodb用户认证和连接是绑定的,如果节点切换了,那么就必须重新连接---ps(不保证这个理由的正确性);
还有一点就是默认情况下,mongodb可被任何Ip访问,为了提高其访问层次可以通过 bind_ip为其绑定可访问的IP,具体可通过 mongod help()查询下。
直接上代码说了,配置上连接字符串即可访问,加上用户名密码即可,否则会抛出无权限访问的异常。。。今天下到这里吧,写的有点乱,写博客少,功底太弱,表达能力不强,苦逼啊,好多想表达的表达不出来,等写过去了,才发现好像又缺了点东西,shit,再接再励啊,多写多看多学!以后写东西得系统下
虽然确保系统安全是系统管理员的重要工作,但是作为程序员了解其机制也是大有好处的,毕竟不是每个公司都很规范,都有严格的分工制度,说不定作为程序员的我们常常身兼数职;
MongoDB支持对单个连接的认证,即便这个认证的权限模式很丑陋。
默认情况下,MongoDB设置为无权限访问限制,但是这种模式除了在开发阶段方便外,产品上线后风险就很大了;如果开启了安全性检查,那么必须认证用户才可访。这里也就我了解和学习到的东西介绍下,希望大家多多补充:
Mongodb的安全检查配置
在开启安全检查之前一定要先设置超级管理员账户(在认证的上下文中,admin库中的user被视为超级用户)use admin db.addUser("admin","admin")//设置管理员账户 用户名admin,密码admin
如果你的Mongodb服务没有安装到服务进程中,在设置了管理员账户之后,你就可以重启连接,启动时加上 --auth命令行选项,便会进入安全检查模式;
这里说简要说下对于Mongodb安装到服务进程中的处理方式:
所以可按照下面步骤修改注册表
在注册表编辑页面按照箭头所示层级关系找到相应节点,最后修改Mongodb节点写ImagePath,添加即可,通过shell重启服务即可。
再次进入
这时便是要求你用户登录
接着通过我们创建的管理员用户登录
我们再次为test库添加两个用户(在admin登录的前提下,因为已经开启了安全认证):
use test db.addUser("test","test");//添加test用户,非只读权限 db.addUser("test3","test3",true);//添加test3用户,只读权限,第三个参数为true表示只读
(超级用户可以对任何库进行操作,而对于test库建立的用户只能操作单库:他的用户存储在system.users中,也就是说对于其他还是没有任何权限)
但是我在实践的过程中发现,如果你先用超级账户登录那么你可以执行show dbs命令的,但是如果此时你换成只读账户登录,同样可以执行show dbs命令,当然这个有一个前提:不断开连接,也就是超级用户和只读用户用的是同一个连接,我确定原因是什么,因为我没有测试,大致应该是因为Mongodb用户认证和连接是绑定的,如果节点切换了,那么就必须重新连接---ps(不保证这个理由的正确性);
还有一点就是默认情况下,mongodb可被任何Ip访问,为了提高其访问层次可以通过 bind_ip为其绑定可访问的IP,具体可通过 mongod help()查询下。
开启检查后C#驱动操作
//连接字符串格式为mongodb://[用户名:密码@]localhost:端口号/[数据库名] //[]内为可选项 var connectionString = "mongodb://test:test@localhost:27017"; var client = new MongoClient(connectionString); var server = client.GetServer(); var database = server.GetDatabase("test"); var collection = database.GetCollection<Student>("test"); //server.Connect();//可有可无 var entity = new Student { Address = new Address { City = "广州", PostCode = "000000" } }; collection.Insert(entity);
直接上代码说了,配置上连接字符串即可访问,加上用户名密码即可,否则会抛出无权限访问的异常。。。今天下到这里吧,写的有点乱,写博客少,功底太弱,表达能力不强,苦逼啊,好多想表达的表达不出来,等写过去了,才发现好像又缺了点东西,shit,再接再励啊,多写多看多学!以后写东西得系统下
相关文章推荐
- MongoDB学习之--安全和认证
- mongodb学习之:安全和认证
- MongoDB学习总结(五) —— 安全认证
- 【安全牛学习笔记】思路、身份认证方法、密码破解方法、字典
- 10、Mongodb的用户认证和数据库的安全
- Java的安全学习(包括加密,数字签名,证书和认证)
- MongoDB安全及身份认证
- MongoDB安全的3A -- 认证(Authentication)、授权(Authorization)和审计(Audit
- Java的安全学习(包括加密,数字签名,证书和认证)
- MongoDB:9-MongoDB的安全和认证
- MongoDB开启安全认证
- mongoDB的复制集5----复制集安全(认证,用户,权限)
- java安全框架-Shiro学习笔记(三)-权限认证
- 【安全牛学习笔记】w3af-身份认证
- Java的安全学习(包括加密,数字签名,证书和认证)
- 关于用jsp实现http认证安全登陆的学习笔记。(正在原创ing)
- MongoDB学习——安全登录
- Mongodb安全认证及Java调用
- Mongodb安全认证及java调用
- mongodb用户安全认证详解