splitVector "errmsg" : "not authorized on test to execute command

mongodb开启权限之后 

splitVector 需要的权限。

user: test_da

db: test

拥有管理元权限 都不能执行成功:

> db.system.users.find();

{ "_id" : "admin.dba", "user" : "dba", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "q5TKyUEuYqP9hgTbrCsITQ==", "storedKey" : "6g15leywZRsVMDldLi+uzTypFqs=", "serverKey" : "JWcdgRShUZMcEJk+vh71E11zoXc=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
{ "_id" : "test.test_da", "user" : "test_da", "db" : "test", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "y+IxIWUp50tA/7V6WPsEsw==", "storedKey" : "8UyEZA3HkcqbMOt0Fbrsjs/M090=", "serverKey" : "Zdbm+6bujOMJnDvILZvmEFfuxJ0=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" }, { "role" : "readWriteAnyDatabase", "db" : "admin" }, { "role" : "dbAdminAnyDatabase", "db" : "admin" } ] }

{ "_id" : "admin.test_da", "user" : "test_da", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "hc4oe75lJQynskBcK94s1g==", "storedKey" : "IV0vwdd1Yo7YqraHAHcsd0I6ypY=", "serverKey" : "8bv/5MH5EuEvlvuuMpT8//rzGeg=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" }, { "role" : "readWriteAnyDatabase", "db" : "admin" }, { "role" : "dbAdminAnyDatabase", "db" : "admin" }, { "role" : "__system", "db" : "admin" } ] }


报错信息:

> db.runCommand({splitVector: "test.nxtest_full", keyPattern: {_id: 1}, maxChunkSizeBytes: 32000000}) ;
{
        "ok" : 0,
        "errmsg" : "not authorized on test to execute command { splitVector: \"test.nxtest_full\", keyPattern: { _id: 1.0 }, maxChunkSizeBytes: 32000000.0 }",
        "code" : 13
}


解决办法:

use test
db.updateUser("test_da", {
                   roles : [
                      { role: "readWrite", db: "test" },
                      { role : "clusterManager", db : "admin"  }
                   ]

              })


只需要给 clusterManager 角色就可以了, 而不是管理员角色就拥有所有权限。






### 如何在 Qt 中将一个数组拆分为两个数组 为了实现这一功能,不需要依赖特定于 Qt 的特性;标准 C++ 提供了足够的工具来处理容器操作。下面展示了一个简单的例子,说明如何利用 `std::vector` 进行数组的分割。 ```cpp #include <iostream> #include <vector> // 定义函数用于切分向量 void splitVector(const std::vector<int>& input, int position, std::vector<int>& partOne, std::vector<int>& partTwo) { // 使用迭代器复制元素至目标向量 auto it = input.begin(); // 向第一个部分填充数据直到指定位置 while (position--) { if (it != input.end()) { partOne.push_back(*it++); } } // 剩余元素放入第二个部分 for (; it != input.end(); ++it) { partTwo.push_back(*it); } } ``` 此代码段定义了一个名为 `splitVector` 的辅助函数,该函数接收原始整数类型的 `std::vector` 及其应被划分的位置作为参数,并接受两个额外的引用参数分别存储前后两部分的结果[^1]。 假设有一个包含十个连续自然数的列表并希望从中点将其分开: ```cpp int main() { // 初始化输入序列 std::vector<int> original{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; std::vector<int> firstHalf; std::vector<int> secondHalf; // 执行切割动作 splitVector(original, 5, firstHalf, secondHalf); // 输出结果验证正确性 std::cout << "First half contains:"; for(auto& elem : firstHalf){ std::cout << ' ' << elem; } std::cout << "\nSecond half contains:"; for(auto& elem : secondHalf){ std::cout << ' ' << elem; } } ``` 这段完整的程序展示了如何调用上述定义的功能以及打印出分离后的子集内容。需要注意的是,在实际应用中应当考虑边界情况(比如当给定索引超出范围时),这里仅提供基本逻辑框架以便理解概念。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值