草庐IT

Mongodb创建用户角色

c+猿辅导 2023-06-15 原文

文章目录


一、Mongodb数据库用户角色?

MongoDB采用基于角色的访问控制(RBAC)来确定用户的访问。 授予用户一个或多个角色,确定用户对MongoDB资源的访问权限和用户可以执行哪些操作。 用户应该只有最小权限集才能确保最小权限的系统。MongoDB系统的每个应用程序和用户都应该映射到不同的用户。 这种访问隔离便于访问撤销和持续的用户维护。
划重点
1、mongodb的用户名和密码是基于特定数据库的,而不是基于整个系统的。所有所有数据库db都需要设置密码
2、mongodb是没有默认管理员账号,所以要先添加管理员账号,在开启权限认证。
3、第一个用户必须具有创建其他用户的权限。 创建第一个用户后,必须使用该用户进行身份验证以添加后续用户。

二、创建用户,其权限有哪些

1.创建用户语法格式

use admin
db.createUser(
	{
		user:'user',
		pwd :'123',
		customData:{"desc":"This user is for administrators"},
		roles:[
				{
					role:'userAdminAnyDatabase',db:'admin'
				}
		]
	}
)

2.字段解析

user :用户名 --必须项
pwd :密码 --必须项
customData :用于描述账户信息 --非必须项
roles:指定用户的角色,可以用一个空数组给新用户设定空角色;在roles字段,可以指定内置角色和用户定义的角色。–必须项(可以为空集合)

role里的角色可以选:
1、Built-In Roles(内置角色):
a)数据库用户角色:read、readWrite;
b)数据库管理角色:dbAdmin、dbOwner、userAdmin;
c)集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
d)备份恢复角色:backup、restore;
e)所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
f)超级用户角色:root
–这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner、userAdmin、userAdminAnyDatabase)
h)内部角色:__system

2、具体角色:
a)Read :允许用户读取指定数据库
b)readWrite:允许用户读写指定数据库
c)backup,retore :在进行备份、恢复时可以单独指定的角色,在db.createUser()方法中roles里面的db必须写成是admin库,要不然会报错
d)dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
e)userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
f)clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
m)readAnyDatabase :只在admin数据库中可用,赋予用户所有数据库的读权限
n)readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
o)userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限,
q)dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
k)root:只在admin数据库中可用。超级账号,超级权限

三、创建用户实列

创建超级管理员用户

	use admin
	db.createUser({user:'admin',pwd:'admin123', roles:[{role:'root', db:'admin'}]}) 

创建用户管理员账户(能查询其他库集合,但不能查询集合内容

	use admin
	db.createUser({user:'admin',pwd:'admin123', roles:[{role:'userAdminAnyDatabase', db:'admin'}]}) 

创建访问任意库读写的账户

	use admin
	db.createUser({user:'admin',pwd:'admin123', roles:[{role:'readWriteAnyDatabase', db:'admin'}]}) 

创建用于备份时的用户,如若是恢复权限,则将backup换为restore即可

	use admin
	db.createUser({user:'admin',pwd:'admin123', roles:[{role:'backup',db:'admin'}]}) 

创建只对test库有读写权限的用户

	use test
	db.createUser({user:'admin',pwd:'admin123', roles:[{role:'readWrite',db:'test'}]}) 

更新用户角色,修改用户权限,不会覆盖原权限信息,只新增权限:

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

更新用户密码

	use test
	db.changeUserPassword("admin","admin123456")

删除用户

	use test
	db.dropUser({'admin'}) 

查看所有用户

	use test
	show users

创建完管理员账号后,修改mongo配置,使能验证用户信息

sudo vi /etc/mongod.conf
找到#security: 取消注释,修改为:
security:
     authorization: enabled #注意缩进,缩进参照配置文件其他配置。缩进错误可能第6步重启不成功。
   
systemctl restart mongod    #重启mongod

创建用户基本流程与示例

  1. 创建管理员用户
  2. 修改mongo配置,使其生效
  3. 创建test数据库用户

创建管理员用户,并创建test数据库用户,验证test数据库用户:

	创建管理员权限
	mongo 
	use admin
	db.createUser({ user: "root", pwd: "root", roles: [{ role: "root", db: "admin" }] })            #创建管理员用户
	db.auth("root", "root") 如果返回1,则表示成功。
	exit
	修改mongo配置
	sudo vi /etc/mongod.conf 修改为#security:为security: authorization: enabled 
	systemctl  restart mongo
	
	创建数据库用户,拥有有读写权限
	mongo -u root -p root
	use test
	db.createUser({user:'admin',pwd:'admin123', roles:[{role:'readWrite',db:'test'}]}) 
	exit
	
	验证数据库
	mongo
	use test
	db.auth("admin","admin123")
	db.test.insert({"m":"2"})
	db.test.find({})

总结

(1)非admin数据库的用户不能使用数据库命令,比如show dbs等。
(2)admin数据库中的用户被视为超级用户(即管理员)。在认证之后,管理员可以读写所有数据库,执行特定的管理命令,
(3)在开启安全检查之前,一定要至少有个管理员账号。
(4)数据库的用户账号以文档的形式存储在system.users集合里面。可以在system.users集合中删掉用户账号文档,就可以删除用户。
(5)mongodb是没有默认管理员账号,所以要先添加管理员账号,在开启权限认证。

链接: https://www.cnblogs.com/lyalong/p/14108852.html

有关Mongodb创建用户角色的更多相关文章

  1. ruby - 如何在 Ruby 中顺序创建 PI - 2

    出于纯粹的兴趣,我很好奇如何按顺序创建PI,而不是在过程结果之后生成数字,而是让数字在过程本身生成时显示。如果是这种情况,那么数字可以自行产生,我可以对以前看到的数字实现垃圾收集,从而创建一个无限系列。结果只是在Pi系列之后每秒生成一个数字。这是我通过互联网筛选的结果:这是流行的计算机友好算法,类机器算法:defarccot(x,unity)xpow=unity/xn=1sign=1sum=0loopdoterm=xpow/nbreakifterm==0sum+=sign*(xpow/n)xpow/=x*xn+=2sign=-signendsumenddefcalc_pi(digits

  2. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  3. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  4. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  5. ruby - 如何使用 RSpec::Core::RakeTask 创建 RSpec Rake 任务? - 2

    如何使用RSpec::Core::RakeTask初始化RSpecRake任务?require'rspec/core/rake_task'RSpec::Core::RakeTask.newdo|t|#whatdoIputinhere?endInitialize函数记录在http://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask#initialize-instance_method没有很好的记录;它只是说:-(RakeTask)initialize(*args,&task_block)AnewinstanceofRake

  6. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  7. ruby - 为什么 SecureRandom.uuid 创建一个唯一的字符串? - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?

  8. ruby - 有人可以帮助解释类创建的 post_initialize 回调吗 (Sandi Metz) - 2

    我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法

  9. ruby - 使用多个数组创建计数 - 2

    我正在尝试按0-9和a-z的顺序创建数字和字母列表。我有一组值value_array=['0','1','2','3','4','5','6','7','8','9','a','b','光盘','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','','u','v','w','x','y','z']和一个组合列表的数组,按顺序,这些数字可以产生x个字符,比方说三个list_array=[]和一个当前字母和数字组合的数组(在将它插入列表数组之前我会把它变成一个字符串,]current_combo['0','0','0']

  10. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

随机推荐