数据库基础

0x00 什么是关系型数据库和非关系型数据库,两者都包含哪些种类的数据库?

1.关系型数据库

关系型数据库(RDBMS),是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。

自己理解下要点:RDBMS指二维表及其之间关系,二维表由行和列构成,行为元组,列为字段。

注重ACID原则:(即:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)),可以满足对事务性要求较高或者需要进行复杂数据查询的数据操作,而且可以充分满足数据库操作的高性能和操作稳定性的要求。并且关系型数据库十分强调数据的强一致性,对于事务的操作有很好的支持。关系型数据库可以控制事务原子性细粒度,并且一旦操作有误或者有需要,可以马上回滚事务。

常见的有Oracle,SQL Server,MySQL,Access,DB2,PostgreSQL

2.非关系型数据库

非关系型数据库又被称为NoSQL(Not Only SQL ),意为不仅仅是SQL( Structured QueryLanguage,结构化查询语言),据*介绍,NoSQL最早出现于1998 年,是由Carlo Storzzi最早开发的个轻量、开源、不兼容SQL 功能的关系型数据库,2009 年,在一次分布式开源数据库的讨论会上,再次提出了NoSQL 的概念,此时NoSQL主要是指非关系型、分布式、不提供ACID (数据库事务处理的四个基本要素)的数据库设计模式。同年,在亚特兰大举行的“NoSQL(east)”讨论会上,对NoSQL 最普遍的定义是“非关联型的”,强调Key-Value 存储和文档数据库的优点**,而不是单纯地反对RDBMS,至此,NoSQL 开始正式出现在世人面前。

自己理解下:不仅仅是sql,强调key-value而非关系型,分布式的,可以看成关系型的阉割版。其实是相对于关系型数据库而言的,我们都知道关系型数据库通常都是处理一些结构化的数据,这些数据通常都是有某些对应关系; 而非关系型数据库(NoSQL)通常用于存储那些类型不固定的,也没有什么规律的数据。

常见的非关系型数据库有Redis, Amazon DynamoDB, Memcached, Microsoft Azure Cosmos DB和Hazelcast

0x01 选择MySQL RDBMS进行学习

1.MySQL简介

是web应用方面最好的RDBMS应用软件之一。此外,你也可以使用 MariaDB 代替,MariaDB 数据库管理系统是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可。开发这个分支的原因之一是:甲骨文公司收购了 MySQL 后,有将 MySQL 闭源的潜在风险,因此社区采用分支的方式来避开这个风险。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。

2.MySQL字段类型

数值类型

MySQL支持所有标准SQL数值数据类型。这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

数据库基础

日期和数据类型

表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。TIMESTAMP类型有专有的自动更新特性,将在后面描述。

数据库基础

数据库基础

3.增删改查命令学习

以下为创建及删除数据库,创建及删除表格,增删改查数据等基本命令操作。

 1 [root@localhost ~]# mysql -u root -p     //连接数据库
 2 Enter password:
 3 Welcome to the MariaDB monitor.  Commands end with ; or \g.
 4 Your MariaDB connection id is 11
 5 Server version: 5.5.65-MariaDB MariaDB Server
 6 
 7 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
 8 
 9 Type help; or \h for help. Type \c to clear the current input statement.
10 
11 MariaDB [(none)]> show databases;     //显示所有数据库
12 +--------------------+
13 | Database           |
14 +--------------------+
15 | information_schema |
16 | mysql              |
17 | performance_schema |
18 | test               |
19 +--------------------+
20 4 rows in set (0.00 sec)
21 
22 MariaDB [(none)]> create database xazl;    //创建数据库xazl
23 Query OK, 1 row affected (0.00 sec) 
24 
25 MariaDB [(none)]> use xazl;     //使用切换数据库xazl
26 Database changed
27 MariaDB [xazl]> create table xazla(id int,name varchar(10));     //创建表格
28 Query OK, 0 rows affected (0.00 sec)
29 
30 MariaDB [xazl]> insert into xazla (id,name)values(1,tom);       //像表格插入数据
31 Query OK, 1 row affected (0.00 sec)
32 
33 MariaDB [xazl]> insert into xazla (id,name)values(22,jack);
34 Query OK, 1 row affected (0.00 sec)
35 
36 MariaDB [xazl]> select * from xazla;
37 +------+------+
38 | id   | name |
39 +------+------+
40 |    1 | tom  |
41 |   22 | jack |
42 +------+------+
43 2 rows in set (0.00 sec)
44 
45 MariaDB [xazl]> update xazla set name=bob where id=222;     //更新xazla表格id为222的name字段
46 Query OK, 0 rows affected (0.00 sec)
47 Rows matched: 0  Changed: 0  Warnings: 0
48 
49 MariaDB [xazl]> select name from xazla where id=1;           //查看id为1d的记录名字
50 +------+
51 | name |
52 +------+
53 | tom  |
54 +------+
55 1 row in set (0.00 sec)
56 
57 
58 MariaDB [xazl]> delete from xazla where id=22;                //删除id为22的记录
59 Query OK, 1 row affected (0.00 sec)
60 
61 MariaDB [xazl]> select * from xazla;                                        //查看表格内容
62 +------+------+
63 | id   | name |
64 +------+------+
65 |    1 | tom  |
66 +------+------+
67 1 row in set (0.00 sec)
68 
69 MariaDB [xazl]> drop table xazla;            //删除数据表
70 Query OK, 0 rows affected (0.00 sec)
71 
72 MariaDB [xazl]> drop database xazl;                                         //删除数据库
73 Query OK, 0 rows affected (0.00 sec)
74 
75 MariaDB [(none)]> show databases;                                         //显示数据库
76 +--------------------+
77 | Database           |
78 +--------------------+
79 | information_schema |
80 | mysql              |
81 | performance_schema |
82 | test               |
83 +--------------------+
84 4 rows in set (0.01 sec)

0x02熟悉MySQL默认所带的数据库及表

默认四个数据库:information_schema、performance_schema、mysql、test


数据库基础

information_schema

保存了MySQL所有数据库的信息,具体有多少个数据库,每个数据库有多少表格,每个表格中的字段是什么数据类型,各个表中有哪些引擎,各个数据库要什么权限才能有访问。

数据库基础

performance_schema

主要记录数据库服务器性能参数,提供进程等地的详细信息,包括锁、互斥变量、文件信息;保存历史时间汇总信息,为提供MySQL服务器性能做出详细判断;对于新增和删除监控事件点都非常容易,并可以随意改变mysql服务器的监控周期,例如(CYCLE、MICROSECOND)。

数据库基础

mysql

保存MySQL的权限、参数、对象和状态信息,如哪些user可以访问这个数据、DB参数、插件、主从。

数据库基础

test

没有东西。

数据库基础

0x03hashcat学习

hashcat 只支持CU破解 oclhashcat-plus GPU 同时破解多个hash,算法77种 oclhashcat-lite GPU 破解单个hash 算法32 速度快

常用命令:

 1 -m指定哈希类型
 2 
 3 -a   指定攻击模式,有5中模式
 4 
 5       0 Straight(字典破解)
 6 
 7       1 Combination(组合破解)
 8 
 9       3 Brute-force(掩码暴力破解)
10 
11       6 Hybrid dict + mask(混合字典+掩码)
12 
13       7 Hybrid mask + dict(混合掩码+字典)
14 
15 -o   输出文件
16 
17 -stdout  指定基础文件
18 
19 -r  指定规则文件
20 
21 -V   打印出版本
22 
23 -h   查看帮助

使用hashcat破解之前安装mysql的sha1密码

数据库基础

去除*后,加密后为81F5E21E35407D884A6CD4A731AEBFB6AF209E1B

数据库基础

解密后为Aazz2020 hashcat密码种类众多,需要多多钻研,多用,才能顺手点,以前都用hydra。

0x04选择Redis NoSQL进行学习

1.Redis简介

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string、list、set、zset和hash。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步

2.Redis常用命令

 

 1  set key "value"                                    # 设置键key的值为字符串value
 2       get key                                           # 获取键key的内容
 3       SET score 857                                # 设置键score的值为857
 4       INCR score                                    # 使用INCR命令将score的值增加1
 5       GET score                                      # 获取键score的内容
 6       keys *                                             # 列出当前数据库中所有的键
 7       config set protected-mode no        # 关闭安全模式
 8       get anotherkey                             # 获取一个不存在的键的值
 9       config set dir /root/redis               # 设置保存目录
10       config set dbfilename redis.rdb     # 设置保存文件名
11       config get dir                                # 查看保存目录
12       config get dbfilename                  # 查看保存文件名
13       save                                             # 进行一次备份操作
14       flushall                                        # 删除所有数据
15       del key                                        # 删除键为key的数据
16       slaveof ip port                              # 设置主从关系
17       redis-cli -h ip -p 6379 -a passwd   # 外部连接

3.Redis基础操作

a.使用SET和GET命令,可以完成基本的赋值和取值操作;

b.Redis是不区分命令的大小写的,set和SET是同一个意思;

c.使用keys *可以列出当前数据库中的所有键;

d.当尝试获取一个不存在的键的值时,Redis会返回空,即(nil);

e.如果键的值中有空格,需要使用双引号括起来,如"Hello World";

 

 

数据库基础

上一篇:Centos各版本Mysql二进制安装


下一篇:[Linux] crontab和shell每天定时备份数据库