美文网首页
MongoDB限制访问单表

MongoDB限制访问单表

作者: DramaKing | 来源:发表于2019-05-29 15:22 被阅读0次

    如果对你有帮助, 请点击💖喜欢💖鼓励一下我这个臭弟弟

    需求由来

    和其他公司对接, 需要访问特定的数据, 提供视图对方不能访问[不知道是驱动的事儿还是框架的事儿, 对方未能提供足够信息进行排查]. 这种情况下, 采取限制对方公司角色读取单表数据的措施来曲线救国.

    MongoDB内置数据库用户角色

    read, readWrite

    实现控制collection-level的访问控制, 就是在内置角色的基础上增加对集合操作的权限控制, 创造一个新的角色. 然后新增用户分配此角色.

    创建新角色

    use admin;
    db.auth("admin", "xxx");
    db.createRole(
        {
            role: "<角色名>",
            privileges: [{
                resource: {
                    db: "<数据库名>",
                    collection: "<集合名>"
                },
                actions: ["find"]
            }],
            roles: [{
                role: "read",
                db: "admin"
            }]
        }
    );
    

    上面的命令执行完之后, 在admin数据库上创建了一个新角色, 这个角色继承自read角色, 对于数据库的指定集合只能执行find操作. roles是必选项.
    实际的例子如下:

    db.createRole(
        {
            role: "testRole",
            privileges: [{
                resource: {
                    db: "testDB",
                    collection: "testCollection"
                },
                actions: ["find"]
            }],
            roles: [{
                role: "read",
                db: "admin"
            }]
        }
    );
    

    效果就是创建了一个testRole角色, 如果创建用户分配此角色的话, 只能查询testDB.testCollection的数据, 不能执行其他操作.

    创建用户, 分配testRole角色

    db.createUser({user:'testUser',pwd:'123',roles:[{role:'testRole',db:'admin'}]})
    

    实际效果

    use admin;
    db.auth("testUser", "123");
    use testDB;
    db.testCollection.find(); // 结果正常显示
    db.device.find(); // 访问权限之外的集合提示未授权
    Error: error: {
        "ok" : 0,
        "errmsg" : "not authorized on birdnest to execute command { find: \"device\", filter: {}, lsid: { id: UUID(\"4a5d2a88-6d99-4839-a59c-955d77a5a564\") }, $db: \"testDB\" }",
        "code" : 13,
        "codeName" : "Unauthorized"
    }                       
    

    如果对你有帮助, 请点击💖喜欢💖鼓励一下我这个臭弟弟

    相关文章

      网友评论

          本文标题:MongoDB限制访问单表

          本文链接:https://www.haomeiwen.com/subject/gisytctx.html