数据库理论及增删改查

常见数据库默认端口:

1、Mysql和MariaDB(关系型数据库:3306)

2、PostgreSQL(强大的开源关系型数据库,其默认端口号是5432)

3、MongoDB(文档数据库,非常适合非关系型数据。其默认端口号是27017)

4、SQLite(嵌入式数据库引擎,它并不像其他数据库那样运行在特定的端口上。相反,SQLite数据库文件通常在设备或应用程序中直接访问。)

5、Oracle Database(企业级关系型数据库,其默认端口号根据版本和安装配置可能会有所不同。一般来说,Oracle的默认监听端口是1521,但可能需要根据具体情况进行更改。)

6、Microsoft SQL Server(微软开发的关系型数据库系统,其默认端口号也是动态的,通常由安装配置指定。在默认情况下,SQL Server使用动态端口1433进行监听。)

 

关系型数据库和非关系型数据库的区别:

关系型数据库:1.数据存储结构:二维表结构  2.查询能力:支持复杂查询  3.数据一致性:强一致性ACID使得对于安全性

非关系型数据库:

 

安装数据库:(模拟的真机实在没网的情况下使用rpm安装方式,有网的情况下可以使用yum的方式)

1、卸载maridb
·般情况下centos 完全安装,则会自带mariac交装 mysql需要先卸载mariadb

rpm -qa | grep mariadb :查询是否安装了mariadb
rpm -e --nodeps mariadb-libs-5.5.60-1.e17_5.x86_64:卸载 mariadb

2、按顺序安装4个包(因为有依赖)

rpm -ivh mysql-community-common-5.7.30-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-5.7.30-1.el7.x86_64.rpm

rpm -ivh mysql-community-client-5.7.30-1.el7.x86_64.rpm

rpm -ivh mysql-community-server-5.7.30-1.el7.x86_64.rpm

3、数据初始化及修改密码

mysqld --initialize --user=mysql (- -user=可以新起一个名称)
grep password /var/log/mysqld.log  (获取初始化密码,需要尽快使用,它只有360s时间)

systemctl start mysqld  (启动mysql)

mysql -u xxx -p(进入mysql)

Alter user user() identified by 'password';   (修改密码)

show databases;                   (查看数据库)

修改密码2:在终端即可修改:mysqladmin -u xxx -p password (按照提示输入旧的密码新的密码即可)

注:mysql的配置文件在:/etc/my.cnf

datadir=/var/lib/mysql             # 数据存放的位置

netstat -ano | grep 3306        # 查看数据库进程,是否启动

systemctl status mysqld          # 判断数据库是否启动

 

mysql远程连接

判断是否安装了mysql数据库:

rpm -qa | grep mysql                   # 查看安装的数据库

ps -ef | grep mysqld     /            ps aux | grep mysqld        pidof mysqld       # 查看mysql的进程

 

select user,host from  user;      (%表示在任何地方都可以登录)

更改权限:update user set host='localhost' where user='root'; (将host权限更改为localhost。localhost可以更改成为IP)

赋予权限:grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;

(grant all privileges on是user:root host:%赋予所有权限,*.*对于所有库所有表。identified by密码123456。grant option允许赋予别人权限的能力)

权限刷新:fulsh privileges

防火墙放行3306端口才能远程连接:firewall-cmd --llist-all 查看规则,firewall-cmd --zone=public --add-port=3306/tcp.但是只要我们service firewalld restart重启防火墙,规则将刷新,需要加 --permanent永久打开。可以关闭防火墙systemctl disable firewalld 但是不安全的

注:在不显示IP的情况下,我们可以cd  /etc/sysconfig/network-scripts/

vi ifcfg-ens33  #编辑一下网卡设置

将ONBOOT修改为yes

 

service network restart 重启一下网卡

1、数据库状态

 

 2、mysql中常用的命令

看mysql版本号:Mysql中,select version() from dual;

看数据库:show datebases;

使用数据库:use mysql

 

3、获得mysql元数据命令

show variables like 'port'          # 看配置文件中的文件变量的值

show variables like '%secur%'

 

 4、快捷命令

select * from mysql.user where user='root' \G;                # 格式化显示内容

 5、mysqladmin常用命令

 mysqladmin -uroot -p123456 variables | grep port      # 正则表达grep筛选

 

1、Mysql中用户是如何定义的

例:user@10.0.0.51

creat use

 dbo1(域名)

2、Mysql权限级别介绍

 procs_priv 进程的权限

3、用户查看

 

 (3)查看用户权限赋予情况

show grants for root@'%'

4、用户创建

creat user test1@'%' indentified ny 'password';

creat user test2@'localhost' indentified by 'paaaword';

creat user test2@'IP' indentified by 'paaaword';

creat user test2@'DNS域名' indentified by 'paaaword';

查看指定用户的权限:select * from mysql.user where user='test1' \G;

5、用户删除

drop user username;

username:是要删除的用户名字

如:drop user test@‘%’

drop user ‘’@‘127.0.0.1’   用户为空的删除

6、用户授权

(1)赋权语句


grant all privileges on databasesname.tablesname to 'username'@'host' with grant option identified by 'password'

例如:grant all privileges on *.* to 'test1'@'%' identified by '123456' with grant options;

 (2) 部分赋权举例

单库赋权:

