繁体   English   中英

MongoDB中的只写集合

[英]Write-only collections in MongoDB

我目前正在使用MongoDB来记录应用程序日志,虽然我对性能以及能够将任意结构化数据转储到日志记录中非常满意,但是我对一旦存储的日志记录的可变性感到困扰。

在传统的数据库中,我将为我的日志表构建授权,以便应用程序用户具有INSERT和SELECT权限,但不具有UPDATE或DELETE。 同样,在CouchDB中,我可以编写一个更新验证程序函数,拒绝所有修改现有文档的尝试。

但是,我一直无法在MongoDB wiki的安全主题中记录的三个访问级别(无访问权限,只读,“上帝模式”)之外找到限制MongoDB数据库或集合操作的方法。

是否有其他人将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')"

这将创建一个用户名为user1且密码为pass1的用户,并且该用户具有对数据库的yourdb集合col1的 只写访问权限。

这样做的副作用是创建角色rolename 如果已有应该有一个只写访问相同的收集用户,授予角色角色名 ,以现有的用户。

随意使用和修改上面提供的代码:)。

在MongoDB 1.3.2+中,您可以在用户中添加一些限制:

db.addUser("guest", "passwordForGuest", true)

但它现在只存在并不是更好。 也许你可以添加一些功能请求

请参阅MongoDB文档中的信息: http//www.mongodb.org/display/DOCS/Security+and+Authentication

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM