mongodb添加用户,权限验证

注:研究成果基于Windows平台

 

MongoDB在本机安装部署好后

 

1. 输入命令:show dbs,你会发现它内置有两个数据库,一个名为admin,一个名为local。local好像没啥用,如果哪位在使用过程中发现了这个local表的用途,希望能够留言提醒,那我们就专心来说说admin表

 

2. 输入命令:use admin,你会发现该DB下包含了一个system.user表,呵呵,没错,这个表就等同于MsSql中的用户表,用来存放超级管理员的,那我们就往它里面添加一个超级管理员试试看

 

3. 输入命令:db.addUser('sa','sa'),这里我添加一个超级管理员用户,username为sa,password也为sa,即然我们添加了超级管理员,那咱们就来测试下,看看咱们再次连接MongoDB需不需要提示输入用户名、密码,我们先退出来(ctrl+c)

 

4. 输入命令:use admin

 

5. 输入命令:show collections,查看该库下所有的表,你会发现,MongoDB并没有提示你输入用户名、密码,那就奇怪了,这是怎么回事呢?在文章最开始提到了,

 

MongoDB默认设置为无权限访问限制,即然这样,那我们就先把它设置成为需要权限访问限制,咱们再看看效果,怎么设置呢?

 

6. 在注册表中,找到MongoDB的节点,在它的ImgPath中(HKEY_LOCAL_MACHINE-SYSTEM-CurrentControlSet-Services-MongoDB-ImagePath),我们修改一下,加入 -auth,如下所示:

 

"D:\Program Files\mongodb\bin\mongod" -dbpath  e:\work\data\mongodb\db  -logpath  e:\work\data\mongodb\log -auth -service

 

7. 输入命令:use admin

 

8. 输入命令:show collections,呵呵,我们发现无法查看该库下的表了,提示:"$err" : "unauthorized db:admin lock type:-1 client:127.0.0.1",很明显,提示没有权限,看来关键就在于这里,我们在启动MongoDB时,需要加上-auth参数,这样我们设置的权限才能生效,好,接下来我们使用刚刚之前设置的用户名、密码来访问

 

9. 输入命令:db.auth('sa','sa'),输出一个结果值为1,说明这个用户匹配上了,如果用户名、密码不对,会输入0

 

10. 输入命令:show collections,呵呵,结果出来了,到这里,权限设置还只讲到一多半,接着往下讲,我们先退出来(ctrl+c)

 

11. 输入命令:mongo TestDB,我们尝试连接一个新的库(无论这个库是否存在,如果不存在,往该库中添加数据,会默认创建该库),然后,我们想看看该库中的表

 

12. 输入命令:show collections,好家伙,没权限,我们输入上面创建的用户名、密码

 

13. 输入命令:db.auth('sa','sa'),输入结果0,用户不存在,这下有人可能就不明白了,刚刚前面才创建,怎么会不存在呢?原因在于:当我们单独访问MongoDB的数据库时,需要权限访问的情况下,用户名密码并非超级管理员,而是该库的system.user表中的用户,注意,我这里说的是单独访问的情况,什么是不单独访问的情况呢?接下来再讲,现在咋办,没权限,那我们就尝试给库的system.user表中添加用户

 

14. 输入命令:db.addUser('test','111111'),哇靠,仍然提示没有权限,这可咋办,新的数据库使用超级管理员也无法访问,创建用户也没有权限,呵呵,别急,即然设定了超级管理员用户,那它就一定有权限访问所有的库

 

15. 输入命令:use admin

 

16. 输入命令:db.auth('sa','sa')

 

17. 输入命令:use TestDB

 

18. 输入命令:show collections,哈哈,一路畅通无阻,我们发现可以利用超级管理员用户访问其它库了,呵呵,这个就是不单独访问的情况,不难发现,我们是先进入admin库,再转到其它库来的,admin相当于是一个最高级别官员所在区域,如果你是个地产商,想在地方弄个大工程做做,你想不经过那些高级官员就做,这是行不通的,你需要先去到他们那里,送点礼,再顺着下到地方,工程你就可以拿到手了,此言论仅为个人观点,不代表博客园;即然工程拿到手了,就要开始建了,那我们不至于每加块砖、添个瓦都得去和那帮高级官员打招呼吧,所以我们得让这个工程合法化,咱们得把相关的手续和证件弄齐全,不至于是违建

 