creat database test1;

use test1;

creat table aaa(cmd text)

creat table bbb(cmd text)

grant all privileges on test1.* to 'test1'@'%' identified by '123' with grant option;

 

单表赋权:

grant all privileges on test1.aaa to 'test1'@'%' identified by '123' with grant option;

 

字段赋权:

MySQL单列级别的授权,这样做的话,我们是连表都是打不开的,只能通过查询语句,查对我们开放的字段:

grant select(user) on mysql.user to 'test3'@'%' identified by '123';

select @ from tables_priv;

select user();

 

7、收回用户的权限

revoke 【权限】ON 【库,表】 FROM 【用户名】@【主机】;

 

-- 查看用户

select user,host from user

 

 

 

Mysql数据库读取外部文件方法(渗透测试专用)

mysql数据库在渗透过程中能够使用的功能还是比较多的,除了读取数据库数据之外,还可以进行对数据库外部文件进行读写(但前提是权限足够)

mysql在不同版本读取文件方法大致有这3个:

1.load_file()

2.load data infile()

3.system cat

load_file和load data infile 读取文件的方法为:新建一个表,读取文件为字符串形式插入表中,然后读出表中数据。

但是通常情况下有两个前提:

1.在拥有file权限的前提下

2. secure_file_priv 不为NULL

secure_file_priv 的值课在这里查看:

show variables like '%secur%';(下图显示的为只能读取/var/lib/mysql-files/的文件)

 二、读取文件前提实现

可以通过一下方式修改:

修改mysql.cnf 文件,

在[mysqld] 下添加条目:secure_file_priv=

在[mysqld] 下添加 local-infile=1 选项

在[mysql] 下也添加 local-infile=1

echo ‘123’>1.txt

保存之后,关闭selinix:setenforce 0

注:设置完成之后重启:service restart mysqld.service

三、load_file()方式读取文件实现

insert into 插入 aaa(cmd) 表 values(值)

 

四、load data infile 方式实现文件读取

 提前创建一个bbb的表:creat table bbb(cmd text);

 五、system命令的方式读取文件

 

 数据库理论:

   2、范式理论

 

 

 

二、创建数据库

 查看环境变量是否符合情况 :show variables like '%lower%';

 creat databases if not exists ddd     # 如何不存在ddd数据库则会创建数据库,如果存在就会不创建

 -- 创建学生信息表

‘sid’学号

UNSIGNED(无符号,因为学号是没有负数的)

PRIMARY key(设置为主键)

auto_increment(自增,在前面的整形的情况下自动增1....)

'sname' 姓名

varchar(20)  (可变的字符串)

'age' int (不指定长度,使用默认的长度)

'sex'   (性别)

使用枚举 enum('m','f')

 

-- 创建课程表

UNSIGNED(无符号,因为学号是没有负数的)  unsigned

PRIMARY key(设置为主键)                              primary key

auto_increment(自增,在前面的整形的情况下自动增1....)

 

-- 创建成绩表

UNSIGNED(无符号,因为学号是没有负数的)  unsigned

PRIMARY key(设置为主键)                              primary key

PRIMARY key(sid,cid)       # 定义两个字段sid,cid为外键

/* 外键是出现在其他表里的主键扮演的 */

FOREIGN KEY(sid)               # 外键 foreign key

REFERENCES                          # 哪个主键的名字

DELETE CASCADE on UPDATE CASCADE                 # 根据主键删除而删除,更新而更新

ENGINE=INNODB DEFAULT CHARSET=utf8                 #设置数据库默认规则

 

 删除表:

删除表遵从先删除外键表

 

 -- 查看表结构

 

-- 增加一个字段

comment (备注)

 

-- 删除一个字段

 

 -- 修改字段名

 

 -- 修改字段属性

modify

 

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

insert into  (增加)

 birth

 

-- 增加课程信息(course课程信息)

 mysql可以默认自增     sqlserver则不可以

 

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

(1,1,100)   #第1个学生,选第1门课程,成绩为100

 

-- 删除一个学生
伴随的成绩等信息都会被删除

 

 

-- 删除一个表

/*删除的是表内的信息*/

删除表名:drop table tablename

 再次增加信息时注意 sid值。

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

update stuinfo   修改stuinfo表的信息

 

 -- 查询所有姓名为‘张’开头的信息

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

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

 -- 查询邮箱为空的信息

 

3、 union查询

 

-- union 查询
 先自建一个表

插入数据

 再建一个表

 temp2插入值

 

 -- union联和查询 (显示的是temp1表的列)

select *from templ union select 1,2; (1,2需和列数相同的两个字段数)

 

2、分组查询

sid (学号)

cid (课程号)

desc (降序排序)

cj (成绩)

SEPARATOR(用什么方法分割)

GROUP BY sid  (使用sid分组)

 

3、字符串函数 (可用于盲注)

 -- 字符串函数

 

4、Mysql数据库导入导出 (因为安全问题,该功能官网已经封闭)

 需要“secure_file_priv” 需要时开启的条件  (secure_file_priv这个权限很重要)

into outfile  #导出文件

load data local infile   #导入文件

 

5、导出、出表、出库、导入

-- “<”  导入

 -- source 导入

 

posted @ 2024-03-25 20:05  Aidy  阅读(46)  评论(0)    收藏  举报