9.Mongod的用户管理
基于角色的访问控制
MongoDB使用基于角色的访问控制(RBAC)来管理对MongDB系统的访问。用户被授予一个或多个角色,这些角色决定了用户对数据库资源和操作的访问。除了角色分配外,用户无法访问系统。
启动访问控制
默认情况下,MongoDB不启动访问控制。我们可以使用--auth或security.authorization设置启动授权。
这里我采用的是在配置文件中进行进行添加配置访问控制
security: authorization: enabled
这里创建一个root用户,然后赋予root角色
> use admin > db.createUser({user:"root",pwd:"123",roles:[{role:"root",db:"admin"}]}) Successfully added user: { "user" : "root", "roles" : [ { "role" : "root", "db" : "admin" } ] }
这里看一下mongdb具有哪些角色:
Read: 允许用户读取指定数据库,(例如可以进行find,dbstats等等) readWrite:允许用户读写指定数据库 (相对于读来说,它可以进行dropCollection/createIndex/dropIndex/insert/remove/update等等) dbAdmin: 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile userAdmin:允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户 clusterAdmin: 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 readAnyDatabase: 只在admin数据库中可用,赋予用户所有数据库的读权限 readWriteAnyDatabase: 只在admin数据库中可用,赋予用户所有数据库的读写权限 userAdminAnyDatabase: 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 dbAdminAnyDatabase: 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 root: 只在admin数据库中可用。超级账号,超级权限
然后上面的每一种角色都有不同的访问权限,具体的访问权限请见:
https://www.mongodb.com/docs/manual/reference/built-in-roles/#mongodb-authrole-userAdminAnyDatabase
远程连接mongodb数据库命令:
mongo --username root --password 123456 --host 10.10.10.10 --port 27017 --authenticationDatabase admin
或者用进去之后 use admin --- > db.auth("root","密码") 进行验证
补充:
1.创建普通用户时需要use到具体库然后再用db.createUser创建,在monog shell连接时,要加上验证库才能登录(参数:--authenticationDatabase 书库名)
2.对于管理员用户,必须在admin下创建
- 登录时,必须明确指定验证库才能登录,这里验证库指定是用(--authenticationDataBase admin)
- 通常管理员验证的库是admin,普通用户验证的库一般是指所管理的库为验证库
- 从3.6版本开始,不添加bind ip参数,默认是不让远程登录,只能本地管理登录
创建用户语法:
use admin db.createUser { user: "<name>", pwd: "<cleartext password>", roles: [ {role: "<role>", db: "<database>" } | "<role>", ... ] } 基本语法说明: user:用户名 pwd:密码 roles: role:角色名 db:作用对象 role:root,readWrite,read,...,dbAdmin 验证数据库: mongo --host IP --port 端口号 -u用户名 -p密码 --authenticationDatabase 数据库名 ##如果是管理员用户,数据库名写admin,如果是普通用户,数据库名写要连接的数据库即可
创建一个超级用户,这时需要给它赋予角色root即可,如果创建一个管理用户,我们可以给它赋予角色dbAdmin
如果就想要创建一个普通用户,那么这里role:这里可以给read或者readWrite,db这里可以写要验证的数据库而非admin数据库
查看用户详细信息
这里可以去admin数据库下的集合system.users中查看
>use admin
>db.system.users.find().pretty() { "_id" : "admin.root", "userId" : UUID("b6ce9dbf-ed6e-49b1-b3ed-cfadb49362d5"), "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "pPVsTqmspzc7tEp2le75og==", "storedKey" : "UweBlSFrGt86qxyJ5KRhZxoexyc=", "serverKey" : "tI96U1rZuFrp51hAWQrZU1Wrkho=" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "0lxsZP3ccOHs0Ht8+qru0UlZOy8Gr1ykx1EXqA==", "storedKey" : "gsQe2pigPJz4ieFJoFoLF57DVZeaujtJE6FxdricY58=", "serverKey" : "D9q2C6TLJWbd4uvpF3ZbntYxZB/sFYY6zJ1CFUC+VGE=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] } { "_id" : "liulin.liulin", "userId" : UUID("fd4928d5-c155-43ce-b739-18c5834367cb"), "user" : "liulin", "db" : "liulin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "MxpoRnQTiUCBe+fw6aKGlA==", "storedKey" : "uq7Ql0uluuz1nhw0jHeNPZJvZCk=", "serverKey" : "dgQdOAetuUWXRO4Uq1RYACQKc3o=" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "Y7UvHiqhyf/vAvndtJ6NsmM1hsaulEs1KLcYfg==", "storedKey" : "9TDQAocXDBDvxdJVVMpONH8t/TFhvNjwqhniY4kxhvA=", "serverKey" : "h+nCTpD4RcjmV2GEojBUMJknVbVHH5+KsOsITs93C+k=" } }, "roles" : [ { "role" : "readWrite", "db" : "liulin" } ] } >
修改用户密码
修改用户密码或者权限,这里可以使用db.updateUser函数进行修改,具体格式如下:
use test //先写到该用户对用的数据库下 db.updateUser( "user123", { pwd: passwordPrompt(), // or cleartext password customData: { title: "Senior Manager" } //这里其实可以不用加的 } )
具体修改用户角色可以查看官方文档:
https://www.mongodb.com/docs/manual/reference/method/db.updateUser/#mongodb-method-db.updateUser
如何删除用户
一般来讲,删除数据库用户一般有两种方法,分别是:
1. db.dropUser() //删除执行用户
2. db.dropAllUser() //删除所有的用户
这里误删除了管理用户,可以一般可以利用注释掉mongodb的配置参数中的auth,然后再重新创建一个新的管理用户,最后再重启mongodb即可
这里假如我要删除其中一个用户,这里需要先进入属于该用户属于的数据库下,然后再执行db.dropUser("用户名")进行删除。。。
常用的命令:
用户管理主要完成数据库中的添加.删除.密码修改以及角色的修改等操作,但是前提是执行这些操作的登录用户需要具备相应的角色,如:userAdminAnyDatabase(针对所有数据库)、useradmin(针对特定数据库)的角色。
1,查看数据库中的用户 user crm --> 切换到某个数据库下 db.getUsers() --> 查看该数据库下的所有用户 db.getUsers("用户名") --> 查看该数据库下的某个具体的用户 2.查看数据库中的角色 user crm db.getRoles() db.dropRole("角色名"):删除某个指定的角色 db.dropAllRoes():一次性删除crm数据库中的所有角色 3.创建自定义角色 db.createRole({createRole:"onlyReadForeCustomers",privileges:[{resouce:{db:"crm",collection:"customers"},actions:["find"]}],roles:[]})
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?