19. 输入命令:db.addUser('test','111111'),我们给TestDB库添加一个用户,以后每次访问该库,我都使用刚刚创建的这个用户,我们先退出(ctrl+c)

 

20. 输入命令:mongo TestDB

 

21. 输入命令:show collections,提示没有权限

 

22. 输入命令:db.auth('test','111111'),输出结果1,用户存在,验证成功

 

23. 输入命令:show collections,没再提示我没有权限,恭喜您,成功了

 

好累啊!一口气写完,呵呵

 

注:当需要使用权限才能访问MongoDB时,如果需要查看MongoDB中所有的库,我们只能通过超级管理员权限,输入命令show dbs来查看了。

<think>好的,用户想了解MongoDB 6.0的权限验证机制和相关问题的解决方法。首先,我需要回忆一下MongoDB权限系统。MongoDB默认是不开启权限验证的,但为了安全,生产环境必须配置。用户提到安装教程里可能涉及权限不足的问题,可能需要修改目录权限或者使用sudo命令。 接下来,配置权限验证的关键步骤应该是修改mongod.conf文件,启用authorization参数。然后,创建管理员用户,分配适当的角色,比如userAdminAnyDatabase。这部分需要详细说明如何进入mongo shell,使用db.createUser命令,并注意切换到admin数据库。 用户管理部分,可能需要分不同场景,比如创建只读用户或者数据库特定用户,每个步骤都要明确。此外,常见问题比如如何重启服务,权限配置后连接需要认证,忘记密码怎么办,这些都需要涵盖。 还要检查引用内容,确保步骤正确。比如引用3提到了移动安装目录和配置profile,可能涉及环境变量设置,但用户主要关心权限验证,这部分可能不需要展开。引用2提到了安装时的权限问题,可能需要提醒用户在安装后正确设置数据目录的权限,避免启动失败。 最后,生成相关问题时要围绕权限配置、用户角色、故障排除等方面,确保覆盖用户可能遇到的后续疑问。整个回答需要结构清晰,步骤明确,使用代码块和命令示例,方便用户操作。同时注意使用中文,避免专业术语错误,保持口语化但准确。</think>### MongoDB 6.0 权限验证配置及用户管理 #### 1. 启用权限验证机制 MongoDB 默认不开启权限验证。需通过以下步骤配置: 1. **修改配置文件**:编辑 MongoDB 配置文件 `/etc/mongod.conf`,添加以下内容: ```yaml security: authorization: enabled ``` 2. **重启服务**:应用配置后重启 MongoDB: ```bash sudo systemctl restart mongod ``` 可通过 `sudo systemctl status mongod` 验证服务状态[^1]。 #### 2. 创建管理员用户 1. **连接 MongoDB**: ```bash mongo admin ``` 2. **创建管理员**(需在 `admin` 库执行): ```javascript db.createUser({ user: "admin", pwd: "your_password", roles: [{ role: "userAdminAnyDatabase", db: "admin" }] }) ``` 此处 `userAdminAnyDatabase` 角色允许管理所有数据库的用户权限[^2]。 #### 3. 用户管理场景 - **创建只读用户**(针对特定数据库): ```javascript use test_db db.createUser({ user: "reader", pwd: "read123", roles: [{ role: "read", db: "test_db" }] }) ``` - **创建读写用户**: ```javascript db.createUser({ user: "writer", pwd: "write123", roles: [{ role: "readWrite", db: "test_db" }] }) ``` #### 4. 连接时身份验证 启用权限后,连接需指定认证信息: ```bash mongo -u admin -p your_password --authenticationDatabase admin ``` #### 5. 常见问题解决 - **权限不足错误**:检查数据目录权限,确保 MongoDB 用户有写入权限: ```bash sudo chown -R mongodb:mongodb /var/lib/mongo ``` 引用安装教程中提到的权限问题解决方案[^3]。 - **忘记密码**:临时关闭权限验证,重启服务后重置密码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值