只写的集在MongoDB
题
目前,我正在使用解如记录日志应用程序,虽然我很高兴与这两个的性能和能够自卸任意性的结构化数据纳入日志记录,我陷入困境的变化无常的登记录一旦被存储。
在一个传统的数据库,我会结构的赠款为我的记录表格,使申请用户插入以及选择权限,但不更新或删除。同样,在CouchDB,我可以写的更新验证程序的功能,拒绝所有试图修改现有的文件。
然而,我已经无法找到一种方法来限制操作上的一个MongoDB数据库或收集超出三个访问水平(没有访问、只读,"上帝模式")记录在案的 安全的话题 在MongoDB wiki。
有其他任何人的部署MongoDB作为文档存储在一个设置在那里的永久性(或至少变化跟踪)为文件是一个要求吗?什么样的技巧或技术你有没有使用,以确保不佳的书面或恶意程序的代码不能修改或销毁现有的日志记录?我需要包我的MongoDB记录在业务层,强制执行的只写的政策,或者我可以使用的一些组合的结构,查询侵和复制以确保一致,审计能够记录保持?
解决方案
我会说,最好的选择将是包裹在强制执行特定合同的服务层的访问MongoDB的。因为有这么多不同的情况下,解决所有的人都正确是棘手得到正确的,我们没有做很多细粒度的访问控制方式。因此,在大多数情况下它是由应用层来实现的一种控制。
其他提示
添加一个 只写 (在收集水平)用户MongoDB做到以下几点。
说你想拥有一个用户, 只能写 (插入 只有)到 某些集合 在一定的数据库。
创建一个文件 createuser.js
与以下内容:
function createCollectionWriter(database, username, password, rolename, collection)
{
db.getSiblingDB(database).createUser({
user : username,
pwd : password,
roles : [ ]
});
db.getSiblingDB(database).createRole({
role : rolename,
privileges : [
{
resource : { db : database, "collection" : collection },
actions : [ "insert" ]
}
],
roles : []
});
db.getSiblingDB(database).grantRolesToUser(username, [ rolename ] );
}
并执行这种命令行
$ mongo --eval="load('createuser.js'); createCollectionWriter('yourdb', 'user1', 'pass1', 'rolename', 'col1')"
这将创建一个用户与用户名 1 与密码 pass1 和这个用户都有 只写 访问的数据库 yourdb 集合 1列.
一个副作用是,作用 角色名称 被创建。如果你有现有用户应有一个只写的访问同一个集合,准予的作用 角色名称 到现有的用户。
随意使用和修改的代码,上面提供的:).
在MongoDB的1.3.2+可以在用户添加一些限制:
db.addUser("guest", "passwordForGuest", true)
但它只是现在已有不是更好。也许你可以添加一些功能要求
看到的MongoDB文档中的信息: http://www.mongodb.org /显示/ DOCS /安全+和+认证