CN111414423A - 对MongoDB数据库的操作方法、装置和服务器 - Google Patents
对MongoDB数据库的操作方法、装置和服务器 Download PDFInfo
- Publication number
- CN111414423A CN111414423A CN202010205149.9A CN202010205149A CN111414423A CN 111414423 A CN111414423 A CN 111414423A CN 202010205149 A CN202010205149 A CN 202010205149A CN 111414423 A CN111414423 A CN 111414423A
- Authority
- CN
- China
- Prior art keywords
- instruction
- user
- operation instruction
- specified
- designated
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/30—Authentication, i.e. establishing the identity or authorisation of security principals
- G06F21/31—User authentication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- General Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Health & Medical Sciences (AREA)
- Computing Systems (AREA)
- Storage Device Security (AREA)
Abstract
本发明提供了一种对MongoDB数据库的操作方法、装置和服务器,该方法应用于运行数据库实例的服务器,当数据库实例运行在指定模式时,如果接收到第一操作指令,判断发送该第一操作指令的当前用户是否是预设的指定用户;其中,在该指定模式中,除该指定用户以外的用户,被禁用预设的指定指令;如果该当前用户不是该指定用户,判断该第一操作指令是否属于该指定指令;如果该第一操作指令属于该指定指令,拒绝执行该第一操作指令。该方法中,数据库实例设置了拥有最大权限的指定用户,可以对容易导致用户对数据库实例进行误操作的操作指令的权限进行限定,从而实现管理不同角色的用户对数据库实例的操作权限,保证数据库实例的安全运行。
Description
技术领域
本发明涉及数据库技术领域,尤其是涉及一种对MongoDB数据库的操作方法、装置和服务器。
背景技术
云数据库即在云上搭建的数据库,租用云数据库的单位或个人称为租户,租户通常以数据库实例为单位租用云数据库。云数据库可以通过MongoDB数据库实现。MongoDB数据库是一个基于分布式文件存储的数据库,由C++语言编写。MongoDB数据库是一种介于关系数据库和非关系数据库之间的数据库。在对MongoDB数据库的操作中,为了便于管理和使用数据库实例,租户需要在租用的数据库实例中创建各种角色的用户,如root用户,read用户等;不同角色的用户具有不同的操作数据库实例的操作权限。但是,一些操作权限易导致用户对数据库实例进行误操作,并产生较为严重的后果,进而不利于数据库实例的运行。
发明内容
本发明的目的在于提供一种对MongoDB数据库的操作方法、装置和服务器,以管理不同角色的用户对数据库实例的操作权限,保证数据库实例的安全运行。
本发明提供的一种对MongoDB数据库的操作方法,所述方法应用于运行数据库实例的服务器,所述方法包括:当数据库实例运行在指定模式时,如果接收到第一操作指令,判断发送所述第一操作指令的当前用户是否是预设的指定用户;其中,在所述指定模式中,除所述指定用户以外的用户,被禁用预设的指定指令;如果所述当前用户不是所述指定用户,判断所述第一操作指令是否属于所述指定指令;如果所述第一操作指令属于所述指定指令,拒绝执行所述第一操作指令。
进一步的,所述指定指令预先保存在指令列表中;所述指令列表中包括所述数据库实例对应的多个指令,以及每个所述指令的指令状态;其中,所述指令列表中,所述指定指令的指令状态为禁用,除所述指定指令以外的指令的指令状态为解禁用。
进一步的,判断所述第一操作指令是否属于所述指定指令的步骤,包括:查询所述指令列表中是否保存有所述第一操作指令;如果所述指令列表中保存有所述第一操作指令,查询所述指令列表中所述第一操作指令的指令状态;如果所述第一操作指令的指令状态为禁用,确定所述第一操作指令属于所述指定指令。
进一步的,所述方法还包括:接收来自所述指定用户的第二操作指令;其中,所述第二操作指令用于指示:更新所述指令列表中一个或多个指令的指令状态;执行所述第二操作指令,以更新所述指令列表;保存更新后的所述指令列表。
进一步的,判断所述第一操作指令是否属于所述指定指令的步骤之前,所述方法还包括:获取所述当前用户所属的角色,以及所述角色的可操作指令;判断所述第一操作指令是否属于所述当前用户所属的角色的可操作指令;如果属于所述可操作指令,执行判断所述第一操作指令是否属于所述指定指令的步骤;如果不属于所述可操作指令,拒绝执行所述第一操作指令。
进一步的,所述方法还包括:接收来自所述指定用户的第三操作指令;其中,所述第三操作指令用于查询所述数据库实例的运行模式;向所述指定用户返回所述数据库实例的运行模式。
进一步的,所述方法还包括:
接收来自所述指定用户的第四操作指令;其中,所述第四操作指令用于指示:设置数据库实例的运行模式;所述运行模式包括所述指定模式和正常模式;在所述正常模式中,对除所述指定用户以外的用户,解禁用所述指定指令;
执行所述第四操作指令,以设置所述数据库实例的运行模式。
进一步的,所述方法还包括:接收来自所述指定用户的第五操作指令;其中,所述第五操作指令用于指示:更新所述指定用户;执行所述第五操作指令,以更新所述指定用户;保存更新后的所述指定用户。
进一步的,所述方法还包括:
如果接收到用于删除目标用户的第六操作指令,判断所述目标用户是否属于所述指定用户;
如果所述目标用户属于所述指定用户,判断发送所述第六操作指令的用户是否属于所述指定用户;
如果发送所述第六操作指令的用户属于所述指定用户,执行所述第六操作指令,以删除所述目标用户;如果发送所述第六操作指令的用户不属于所述指定用户,拒绝执行所述第六操作指令。
进一步的,所述方法还包括:
如果接收到用于删除所述数据库实例中全部用户的第七操作指令,判断发送所述第七操作指令的用户是否属于所述指定用户;
如果发送所述第七操作指令的用户属于所述指定用户,执行所述第七操作指令,以删除所述数据库实例中全部用户;如果发送所述第七操作指令的用户不属于所述指定用户,拒绝执行所述第七操作指令。
本发明提供的一种对MongoDB数据库的操作装置,所述装置设置于运行数据库实例的服务器,所述装置包括:
第一判断模块,用于当数据库实例运行在指定模式时,如果接收到第一操作指令,判断发送所述第一操作指令的当前用户是否是预设的指定用户;其中,在所述指定模式中,除所述指定用户以外的用户,被禁用预设的指定指令;
第二判断模块,用于如果所述当前用户不是所述指定用户,判断所述第一操作指令是否属于所述指定指令;如果所述第一操作指令属于所述指定指令,拒绝执行所述第一操作指令。
本发明提供的一种服务器,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的机器可执行指令,所述处理器执行所述机器可执行指令以上述任一项所述的对MongoDB数据库的操作方法。
本发明提供的一种机器可读存储介质,该机器可读存储介质存储有机器可执行指令,该机器可执行指令在被处理器调用和执行时,机器可执行指令促使处理器实现上述任一项所述的对MongoDB数据库的操作方法。
本发明提供的对MongoDB数据库的操作方法、装置和服务器,该方法应用于运行数据库实例的服务器,当数据库实例运行在指定模式时,如果接收到第一操作指令,判断发送该第一操作指令的当前用户是否是预设的指定用户;其中,在该指定模式中,除该指定用户以外的用户,被禁用预设的指定指令;如果该当前用户不是该指定用户,判断该第一操作指令是否属于该指定指令;如果该第一操作指令属于该指定指令,拒绝执行该第一操作指令。该方法中,数据库实例设置了拥有最大权限的指定用户,可以对容易导致用户对数据库实例进行误操作的操作指令的权限进行限定,从而实现管理不同角色的用户对数据库实例的操作权限,保证数据库实例的安全运行。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种对MongoDB数据库的操作方法的流程图;
图2为本发明实施例提供的另一种对MongoDB数据库的操作方法的流程图;
图3为本发明实施例提供的另一种对MongoDB数据库的操作方法的流程图;
图4为本发明实施例提供的另一种对MongoDB数据库的操作方法的流程图;
图5为本发明实施例提供的另一种对MongoDB数据库的操作方法的流程图;
图6为本发明实施例提供的另一种对MongoDB数据库的操作方法的流程图;
图7为本发明实施例提供的另一种对MongoDB数据库的操作方法的流程图;
图8为本发明实施例提供的另一种对MongoDB数据库的操作方法的流程图;
图9为本发明实施例提供的另一种对MongoDB数据库的操作方法的流程图;
图10为本发明实施例提供的一种对MongoDB数据库的操作装置的结构示意图;
图11为本发明实施例提供的一种服务器的结构示意图。
具体实施方式
下面将结合实施例对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
MongoDB是一种基于分布式文件存储的数据库,由C++语言编写;MongoDB本身有一套完善的用户管理和权限管理系统,不同角色的用户拥有不同的权限;随着各种云计算的普及,云数据库也应运而生,云数据库管理员需要管理海量数据库实例;每个数据库实例的租户需要像使用自建数据库一样允许创建各种角色的用户,包括root用户;其中,租户可以理解为使用云数据库实例的单位或个人,该单位或个人访问该数据库实例的所有软件或程序,并不包括与数据库系统自身的DBA(Database Administrator,数据库管理员)、监控系统等;而云数据库管理员希望把一些容易发生误操作且后果特别严重的权限不开放给用户;目前,开源MongoDB数据库的用户管理和权限管理难以同时满足以上两点。
基于此,本发明实施例提供了一种对MongoDB数据库的操作方法、装置和服务器,该技术可以应用于对MongoDB数据库进行操作的应用中。为便于对本实施例进行理解,首先对本发明实施例所公开的一种对MongoDB数据库的操作方法进行详细介绍,该方法应用于运行数据库实例的服务器,如图1所示,该方法包括如下步骤:
步骤S102,当数据库实例运行在指定模式时,如果接收到第一操作指令,判断发送该第一操作指令的当前用户是否是预设的指定用户;其中,在该指定模式中,除该指定用户以外的用户,被禁用预设的指定指令;如果该当前用户不是该指定用户,执行步骤S104;如果该当前用户是该指定用户,执行步骤S110。
上述数据库实例可以理解为租户购买数据库服务的最小单位,即租户最少购买一个数据库实例,也可以购买多个数据库实例;每个数据库实例的规格可以不同,不同规格的数据库实例都可以运行在上述指定模式;上述指定模式可以理解为,在启动运行数据库实例的服务器时,通过配置文件的配置,使数据库实例运行在超级用户模式;上述第一操作指令可以是对数据库实例中的资源进行增加、删除、修改或查看等的指令;上述当前用户可以理解为发送该第一操作指令的用户,该当前用户可以是上述指定用户,也可以是该指定用户以外的其他用户,每个数据库实例可以有多个用户。
上述指定用户可以理解为,数据库实例运行在指定模式下时,所指定的具有超级权限的用户,即超级用户,该超级用户通常是可以进行系统管理的特殊用户,相比其他普通用户来说,它拥有最高权限,能够进行全系统的配置、维护等工作,做很多普通用户没有权限做的事情;上述指定指令通常是易导致用户对数据库实例进行误操作,并可能产生较为严重的后果的指令,比如drop(删除)指令。
在实际实现时,上述指定指令可以是super命令,也可以是super命令集中为禁用状态的命令,其中super命令可以理解为是一个命令,当数据库实例运行在指定模式时,只有指定用户能够执行该指定指令,除该指定用户以外的用户,通常会被禁用预设的指定指令,因此,当接收到第一操作指令时,服务器通常会先判断发送该第一操作指令的当前用户是否是预设的指定用户。
步骤S104,如果上述当前用户不是上述指定用户,判断上述第一操作指令是否属于该指定指令;如果属于,执行步骤S106;如果不属于,执行步骤S108。
如果上述当前用户不是指定用户,可以理解该当前用户的某些特定权限可能已被限制,这时通常需要判断接收到的第一操作指令是否属于被禁用的指定指令。
步骤S106,如果上述第一操作指令属于上述指定指令,拒绝执行该第一操作指令;结束。
如果上述第一操作指令属于该指定指令,则通常认为该当前用户被限制使用该第一操作指令,服务器可以拒绝执行该第一操作指令。
步骤S108,如果上述第一操作指令不属于上述指定指令,执行该第一操作指令;结束。
如果上述第一操作指令不属于上述指定指令,则通常认为该当前用户未被限制使用该第一操作指令,服务器可以执行该第一操作指令。
步骤S110,如果上述当前用户是上述指定用户,执行上述第一操作指令。
如果上述当前用户是指定用户,考虑到指定用户拥有最高权限,且不被禁用预设的指定指令,这时服务器可以执行该第一操作指令。
本发明实施例提供的对MongoDB数据库的操作方法,该方法应用于运行数据库实例的服务器,当数据库实例运行在指定模式时,如果接收到第一操作指令,判断发送该第一操作指令的当前用户是否是预设的指定用户;其中,在该指定模式中,除该指定用户以外的用户,被禁用预设的指定指令;如果该当前用户不是该指定用户,判断该第一操作指令是否属于该指定指令;如果该第一操作指令属于该指定指令,拒绝执行该第一操作指令。该方法中,数据库实例设置了拥有最大权限的指定用户,可以对容易导致用户对数据库实例进行误操作的操作指令的权限进行限定,从而实现管理不同角色的用户对数据库实例的操作权限,保证数据库实例的安全运行。
本发明实施例还提供了另一种对MongoDB数据库的操作方法,该方法在上述实施例方法的基础上实现;该方法重点描述判断第一操作指令是否属于指定指令的具体过程,具体对应下述步骤S204至步骤S214,该方法中,该指定指令预先保存在指令列表中;该指令列表中包括数据库实例对应的多个指令,以及每个指令的指令状态;每个指令都有一个禁用状态(commandStatus),true表示解禁用,非superUser,即指定用户以外的其他用户也可以使用;false表示禁用,只有superUser,即指定用户才可以使用。
在实际实现时,可以通过EnableCommand和EnableCommandSet类,来保存指令列表及各个指令的禁用状态,EnableCommand通常用来存放可以关闭和打开权限的多个指令,以及每个指令的指令状态,该指令状态可以用布尔值表示;EnableCommandSet通常会保存一个map,key:command str;value为EnableCommand;其中,map可以理解为是一个存储指令列表的存储器,指令列表的每一行都有一个key和value;所存储的指令列表的内容可以随时提取;str指的是string类型;此处表示的含义可以理解为,key的类型为字符串类型,名称为command,value为EnableCommand,由于EnableCommand中存放有可以关闭和打开权限的多个指令,可以通过key获取到各个指令的指令状态。
具体获取方式可以通过定义一个全局的EnableCommandSet*GLOBAL变量,EnableCommandSet*GLOBAL变量保存上述可以设置权限的指令列表,通过EnableCommandSet*EnableCommandSet::getGlobal()方法可以获取到各个指令的指令状态,以方便其他类调用;其中,该方法中的getGlobal是变量的名字,EnableCommandSet表示所属类,EnableCommandSet*表示返回值;需要控制权限的命令分别实现各自的类,继承EnableCommand;加入EnableCommandSet*GLOBAL中。
在上述指令列表中,指定指令的指令状态为禁用,除该指定指令以外的指令的指令状态为解禁用;在实际实现时,指令状态为禁用可以通过设置指令状态为“false”来实现,指令状态为解禁用可以通过设置指令状态为“true”来实现,如图2所示,该方法包括如下步骤:
步骤S202,当数据库实例运行在指定模式时,如果接收到第一操作指令,判断发送该第一操作指令的当前用户是否是预设的指定用户;其中,在该指定模式中,除该指定用户以外的用户,被禁用预设的指定指令;如果该当前用户不是指定用户,执行步骤S204;如果该当前用户是指定用户,执行步骤S214。
步骤S204,如果上述当前用户不是上述指定用户,查询上述指令列表中是否保存有上述第一操作指令;如果该指令列表中保存有该第一操作指令,执行步骤S206;如果该指令列表中未保存有该第一操作指令,执行步骤S214。
如果上述当前用户不是指定用户,可以理解该当前用户的某些特定权限可能已被限制,这时通常需要先查询保存数据库实例对应的多个指令的指令列表中是否保存有上述第一操作指令。
步骤S206,如果上述指令列表中保存有上述第一操作指令,查询该指令列表中该第一操作指令的指令状态;判断该第一操作指令的指令状态是否为禁用,如果是禁用,执行步骤S208;如果是解禁用,执行步骤S210。
如果上述指令列表中保存有上述第一操作指令,由于指令列表中保存有每个指令的指令状态,该指令状态可能是禁用,也可能是解禁用,因此,需要确认该指令列表中的第一操作指令的指令状态。
步骤S208,如果上述第一操作指令的指令状态为禁用,确定该第一操作指令属于上述指定指令;执行步骤S212。
如果上述第一操作指令的指令状态为禁用,可以理解为除指定用户以外的其他用户被禁用该第一操作指令,因此该第一操作指令属于上述指定指令。
步骤S210,如果上述第一操作指令的指令状态为解禁用,确定该第一操作指令不属于上述指定指令;执行步骤S214。
如果上述第一操作指令的指令状态为解禁用,可以理解为除指定用户以外的其他用户可以使用该第一操作指令,因此该第一操作指令不属于上述指定指令。
步骤S212,如果上述第一操作指令属于上述指定指令,拒绝执行该第一操作指令。
步骤S214,执行上述第一操作指令。
如果上述当前用户是指定用户,考虑到指定用户拥有最高权限,且不被禁用预设的指定指令,这时服务器可以执行该第一操作指令。
如果上述指令列表中未保存有上述第一操作指令,可以理解为执行该第一操作指令是安全的,不会因为用户的误操作,对数据库实例产生较为严重的后果,进而影响数据库实例的运行,因此,服务器也可以执行该第一操作指令。
如果上述第一操作指令不属于指定指令,可以理解为解除了对该第一操作指令的限制,这时,服务器也可以执行该第一操作指令。
上述对MongoDB数据库的操作方法,重点描述了判断所述第一操作指令是否属于指定指令的具体过程,当数据库实例运行在指定模式时,如果接收到第一操作指令,且发送该第一操作指令的当前用户不是指定用户,查询指令列表中是否保存有该第一操作指令;如果该指令列表中保存有该第一操作指令,查询该指令列表中所述第一操作指令的指令状态;如果该第一操作指令的指令状态为禁用,确定该第一操作指令属于所述指定指令。该方法中,数据库实例设置了拥有最大权限的指定用户,可以对容易导致用户对数据库实例进行误操作的操作指令的权限进行限定,从而实现管理不同角色的用户对数据库实例的操作权限,保证数据库实例的安全运行。
本发明实施例还提供了另一种对MongoDB数据库的操作方法,该方法在上述实施例方法的基础上实现;如图3所示,该方法包括如下步骤:
步骤S302,当数据库实例运行在指定模式时,如果接收到第一操作指令,判断发送该第一操作指令的当前用户是否是预设的指定用户;其中,在该指定模式中,除该指定用户以外的用户,被禁用预设的指定指令;如果该当前用户不是该指定用户,执行步骤S304;如果该当前用户是该指定用户,执行步骤S310。
步骤S304,如果上述当前用户不是上述指定用户,判断上述第一操作指令是否属于上述指定指令;如果属于,执行步骤S306;如果不属于,执行步骤S308。
步骤S306,如果上述第一操作指令属于上述指定指令,拒绝执行该第一操作指令;执行步骤S312。
步骤S308,如果上述第一操作指令不属于上述指定指令,执行该第一操作指令;执行步骤S312。
步骤S310,如果上述当前用户是上述指定用户,执行上述第一操作指令。
步骤S312,接收来自上述指定用户的第二操作指令;其中,该第二操作指令用于指示:更新指令列表中一个或多个指令的指令状态。
指定用户有更新指令列表中一个或多个指令的指令状态的权限,比如将某一指令的指令状态从“禁用”修改为“解禁用”,或者,将某一指令的指令状态从“解禁用”修改为“禁用”等。
步骤S314,执行上述第二操作指令,以更新上述指令列表。
服务器接收到上述第二操作指令后,根据该第二操作指令,更新上述指令列表;在实际实现时,可以通过增加两个命令来获取和设置命令权限,这两个命令只有指定用户,即supperuser有权限使用,可以在线添加和删除指令列表中的指令,在线修改指令的指令状态。
两个命令分别为getEnableCmd:获取指令状态;和setEnableCmd:设置指令状态;在设置指令状态时,如果设置为false,表示禁用;如果设置为true,表示解禁用,一般默认为false;比如,如果需要查看全部可以设置权限的指令列表,可以通过以下命令实现:db.adminCommand({getEnableCmd:'*'});该命令中,“*”代表不过滤,全部的意思,即获取全部可以设置权限的指令列表,以及true或flase的指令状态,返回的指令列表通常会打印到屏幕上。
如果需要获取某个指令,如"getLog"的指令状态,可以通过以下命令实现:db.adminCommand({getEnableCmd:1,"getLog":1});如果需要解禁用某个命令,如"getLog"的权限,可以通过以下命令实现:db.adminCommand({setEnableCmd:1,"getLog":'true'});如果需要禁用某个命令,如"getLog"的权限,可以通过以下命令实现:db.adminCommand({setEnableCmd:1,"getLog":'false'})。
上述getLog是一种查看日志的命令,如果返回值为true,表示把getLog命令的权限解禁了,原本可以查看日志的用户都可以查看日志;如果返回值为false,除指定用户以外的其他所有用户,包括root用户都不能查看日志。
为了实现上述两个命令,即getEnableCmd和setEnableCmd的运行,需要增加EnableCmdGet和EnableCmdSet两个类分别用来获取和设置指令的指令状态,其中,EnableCmdGet命令用来获取某个或某些指令的指令状态,确认是否对非superuser开放;EnableCmdSet命令用来设置某个或某些指令的指令状态,true表示对非superuser用户解禁用,false表示对非superuser禁用;这两个类是用来实现上述两个命令运行的方法;两个命令和两个类是对应的,getEnableCmd和setEnableCmd是具体操作时的命令,因为EnableCmdGet和EnableCmdSet这两个类的存在,源码编译出来的程序,在运行时才能支持getEnableCmd和setEnableCmd两个命令的执行。指令列表中通常包括当前数据库实例的所有命令;每个数据库实例中都有这些命令可以操作;更新一次指令列表,影响的是整个数据库实例中的所有非superUser用户,即除指定用户以外的所有用户的权限。
比如,如果解禁了一个指令,说明解除了对这个指令的限制,如果非superuser用户本身的管理机制有这个权限,当解禁之后,该非superuser用户就可以执行这个指令,如果非superuser用户本身的管理机制不具备这个权限,即使解禁了这个指令,该非superuser用户也不能执行这个命令;解禁的意思是不对非superuser用户设限,并不代表给非superuser用户附加了这个权限。
在特殊情况下,如果有非superuse用户有特殊需要,需要解禁某些权限,可以为该非superuse用户在线临时开启,不会影响其他运行。如果禁用了某些指令,所有非superuser用户都不能执行该指令,这样可以保证数据库服务的安全。
步骤S316,保存更新后的上述指令列表。
上述对MongoDB数据库的操作方法,当接收到来自指定用户的指示更新指令列表中一个或多个指令的指令状态的第二操作指令后,执行该第二操作指令,以更新该指令列表;并保存更新后的该指令列表。该方法中,数据库实例设置了拥有最大权限的指定用户,可以对容易导致用户对数据库实例进行误操作的操作指令的权限进行限定,从而实现管理不同角色的用户对数据库实例的操作权限,保证数据库实例的安全运行。
本发明实施例还提供了另一种对MongoDB数据库的操作方法,该方法在上述实施例方法的基础上实现;如图4所示,该方法包括如下步骤:
步骤S402,当数据库实例运行在指定模式时,如果接收到第一操作指令,判断发送该第一操作指令的当前用户是否是预设的指定用户;其中,在该指定模式中,除该指定用户以外的用户,被禁用预设的指定指令;如果该当前用户不是该指定用户,执行步骤S404;如果该当前用户是该指定用户,执行步骤S418。
步骤S404,如果上述当前用户不是上述指定用户,获取该当前用户所属的角色,以及该角色的可操作指令。
上述角色可以理解为,在数据库实例中通过角色对用户授予相应数据库资源的操作权限,每个角色当中的权限可以显式指定,或者,可以通过继承其他角色获得权限,或者同时采用两种方式获得的权限;上述可操作指令可以理解为上述角色所对应的操作权限;操作权限可以由指定的数据库资源(resource)以及允许在指定资源上进行的操作(action)组成;其中,资源(resource)通常包括:数据库、集合、部分集合和集群;操作(action)通常包括:对资源进行的增删改查(Create、Retrieve、Update、Delete,简称CRUD)操作。
在实际实现时,非指定用户的用户通常会被绑定成某种角色,每个角色与一种或者多种权限进行绑定,从而实现用户与权限的绑定,用户拥有与其绑定的角色的所有权限,也就是说用户可以执行其所属角色的可操作指令。
例如,相关技术中,在使用云数据库的用户中,root用户是超级管理员,拥有最高权限;root用户可以创建只读用户、或者只对某个数据库有权限,对其他数据库没有权限的用户;本实施例在root用户之上又设置了一个超级用户,即指定用户,也相当于云数据库的管理员,给root用户限制一些权限,比如某些命令不能执行,但是超级用户是可以执行的;dbAdmin拥有数据库对象的管理操作权限,但没有数据库的读写权限;userAdmin拥有在本库下创建用户的权限;readWrite拥有增删改查本数据库的权限;read拥有查询本数据库的权限。
步骤S406,判断上述第一操作指令是否属于上述当前用户所属的角色的可操作指令;如果属于,执行步骤S408;如果不属于,执行步骤S410。
步骤S408,如果属于上述可操作指令,执行判断上述第一操作指令是否属于指定指令的步骤;执行步骤S412。
如果上述第一操作指令属于上述当前用户所属的角色的可操作指令,可以理解,该当前用户本身的管理机制具备执行该第一操作指令的权限,这时会继续执行判断该第一操作指令是否属于指定指令的步骤。
步骤S410,如果不属于可操作指令,拒绝执行第一操作指令;结束。
如果上述第一操作指令不属于上述当前用户所属的角色的可操作指令,可以理解,该当前用户本身的管理机制不具备执行该第一操作指令的权限,这时服务器会拒绝执行第一操作指令。
步骤S412,如果上述当前用户不是上述指定用户,判断上述第一操作指令是否属于上述指定指令;如果属于,执行步骤S414;如果不属于,执行步骤S416。
步骤S414,如果上述第一操作指令属于上述指定指令,拒绝执行该第一操作指令;结束。
步骤S416,如果上述第一操作指令不属于上述指定指令,执行该第一操作指令;结束。
步骤S418,如果上述当前用户是上述指定用户,执行上述第一操作指令。
本实施例中,增加了超级权限检查机制,在命令的基类BasicCommand中的权限检查函数中增加对supperUser和EnableCommandSet指令列表的检查;因为所有的命令的实现类都会继承BasicCommand类,所以在BasicCommand类中进行super权限检查相当于所有的命令都会经过super权限的检查。
需要禁用的命令的实现类都间接继承或者直接继承了BasicCommand类,checkAuthForCommand函数是BasicCommand类的权限检查函数,对这个函数进行扩展,如果用户想要执行某个操作指令,该操作指令就会触发执行权限检查函数,确认是否允许该用户执行。具体如下:
1)保留原本的权限检查,即,确认用户所属的角色的可操作指令中是否包含某操作指令的权限。
2)原本的权限检查通过的,增加对supperUser和EnableCommandSet命令列表的检查;即确认用户是否是supperUser,如果是supperUser,执行该操作指令;如果不是supperUser,确认该操作指令是否在EnableCommandSet的指令列表中,如果在该指令列表,且指令状态为false,则不执行该操作指令,如果指令状态为true,执行该操作指令。
3)原本权限检查不通过的,依然不通过,即,用户所属的角色的可操作指令中不包含该操作指令的权限,这时服务器不执行该操作指令。
上述设计方式可以兼容原生MongoDB的权限管理机制,同时增加super权限的检查;这样所有继承BasicCommand的类实现的命令类都会进行上述定义的权限检查,除非子类重新定义了checkAuthForCommand函数,有一些命令实现类重写了checkAuthForCommand这个函数,这些命令不会走BasicCommand的权限检查过程,需要特殊处理,需要在重写的权限检查函数里加入super权限的检查,扩展方法同BasicCommand类的权限检查函数checkAuthForCommand函数的扩展方法,特殊的命令主要包括如下:
(1)replSet开头的命令(共8个)的命令都继承了ReplSetCommand类,相当于间接继承了BasicCommand,在ReplSetCommand中对权限检查函数checkAuthForCommand进行了重写,所以replSet*命令都是通过该函数实现,按照上述方法对ReplSetCommand::checkAuthForCommand进行改造,增加supper和EnableCommandSet的检查,这样,replSet开头的命令就和其他EnableCommandSet中的命令一样进行权限检查了。
(2)以下三个命令的实现类,各自重写了checkAuthForCommand,分别对各自的checkAuthForCommand函数进行改造,这三个命令分别为:authSchemaUpgrade(MongoDB3.2和3.6有此命令,4.0删除了这个命令)、createBackup和repairCursor。
当运行一个具体的数据库实例时,用户通过用户名和密码连与数据库实例建立连接,建立连接时,会对其用户名和密码进行校验,如果用户名和密码正确,才能建立连接,就可以执行各种命令,判断是否有执行命令的权限时,就会触发上述checkAuthForCommand函数。
上述对MongoDB数据库的操作方法,当接收到当前用户发送的第一操作指令后,如果该当前用户不是指定用户,获取该当前用户所属的角色,以及该角色的可操作指令;判断该第一操作指令是否属于该当前用户所属的角色的可操作指令;如果属于该可操作指令,执行判断该第一操作指令是否属于该指定指令的步骤;如果不属于该可操作指令,拒绝执行该第一操作指令。该方法中,数据库实例设置了拥有最大权限的指定用户,可以对容易导致用户对数据库实例进行误操作的操作指令的权限进行限定,从而实现管理不同角色的用户对数据库实例的操作权限,保证数据库实例的安全运行。
本发明实施例还提供了另一种对MongoDB数据库的操作方法,该方法在上述实施例方法的基础上实现;如图5所示,该方法包括如下步骤:
步骤S502,当数据库实例运行在指定模式时,如果接收到第一操作指令,判断发送该第一操作指令的当前用户是否是预设的指定用户;其中,在该指定模式中,除该指定用户以外的用户,被禁用预设的指定指令;如果该当前用户不是该指定用户,执行步骤S504;如果该当前用户是该指定用户,执行步骤S510。
步骤S504,如果上述当前用户不是上述指定用户,判断上述第一操作指令是否属于上述指定指令;如果属于,执行步骤S506;如果不属于,执行步骤S508。
步骤S506,如果上述第一操作指令属于上述指定指令,拒绝执行该第一操作指令;执行步骤S512。
步骤S508,如果上述第一操作指令不属于上述指定指令,执行该第一操作指令;执行步骤S512。
步骤S510,如果上述当前用户是上述指定用户,执行上述第一操作指令。
步骤S512,接收来自上述指定用户的第三操作指令;其中,该第三操作指令用于查询上述数据库实例的运行模式。
上述运行模式可以包括上述指定模式和非指定模式,比如,该非指定模式可以是正常模式;指定用户有查询上述数据库实例的运行模式的权限,当需要查询数据库实例的运行模式时,指定用户可以向服务器发送上述第三操作指令。
步骤S514,向上述指定用户返回上述数据库实例的运行模式。
当服务器接收到上述指定用户发送的第三操作指令后,通常会向该指定用户返回数据库实例的当前的运行模式;在实际实现时,可以通过增加superUserMode和superUser两个配置参数来实现;如果superUserMode返回值为true,并且指定某个用户为超级用户时,则开启了超级用户模式,超级用户拥有一切权限,该数据库实例可以拥有一个或以上的superUser角色的用户;比如,租户购买了数据库实例,每个数据库实例对应一些资源,比如,对应cpu大小、磁盘大小或内存大小等,一个数据库实例可以在其所购买的资源范围内使用;租户也可以购买多个数据库实例,每个数据库实例对应一个root用户,每个数据库实例都会有一个superUser角色的用户。
如果superUserMode返回值为flase,则没有开启超级用户模式,该数据库实例等同于普通的开源数据库实例,即,没有superUser角色的用户,其他角色的用户权限不受限制。
在superUserMode开启时,superUser用户拥有一切权限,可以禁用其他用户的命令;而非superUser的用户(包括root角色的用户)的某些特定权限被限制,比如不能执行某些可能引起严重后果的命令。
可以通过以下两个命令行获取数据库实例的运行模式:db.adminCommand({getParameter:1,"enableSupperUserMode":1})和db.adminCommand({getParameter:1,"supperUser":1});其中,getParameter用于获取运行模式的状态,以确认是否开启了superusermode,即指定模式;第一个命令行如果返回true,说明开启了superUserMode的运行模式,如果返回false,说明未开启superUserMode的运行模式;这两个命令只有superuser,即指定用户能操作,除指定用户以外的普通用户不能操作;服务器将获取到的数据库实例的运行模式返回至指定用户。
在实际实现时,要想实现superUserMode和superUser两个配置参数,在配置文件中增加这两个参数后,还需要在数据库服务的源代码中识别这两个参数,并且能让这两个参数进行配置,还可以支持在线热配(即运行时可配),在运行过程中,可以通过命令更改这两个参数的值,如true或flase,实现方式就是通过enableSupperUserModeSetting和supperUserSetting这两个参数设置类,这两个参数设置类都继承源码里的ServerParameter类,该ServerParameter类可以理解为实现getParameter、setParameter命令的源码,ServerParameter类中有可配和不可配的路线,选择可配的路线,这样ServerParameter类的属性都会遗传到enableSupperUserModeSetting和supperUserSetting这两个参数设置类;由于两个参数设置类继承了ServerParameter类的可配属性,从而实现了supperUser和enableSupperUserMode两个参数在运行时可配。
上述对MongoDB数据库的操作方法,当接收来自指定用户的,用于查询数据库实例的运行模式的第三操作指令时,向该指定用户返回该数据库实例的运行模式。该方法中,数据库实例设置了拥有最大权限的指定用户,可以对容易导致用户对数据库实例进行误操作的操作指令的权限进行限定,从而实现管理不同角色的用户对数据库实例的操作权限,保证数据库实例的安全运行。
本发明实施例还提供了另一种对MongoDB数据库的操作方法,该方法在上述实施例方法的基础上实现;如图6所示,该方法包括如下步骤:
步骤S602,当数据库实例运行在指定模式时,如果接收到第一操作指令,判断发送该第一操作指令的当前用户是否是预设的指定用户;其中,在该指定模式中,除该指定用户以外的用户,被禁用预设的指定指令;如果该当前用户不是该指定用户,执行步骤S604;如果该当前用户是该指定用户,执行步骤S610。
步骤S604,如果上述当前用户不是上述指定用户,判断上述第一操作指令是否属于上述指定指令;如果属于,执行步骤S606;如果不属于,执行步骤S608。
步骤S606,如果上述第一操作指令属于上述指定指令,拒绝执行该第一操作指令;执行步骤S612。
步骤S608,如果上述第一操作指令不属于上述指定指令,执行该第一操作指令;执行步骤S612。
步骤S610,如果上述当前用户是上述指定用户,执行上述第一操作指令。
步骤S612,接收来自上述指定用户的第四操作指令;其中,该第四操作指令用于指示:设置数据库实例的运行模式;该运行模式包括上述指定模式和正常模式;在该正常模式中,对除该指定用户以外的用户,解禁用该指定指令。
指定用户有设置上述数据库实例的运行模式的权限,当需要设置数据库实例的运行模式时,指定用户可以向服务器发送上述第四操作指令。由上述实施例可知,如果superUserMode返回值为true,并且指定某个用户为超级用户时,则开启了超级用户模式,相当于指定模式;如果superUserMode返回值为flase,则没有开启超级用户模式,相当于正常模式;在正常模式下,该数据库实例等同于普通的开源数据库实例,即,没有superUser角色的用户,其他角色的用户权限不受限制,即对其他角色的用户解禁用该指定指令。
步骤S614,执行上述第四操作指令,以设置上述数据库实例的运行模式。
当服务器接收到上述指定用户发送的第四操作指令后,通常会根据该第四操作指令,设置数据库实例的运行模式;在实际实现时,可以通过设置enableSupperUserMode和supperUser,实现对数据库实例运行模式的设置,具体可以通过以下两个命令行实现:db.adminCommand({setParameter:1,"enableSupperUserMode":'true'})和db.adminCommand({setParameter:1,supperUser:"ksc_admin,ksc_admin1,ksc_admin2"});其中,setParameter用于设置运行模式,第一个命令行如果返回true,说明设置运行模式为超级用户模式,即指定模式;如果返回flase,说明设置运行模式为非超级用户模式,即正常模式;第二个命令行可以理解为设置ksc_admin,ksc_admin1和ksc_admin2为超级用户,即指定用户;一般设置一个指定用户即可,也可以设置多个指定用户。
由上述可知,在超级用户模式下启动数据库实例后,超级用户就具有了超级用户的权限,其他用户的权限可能会受限制,超级用户模式是可以在线关闭的,即将superuser设置成false,这样超级用户就变成了普通的root用户,之前被限制的root用户也具有了正常root用户的权利。
在正常运行过程中,超级用户自己可以开启或者关闭超级用户模式,只有超级用户具有这个权利,其他用户没有开启或关闭超级用户模式的权限。
上述对MongoDB数据库的操作方法,当接收到来自指定用户的,用于指示设置数据库实例的运行模式的第四操作指令时,执行该第四操作指令,以设置该数据库实例的运行模式。该方法中,数据库实例设置了拥有最大权限的指定用户,可以对容易导致用户对数据库实例进行误操作的操作指令的权限进行限定,从而实现管理不同角色的用户对数据库实例的操作权限,保证数据库实例的安全运行。
本发明实施例还提供了另一种对MongoDB数据库的操作方法,该方法在上述实施例方法的基础上实现;如图7所示,该方法包括如下步骤:
步骤S702,当数据库实例运行在指定模式时,如果接收到第一操作指令,判断发送该第一操作指令的当前用户是否是预设的指定用户;其中,在该指定模式中,除该指定用户以外的用户,被禁用预设的指定指令;如果该当前用户不是该指定用户,执行步骤S704;如果该当前用户是该指定用户,执行步骤S710。
步骤S704,如果上述当前用户不是上述指定用户,判断上述第一操作指令是否属于上述指定指令;如果属于,执行步骤S706;如果不属于,执行步骤S708。
步骤S706,如果上述第一操作指令属于上述指定指令,拒绝执行该第一操作指令;执行步骤S712。
步骤S708,如果上述第一操作指令不属于上述指定指令,执行该第一操作指令;执行步骤S712。
步骤S710,如果上述当前用户是上述指定用户,执行上述第一操作指令。
步骤S712,接收来自上述指定用户的第五操作指令;其中,该第五操作指令用于指示:更新该指定用户。
指定用户有更新指定用户的权限,比如,指定用户可以设置其他用户为指定用户,也可以取消其他用户为指定用户。
步骤S714,执行上述第五操作指令,以更新上述指定用户。
当服务器接收到上述指定用户发送的第五操作指令后,通常会根据该第五操作指令,更新上述指定用户。
步骤S716,保存更新后的指定用户。
当服务器根据接收到的第五操作指令,完成指定用户的更新后,通常会保存更新后的指定用户。
上述对MongoDB数据库的操作方法,当接收到来自指定用户的,用于指示更新指定用户的第五操作指令时,执行该第五操作指令,以更新该指定用户;保存更新后的指定用户。该方法中,数据库实例设置了拥有最大权限的指定用户,可以对容易导致用户对数据库实例进行误操作的操作指令的权限进行限定,从而实现管理不同角色的用户对数据库实例的操作权限,保证数据库实例的安全运行。
本发明实施例还提供了另一种对MongoDB数据库的操作方法,该方法在上述实施例方法的基础上实现;如图8所示,该方法包括如下步骤:
步骤S802,当数据库实例运行在指定模式时,如果接收到第一操作指令,判断发送该第一操作指令的当前用户是否是预设的指定用户;其中,在该指定模式中,除该指定用户以外的用户,被禁用预设的指定指令;如果该当前用户不是该指定用户,执行步骤S804;如果该当前用户是该指定用户,执行步骤S810。
步骤S804,如果上述当前用户不是上述指定用户,判断上述第一操作指令是否属于上述指定指令;如果属于,执行步骤S806;如果不属于,执行步骤S808。
步骤S806,如果上述第一操作指令属于上述指定指令,拒绝执行该第一操作指令;执行步骤S812。
步骤S808,如果上述第一操作指令不属于上述指定指令,执行该第一操作指令;执行步骤S812。
步骤S810,如果上述当前用户是上述指定用户,执行上述第一操作指令。
步骤S812,如果接收到用于删除目标用户的第六操作指令,判断该目标用户是否属于上述指定用户;如果属于,执行步骤S814;如果不属于,执行步骤S820。
上述目标用户可以是数据库实例中的指定用户,可以是该数据库实例中的除指定用户以外的其他用户;当服务器接收到用于删除目标用户的第六操作指令,通常需要先判断该目标用户是否属于该指定用户。
步骤S814,如果上述目标用户属于上述指定用户,判断发送上述第六操作指令的用户是否属于该指定用户;如果属于,执行步骤S816;如果不属于,执行步骤S818。
如果上述目标用户属于上述指定用户,由上述实施例可知,只有指定用户才有删除指定用户的权限,除指定用户以外的其他用户没有删除指定用户的权限,因此,如果接收到用于删除目标用户的第六操作指令,且该目标用户属于指定用户,需要判断发送该第六操作指令的用户是否属于该指定用户。
步骤S816,如果发送上述第六操作指令的用户属于上述指定用户,执行该第六操作指令,以删除上述目标用户;结束。
如果通过判断确认发送上述第六操作指令的用户属于上述指定用户,由于指定用户有删除指定用户的权限,这时,服务器通常会执行该第六操作指令,以删除上述目标用户。
步骤S818,如果发送上述第六操作指令的用户不属于上述指定用户,拒绝执行该第六操作指令;结束。
如果通过判断确认发送上述第六操作指令的用户不属于上述指定用户,由于除指定用户以外的其他用户没有删除指定用户的权限,这时,服务器通常会拒绝执行该第六操作指令。
步骤S820,如果上述目标用户不属于上述指定用户,执行上述第六操作指令,以删除该目标用户。
如果上述目标用户不属于上述指定用户,即,该目标用户属于除指定用户以外的其他用户,服务器通常会执行上述第六操作指令,以删除该目标用户。
本实施例中,有些情况下对非supperuser永远禁用dropUser命令,dropUser的权限检查函数checkAuthForDropUserCommand函数中对通过权限检查的增加如下检查:
a.判断需要drop(删除)掉的user是否supperuser,即指定用户,如果是,进入b;如果不是,通过,即执行该操作指令;
b.判断当前操作用户是否supperuser,如果是,通过,即执行该操作指令;如果不是,不通过,即不执行该操作指令。
也就是只有superuser才能删除superuser用户,非superUser是不能删除superuser用户的,这样就避免了普通的用户删掉superuser用户。
上述对MongoDB数据库的操作方法,如果接收到用于删除目标用户的第六操作指令,判断该目标用户是否属于指定用户;如果属于,判断发送该第六操作指令的用户是否属于该指定用户;如果发送该第六操作指令的用户属于该指定用户,执行该第六操作指令,以删除该目标用户;如果发送该第六操作指令的用户不属于该指定用户,拒绝执行该第六操作指令。该方法中,数据库实例设置了拥有最大权限的指定用户,可以对容易导致用户对数据库实例进行误操作的操作指令的权限进行限定,从而实现管理不同角色的用户对数据库实例的操作权限,保证数据库实例的安全运行。
本发明实施例还提供了另一种对MongoDB数据库的操作方法,该方法在上述实施例方法的基础上实现;如图9所示,该方法包括如下步骤:
步骤S902,当数据库实例运行在指定模式时,如果接收到第一操作指令,判断发送该第一操作指令的当前用户是否是预设的指定用户;其中,在该指定模式中,除该指定用户以外的用户,被禁用预设的指定指令;如果该当前用户不是该指定用户,执行步骤S904;如果该当前用户是该指定用户,执行步骤S910。
步骤S904,如果上述当前用户不是上述指定用户,判断上述第一操作指令是否属于上述指定指令;如果属于,执行步骤S906;如果不属于,执行步骤S908。
步骤S906,如果上述第一操作指令属于上述指定指令,拒绝执行该第一操作指令;执行步骤S912。
步骤S908,如果上述第一操作指令不属于上述指定指令,执行该第一操作指令;执行步骤S912。
步骤S910,如果上述当前用户是上述指定用户,执行上述第一操作指令。
步骤S912,如果接收到用于删除上述数据库实例中全部用户的第七操作指令,判断发送该第七操作指令的用户是否属于上述指定用户;如果属于,执行步骤S914;如果不属于,执行步骤S916。
上述全部用户通常包括上述数据库实例中的指定用户,以及,除指定用户以外的其他用户,由上述实施例可知,只有指定用户才有删除指定用户的权限,除指定用户以外的其他用户没有删除指定用户的权限,因此,如果接收到用于删除上述数据库实例中全部用户的第七操作指令,服务器通常需要先判断发送该第七操作指令的用户是否属于指定用户。
步骤S914,如果发送第七操作指令的用户属于指定用户,执行第七操作指令,以删除数据库实例中全部用户。
如果通过判断确认发送上述第七操作指令的用户属于上述指定用户,由于指定用户有删除全部用户中的指定用户的权限,这时,服务器通常会执行该第七操作指令,以删除上述数据库实例中全部用户。
步骤S916,如果发送上述第七操作指令的用户不属于上述指定用户,拒绝执行该第七操作指令。
如果通过判断确认发送上述第七操作指令的用户不属于上述指定用户,由于除指定用户以外的其他用户没有删除全部用户中的指定用户的权限,这时,服务器通常会拒绝执行该第七操作指令。
本实施例中,在有些情况下对非supperuser永远禁用dropAllUsersFromDatabase操作指令,该操作命令用于删除数据库实例中的所有用户,检查方式如下:
a、判断当前数据库实例是否运行在指定模式,如果否,通过,即执行该操作指令;如果是,进入b;
b、判断当前操作用户是否supperuser,如果是,通过,即执行该操作指令;如果不是,不通过,即不执行该操作指令。
上述对MongoDB数据库的操作方法,如果接收到用于删除数据库实例中全部用户的第七操作指令,判断发送该第七操作指令的用户是否属于指定用户;如果属于,执行该第七操作指令,以删除该数据库实例中全部用户;如果不属于,拒绝执行该第七操作指令。该方法中,数据库实例设置了拥有最大权限的指定用户,可以对容易导致用户对数据库实例进行误操作的操作指令的权限进行限定,从而实现管理不同角色的用户对数据库实例的操作权限,保证数据库实例的安全运行。
对应于上述方法实施例,参见图10所示的一种对MongoDB数据库的操作装置的结构示意图,该装置设置于运行数据库实例的服务器,该装置包括:第一判断模块101,用于当数据库实例运行在指定模式时,如果接收到第一操作指令,判断发送第一操作指令的当前用户是否是预设的指定用户;其中,在指定模式中,除指定用户以外的用户,被禁用预设的指定指令;第二判断模块102,用于如果当前用户不是指定用户,判断第一操作指令是否属于指定指令;如果第一操作指令属于指定指令,拒绝执行第一操作指令。
上述对MongoDB数据库的操作装置,该装置设置于运行数据库实例的服务器,当数据库实例运行在指定模式时,如果接收到第一操作指令,判断发送该第一操作指令的当前用户是否是预设的指定用户;其中,在该指定模式中,除该指定用户以外的用户,被禁用预设的指定指令;如果该当前用户不是该指定用户,判断该第一操作指令是否属于该指定指令;如果该第一操作指令属于该指定指令,拒绝执行该第一操作指令。该装置中,数据库实例设置了拥有最大权限的指定用户,可以对容易导致用户对数据库实例进行误操作的操作指令的权限进行限定,从而实现管理不同角色的用户对数据库实例的操作权限,保证数据库实例的安全运行。
进一步的,所述指定指令预先保存在指令列表中;所述指令列表中包括所述数据库实例对应的多个指令,以及每个所述指令的指令状态;其中,所述指令列表中,所述指定指令的指令状态为禁用,除所述指定指令以外的指令的指令状态为解禁用。
进一步的,第二判断模块102还用于:查询所述指令列表中是否保存有所述第一操作指令;如果所述指令列表中保存有所述第一操作指令,查询所述指令列表中所述第一操作指令的指令状态;如果所述第一操作指令的指令状态为禁用,确定所述第一操作指令属于所述指定指令。
进一步的,该装置还用于:接收来自所述指定用户的第二操作指令;其中,所述第二操作指令用于指示:更新所述指令列表中一个或多个指令的指令状态;执行所述第二操作指令,以更新所述指令列表;保存更新后的所述指令列表。
进一步的,该装置还用于:获取所述当前用户所属的角色,以及所述角色的可操作指令;判断所述第一操作指令是否属于所述当前用户所属的角色的可操作指令;如果属于所述可操作指令,执行判断所述第一操作指令是否属于所述指定指令的步骤;如果不属于所述可操作指令,拒绝执行所述第一操作指令。
进一步的,该装置还用于:接收来自所述指定用户的第三操作指令;其中,所述第三操作指令用于查询所述数据库实例的运行模式;向所述指定用户返回所述数据库实例的运行模式。
进一步的,该装置还用于:接收来自所述指定用户的第四操作指令;其中,所述第四操作指令用于指示:设置数据库实例的运行模式;所述运行模式包括所述指定模式和正常模式;在所述正常模式中,对除所述指定用户以外的用户,解禁用所述指定指令;执行所述第四操作指令,以设置所述数据库实例的运行模式。
进一步的,该装置还用于:接收来自所述指定用户的第五操作指令;其中,所述第五操作指令用于指示:更新所述指定用户;执行所述第五操作指令,以更新所述指定用户;保存更新后的所述指定用户。
进一步的,该装置还用于:如果接收到用于删除目标用户的第六操作指令,判断所述目标用户是否属于所述指定用户;如果所述目标用户属于所述指定用户,判断发送所述第六操作指令的用户是否属于所述指定用户;如果发送所述第六操作指令的用户属于所述指定用户,执行所述第六操作指令,以删除所述目标用户;如果发送所述第六操作指令的用户不属于所述指定用户,拒绝执行所述第六操作指令。
进一步的,该装置还用于:如果接收到用于删除所述数据库实例中全部用户的第七操作指令,判断发送所述第七操作指令的用户是否属于所述指定用户;如果发送所述第七操作指令的用户属于所述指定用户,执行所述第七操作指令,以删除所述数据库实例中全部用户;如果发送所述第七操作指令的用户不属于所述指定用户,拒绝执行所述第七操作指令。
本发明实施例所提供的对MongoDB数据库的操作装置,其实现原理及产生的技术效果和前述对MongoDB数据库的操作方法实施例相同,为简要描述,对MongoDB数据库的操作装置实施例部分未提及之处,可参考前述对MongoDB数据库的操作方法实施例中相应内容。
本发明实施例还提供了一种服务器,参见图11所示,该服务器包括处理器130和存储器131,该存储器131存储有能够被处理器130执行的机器可执行指令,该处理器130执行机器可执行指令以实现上述对MongoDB数据库的操作方法。
进一步地,图11所示的服务器还包括总线132和通信接口133,处理器130、通信接口133和存储器131通过总线132连接。
其中,存储器131可能包含高速随机存取存储器(RAM,Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口133(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线132可以是ISA总线、PCI总线或EISA总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图11中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
处理器130可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器130中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器130可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(DigitalSignal Processor,简称DSP)、专用集成电路(Application Specific IntegratedCircuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器131,处理器130读取存储器131中的信息,结合其硬件完成前述实施例的方法的步骤。
本发明实施例还提供了一种机器可读存储介质,该机器可读存储介质存储有机器可执行指令,该机器可执行指令在被处理器调用和执行时,该机器可执行指令促使处理器实现上述对MongoDB数据库的操作方法,具体实现可参见方法实施例,在此不再赘述。
本发明实施例所提供的对MongoDB数据库的操作方法、装置和服务器的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (13)
1.一种对MongoDB数据库的操作方法,其特征在于,所述方法应用于运行数据库实例的服务器,所述方法包括:
当数据库实例运行在指定模式时,如果接收到第一操作指令,判断发送所述第一操作指令的当前用户是否是预设的指定用户;其中,在所述指定模式中,除所述指定用户以外的用户,被禁用预设的指定指令;
如果所述当前用户不是所述指定用户,判断所述第一操作指令是否属于所述指定指令;如果所述第一操作指令属于所述指定指令,拒绝执行所述第一操作指令。
2.根据权利要求1所述的方法,其特征在于,所述指定指令预先保存在指令列表中;所述指令列表中包括所述数据库实例对应的多个指令,以及每个所述指令的指令状态;其中,所述指令列表中,所述指定指令的指令状态为禁用,除所述指定指令以外的指令的指令状态为解禁用。
3.根据权利要求2所述的方法,其特征在于,判断所述第一操作指令是否属于所述指定指令的步骤,包括:
查询所述指令列表中是否保存有所述第一操作指令;
如果所述指令列表中保存有所述第一操作指令,查询所述指令列表中所述第一操作指令的指令状态;
如果所述第一操作指令的指令状态为禁用,确定所述第一操作指令属于所述指定指令。
4.根据权利要求2所述的方法,其特征在于,所述方法还包括:
接收来自所述指定用户的第二操作指令;其中,所述第二操作指令用于指示:更新所述指令列表中一个或多个指令的指令状态;
执行所述第二操作指令,以更新所述指令列表;
保存更新后的所述指令列表。
5.根据权利要求1所述的方法,其特征在于,判断所述第一操作指令是否属于所述指定指令的步骤之前,所述方法还包括:
获取所述当前用户所属的角色,以及所述角色的可操作指令;
判断所述第一操作指令是否属于所述当前用户所属的角色的可操作指令;
如果属于所述可操作指令,执行判断所述第一操作指令是否属于所述指定指令的步骤;
如果不属于所述可操作指令,拒绝执行所述第一操作指令。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收来自所述指定用户的第三操作指令;其中,所述第三操作指令用于查询所述数据库实例的运行模式;
向所述指定用户返回所述数据库实例的运行模式。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收来自所述指定用户的第四操作指令;其中,所述第四操作指令用于指示:设置数据库实例的运行模式;所述运行模式包括所述指定模式和正常模式;在所述正常模式中,对除所述指定用户以外的用户,解禁用所述指定指令;
执行所述第四操作指令,以设置所述数据库实例的运行模式。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
接收来自所述指定用户的第五操作指令;其中,所述第五操作指令用于指示:更新所述指定用户;
执行所述第五操作指令,以更新所述指定用户;
保存更新后的所述指定用户。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
如果接收到用于删除目标用户的第六操作指令,判断所述目标用户是否属于所述指定用户;
如果所述目标用户属于所述指定用户,判断发送所述第六操作指令的用户是否属于所述指定用户;
如果发送所述第六操作指令的用户属于所述指定用户,执行所述第六操作指令,以删除所述目标用户;如果发送所述第六操作指令的用户不属于所述指定用户,拒绝执行所述第六操作指令。
10.根据权利要求1所述的方法,其特征在于,所述方法还包括:
如果接收到用于删除所述数据库实例中全部用户的第七操作指令,判断发送所述第七操作指令的用户是否属于所述指定用户;
如果发送所述第七操作指令的用户属于所述指定用户,执行所述第七操作指令,以删除所述数据库实例中全部用户;如果发送所述第七操作指令的用户不属于所述指定用户,拒绝执行所述第七操作指令。
11.一种对MongoDB数据库的操作装置,其特征在于,所述装置设置于运行数据库实例的服务器,所述装置包括:
第一判断模块,用于当数据库实例运行在指定模式时,如果接收到第一操作指令,判断发送所述第一操作指令的当前用户是否是预设的指定用户;其中,在所述指定模式中,除所述指定用户以外的用户,被禁用预设的指定指令;
第二判断模块,用于如果所述当前用户不是所述指定用户,判断所述第一操作指令是否属于所述指定指令;如果所述第一操作指令属于所述指定指令,拒绝执行所述第一操作指令。
12.一种服务器,其特征在于,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的机器可执行指令,所述处理器执行所述机器可执行指令以实现权利要求1-10任一项所述的对MongoDB数据库的操作方法。
13.一种机器可读存储介质,其特征在于,该机器可读存储介质存储有机器可执行指令,该机器可执行指令在被处理器调用和执行时,机器可执行指令促使处理器实现权利要求1-10任一项所述的对MongoDB数据库的操作方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010205149.9A CN111414423B (zh) | 2020-03-20 | 2020-03-20 | 对MongoDB数据库的操作方法、装置和服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010205149.9A CN111414423B (zh) | 2020-03-20 | 2020-03-20 | 对MongoDB数据库的操作方法、装置和服务器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111414423A true CN111414423A (zh) | 2020-07-14 |
CN111414423B CN111414423B (zh) | 2023-07-25 |
Family
ID=71491371
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010205149.9A Active CN111414423B (zh) | 2020-03-20 | 2020-03-20 | 对MongoDB数据库的操作方法、装置和服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111414423B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113591126A (zh) * | 2021-08-12 | 2021-11-02 | 北京滴普科技有限公司 | 一种数据权限处理方法及计算机可读存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103067463A (zh) * | 2012-12-19 | 2013-04-24 | 新浪网技术(中国)有限公司 | 用户root权限集中管理系统和管理方法 |
CN105117660A (zh) * | 2015-08-04 | 2015-12-02 | 杭州朗和科技有限公司 | 一种数据库系统启动方法和设备 |
CN106503501A (zh) * | 2016-09-30 | 2017-03-15 | 维沃移动通信有限公司 | 一种用户模式的启动方法和移动终端 |
CN107786551A (zh) * | 2017-10-18 | 2018-03-09 | 广东神马搜索科技有限公司 | 访问内网服务器的方法及控制访问内网服务器的装置 |
CN109409119A (zh) * | 2017-08-17 | 2019-03-01 | 北京京东尚科信息技术有限公司 | 数据操作方法和装置 |
US10430605B1 (en) * | 2018-11-29 | 2019-10-01 | LeapYear Technologies, Inc. | Differentially private database permissions system |
-
2020
- 2020-03-20 CN CN202010205149.9A patent/CN111414423B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103067463A (zh) * | 2012-12-19 | 2013-04-24 | 新浪网技术(中国)有限公司 | 用户root权限集中管理系统和管理方法 |
CN105117660A (zh) * | 2015-08-04 | 2015-12-02 | 杭州朗和科技有限公司 | 一种数据库系统启动方法和设备 |
CN106503501A (zh) * | 2016-09-30 | 2017-03-15 | 维沃移动通信有限公司 | 一种用户模式的启动方法和移动终端 |
CN109409119A (zh) * | 2017-08-17 | 2019-03-01 | 北京京东尚科信息技术有限公司 | 数据操作方法和装置 |
CN107786551A (zh) * | 2017-10-18 | 2018-03-09 | 广东神马搜索科技有限公司 | 访问内网服务器的方法及控制访问内网服务器的装置 |
US10430605B1 (en) * | 2018-11-29 | 2019-10-01 | LeapYear Technologies, Inc. | Differentially private database permissions system |
Non-Patent Citations (1)
Title |
---|
蔡长征;曹士玲;: "基于SQL Server数据库安全机制研究" * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113591126A (zh) * | 2021-08-12 | 2021-11-02 | 北京滴普科技有限公司 | 一种数据权限处理方法及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111414423B (zh) | 2023-07-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
AU2015244192B2 (en) | Device policy manager | |
CN109889517B (zh) | 数据处理方法、权限数据集创建方法、装置及电子设备 | |
CN111556005A (zh) | 权限管理方法、装置、电子设备及存储介质 | |
EP4053721A1 (en) | Device for preventing and blocking posting of harmful content | |
KR102213460B1 (ko) | 머신러닝을 이용한 소프트웨어 화이트리스트 생성 시스템 및 방법 | |
CN114239009A (zh) | 权限控制方法、装置及终端设备 | |
CN111414423B (zh) | 对MongoDB数据库的操作方法、装置和服务器 | |
CN115238247A (zh) | 基于零信任数据访问控制系统的数据处理方法 | |
CN111464487A (zh) | 访问控制方法、装置及系统 | |
CN113612802B (zh) | 一种访问控制方法、装置、设备及可读存储介质 | |
CN114417282A (zh) | 一种用户权限确定方法、装置、电子设备及存储介质 | |
CN111324799A (zh) | 搜索请求的处理方法及装置 | |
CN114115933A (zh) | 软件升级的方法、系统、装置、电子设备及介质 | |
US11647054B2 (en) | System for and method of determining data connections between software applications | |
CN111783121B (zh) | 数据处理方法、装置、设备及存储介质 | |
CN113590264A (zh) | 一种容器环境下的文件防篡改方法及装置 | |
CN109299613B (zh) | 数据库分区权限的设置方法和终端设备 | |
CN110941599A (zh) | 一种权限控制方法、装置及电子设备和存储介质 | |
JP2020038690A (ja) | 情報処理装置、情報処理システム、制御方法、及びプログラム | |
CN111416832B (zh) | 一种文件更新方法、装置、电子设备和可读存储介质 | |
CN111611555B (zh) | 物理层授权、访问方法及装置 | |
CN110971741A (zh) | 锁屏密码的管理方法、管理装置及终端 | |
CN114116042B (zh) | 一种面向Linux服务系统的命令处理方法及系统 | |
CN110209359B (zh) | 系统存储空间的管理方法、装置及服务器 | |
JP6500955B2 (ja) | 情報処理システム、その制御方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |