网络安全练气篇——SQL基础

一、数据库管理系统

(一)数据库管理系统介绍

DBMS是由数据库及其管理软件组成的系统。

目前市场上常见的Mysql数据库管理系统

  • 所以,目前数据库管理系统有关系型数据库管理系统和非关系型数据库管理系统
  • 关系型数据库和非关系型数据库在使用场景上差别比较大,所以并不存在熟强熟弱,只有结合自身的业务特点才能发挥出这两类数据库的优势

(二)关系型数据库管理系统

  • Oracle SQL - Server MySQL
  • Maria DB Access Sqlite

1.数据存储结构:

  • 二维表结构

2.查询能力

  • 支持复杂查询

3.数据一致性

  • 强一致性ACID使得对于安全性能有很高的数据访问要求得以实现。

4.高价值

(三)非关系型数据库管理系统

MongoDB redis HBASE

1.数据存储结构:

  • 一种数据结构化存储方法的集合,可以是文档或者是键值对等。

2.查询能力

  • 复杂查询欠缺

3.扩展性好

4.无事物处理的概念

5.高扩展性

6.低成本性(大部分低成本就意味着开源的)

关系型数据库VS非关系型数据库

1.不是否定关系型数据库,而是做关系型数据库的补充。 2.想做老大,先学会做老二

二、Mysql数据库简介

(1)数据库基本介绍

1.看排名 DB-Engines Ranking - popularity ranking of database management systems

2.看企业使用情况

3.版本选择

mysql的版本选择

1.稳定版本发行6-12个月以内的

2.小版本 偶数版本,奇数版本不选是测试开发版本

所以我们选择5.7.30 57要选择5.7.17版本以上因为有MVV

4、安装及远程连接

(2)数据库基本命令操作

5、mysql的基本操作

(一)创建命令

--创建学生数据库

复制代码
create database if not EXISTs student;

使用数据库

复制代码
use student;

展示所有的表格

复制代码
show tables;

创建学生信息表

复制代码
-- 杠杠空格代表mysql中的注释效果
复制代码
create table if not EXISTS `stuinfo`(
    `sid` int(11) UNSIGNED KEY auto_increment,
    -- auto_increment 自动填充学号
    `sname` varchar(20) not null,
    `age`  int,
    `sex` enum('m','f') DEFAULT 'm',
    `birth` datetime not null,
    `email` varchar(50),
    `addr` VARCHAR(50),
    `tel` 
)

然后选中创建学生信息表的代码,运行。 信息框里面弹出OK,就代表创建成功了!

接下来我们接着创建一个课程表

复制代码
create table course(
    cid int(11) UNSIENED primary key auto_increment,
    cname varchar(20) not null
)

创建成绩表

复制代码
create table score(
    sid int(11) UNSIGNED not null,
    cid int(11) UNSIGNED not null,
    cj int(11) uUNSIGNED not null,
    PRIMARY key(sid,cid),
    FOREIGN KEY(sid) REFERENCES stuinfo(sid) on DELETE
    CASCADE on UPDATE CASCADE,
    -- on DELETE CASCADE on UPDATE CASCADE 级联删除效果
    FOREIGN KEY(cid) REFERENCES course(cid) on DELETE
    CASCADE on UPDATE CASCADE,
)ENGINE=INNODB DEFAULT CHARSET=utf8
-- ENGINE=INNODB DEFAULT CHARSET=utf8  选择引擎和字符集
(二)删除命令

删除表的操作

复制代码
drop table stuinfo;
drop table course;
drop score;
-- 删除第一个表的时候,你会发现删除不了,这是因为我们不能随意删除一个带有主外键关系的主键表,要先删除外键表score;然后再删除第一个表stuinfo,就可以了

删除数据库的操作

复制代码
drop database student;

修改表的结构

增加一个字段

复制代码
alter table stuinfo add beizhu varchar(50) comment '备注';

-- 删除一个字段

复制代码
alter table stuinfo drop beizhu
(三)修改命令

-- 修改字段名

复制代码
alter table stuinfo change beizhu bz varchar(50) 

--修改字段属性

复制代码
alter table stuinfo modify bz   varchar(200);
(四)增加命令

---增加记录(学生信息)

---增加stuinfo(学生信息)

复制代码
insert into stuinfo (sname,age,sex,birth,email,addr,tel,bz)
value('zhangsan,20,'m','1996-1-1','zhangsan@abc.com','上海','13900000000','学NISP一级')

查询一下数据是否存在

复制代码
select * from stuinfo;

然后再造一个轮子

---增加记录(学生信息)

---增加stuinfo(学生信息)

复制代码
insert into stuinfo (sname,age,sex,birth,email,addr,tel,bz)
value('lisi,20,'m','1996-1-1','lisi@abc.com','上海','13900000000','学NISP一级')

增加course(课程信息)

我们可以直接新增加4条

复制代码
insert into course values(1,'NISP一级'),(2,'NISP二级'),(3,'CISP'),(4,'NISP-PTE');

查询一下课程表

复制代码
select * from course;

新增一条数据

复制代码
insert into course(cname) values('NISP-运营');

-----增加score(成绩信息)

复制代码
select  * from score;

插入成绩信息

复制代码
insert into score values(1,1,100),(1,2,30),(1,3,89),(1,4,78),(2,1,90),(2,3,67),(2,4,56),(3,5,100);

这里会报错的原因在于我们只有两条数据,只有两个对象,没有第三个对象,所以不能增加(3,5,100)这条记录

删除一个学生

复制代码
delete from stuinfo where sid =1;

--删除一个表

复制代码
delete  from stuinfo

---修改记录(学生记录)

复制代码
update  stuinfo  set   sname='张三' where sname='zhangsan';
(五)查询命令

---查询

---查询所有姓名为张开始的学生信息

复制代码
select  * from stuinfo where sname like '张%';

---查询年龄为20以上的学生信息

复制代码
select * from stuinfo  where age>=20;

---查询家住在上海或者北京的学生信息

复制代码
select  *  from   stuinfo  where add ='上海' or addr='北京';
复制代码
select * from  stuinfo  where  addr  in('上海','北京');

---没有留下邮箱的人

复制代码
select * from stuinfo  where  email  is  null;
总结

一、建库建表

二、表中增改删字段

三、表中插入记录

四、表中修改记录、删除记录

五、简单查询

三、安全值守数据库常用语句

1、用户权限设置
--Mysql中用户是如何定义的

用户名@主机域

10.0.0.51

10.0.0.%

%

10.0.0.0/255.255.255.0

Db01

Localhost

127.0.0.1

---用户创建
  • create user xinjing@'%'identified by '123';
---用户删除
  • drop user username;
  • username: 是要删除的用户名
  • 如 drop user root@'%'
  • Drop user ''@'127.0.0.1' 用户名为空的删除
----用户查询

------查询所有用户

复制代码
use  mysql ;
​
select user, host from user;    
​
------create user xinjing@'%'  IDENTIFIED by '123';
-------权限级别介绍

全局------可以管理整个MySQL

库------可以管理指定的数据库

表------可以管理指定数据库的指定表

字段------可以管理指定的数据库的指定表的指定字段、权限存储在mysql库的user,db,tables_priv,columns_priv,procs_priv

这几个系统表中的,待MySQL实例启动后就加载到内存中

------查看用户权限赋予情况

复制代码
show grants for xinjing@'%';

-------用户授权

以下第一条的作用是给用户'xinjing'@'%'授予所有权限并且也可以更改其他用户的权限,前提是用户'xinjing'@'%'要输入密码123

复制代码
------查看用授权情况
grant all privileges on stu .* to 'xinjing'@'%'identified by '123' with option;
复制代码
-------回收用户的授权
revoke all privileges on stu.*from 'xinjing'@'%';
2、元数据查询
复制代码
Select  version();      //服务器版本信息
​
Select database();    //当前数据库名
​
Selecet  user();        //当前用户名
​
Show staus;             //服务器状态
​
Show variables;     //服务器配置变量
​
Show  global variables like '%datadir%':  //看数据文件存放位置
​
select @@datadir;               //查询数据库的路径
​
select @@basedir;               //查询mysql的安装路径
3、union查询详解
  • union 查询就是把2条或者多条sql语句的查询结果,合并成一个结果集。sql:N行,sql2:M行,sql1 union sql2 ---->N+M行
  • 要求结果集中的列数一直就可以。(如都是2列或者N列)
  • union取出额最终列名,以第1条sql为准(这个适用我们去爆库)
  • union查询默认会去重,如果不想去重就用union all

------union查询

复制代码
use  student;
 create table  temp1(
    uid  int PRIMARY key auto_increment,
     uname  varchar(20)  not null
)
​
​
insert into temp1(uname)   values('zs'),('ls'),('ll');
​
create table temp2(
    eid  int PRIMARY key auto_increment,
    age  int not null
)
​
insert into temp1(age)  values(11),(19),(20);
select * from temp1;
select * from temp2;
select * from temp1 union select * from temp2;
select * from temp1 union select 1,2;
​
4、分组查询展示

GROUP_COUNT()

复制代码
select  sid,group_concat(cid),group_concat(cj order by cj desc SEPARATOR' ') from score  group by  sid
5、字符串函数

具体如下图

复制代码
————字符串函数
select lower("ABcd");
select upper("abcd");
select concat('abc','123');
select concat_ws(':','abc','123');
select substr('hello',2,2);
select length('hello');
select char_length("hello");
6、mysql数据库导入导出
复制代码
——表数据(记录)导入导出
——导出为txt文件
select *from demo1 into outfile '/temp/utemp1data.txt';
use student;
show VARIABLES like "secure_file_priv";
——导入txt文件
load data local infile '/root/utemp1data.txt' into table temp;
----mysql dump 导出
————dump  出表utemp1
mysqldump  -uroot -p student  utemp1>utemp1.sql
——dump 出库student
——mysqldump  -uroot -p student>student.sql
——dump 所有的数据库级数据库表
——mysqldump  -u root -p  --all-databases>mysqldatabases,sql;
​
——mysql的数据库"<"
——新建一个数据库
create  database  dumpdemo1
——回到mysql接口
——把新建的数据库dumpdemo1装进student.sql里面
——mysql -u root -p654321 dumpdemo1<student.sql
——进入mysql验证
use dumpdemo1
show tables;
——mysql的数据库导入"source"
mysql -u root -p
create database soursedumpdemo;
source /var/lib/mysql-files/student.sql
​
——进入cmd命令,然后输入密码,最后通过dir查看文件
mysqldump -u root -p  student>student.sql
type  temp1.sql以文本形式展开sql内容
​

四、数据库漏扫工具scuba介绍

Scuba是一款数据库扫描软件

扫描数据库漏洞,寻找不安全的因素,提升数据库安全等级,及时解决漏洞问题;

支持Oracle,SQL Server,SAP Sybase,IBM DB2和MySQL等数据库

本地需要安装有jdk和mysql-connector-java-5.1.44-bin.jar即可

java -version

scuba软件安装百度网盘链接

链接:https://pan.baidu.com/s/1PDNCeFsEu3yVanNkEW50WA 提取码:ifu8

第一步:

下载上述链接后,将压缩包解压到相对应的一个磁盘目录下

第二步:

点击Scuba这个文件启动软件,输入密码,然后再点击GO!

最后:

会在浏览器中打开这个界面,它就会生成一个数据库漏洞扫描报告

相关推荐
java66666888816 分钟前
深入理解Spring Boot中的配置加载顺序
java·spring boot·后端
春山之外20 分钟前
基于IIS的Windows系统Django项目本地部署
后端·python·django·iis·服务器部署
醇氧30 分钟前
【postgresql】模式(SCHEMA)
数据库·sql·postgresql
人生匆匆31 分钟前
docker安装elasticesarch-head
运维·docker·jenkins
85程序员老王35 分钟前
Spark SQL----内置函数Array Functions
大数据·分布式·sql·spark·apache
Graceful_scenery39 分钟前
工具指南 - jenkins
运维·jenkins
鞥牧魂人43 分钟前
数据库——事务管理
服务器·数据库·oracle
空青72644 分钟前
ChatGPT在Java后端开发中的应用与影响
java·开发语言·人工智能·后端·神经网络·机器学习·chatgpt
坚持可信1 小时前
网络安全风险评估技术原理与应用
网络·安全·web安全
九河云1 小时前
AWS亚马逊云服务器:强大的云计算服务
服务器·云计算·aws