1
、和
mysql
相关的
shell 命令
启动 mysql systemctl start mysqld
检查 mysql进程 ps -ef | grep mysqld
2
、
mysql
中常用命令
查看mysql 版本号 mysql中, select version()from dual;
查看数据库 show databases;
使用数据库 use mysql
查看表 show tables;
3
、获得
mysql
元数据命令
select version()
;服务器版本信息
select database()
;当前数据库名
select user():
当前用户名
show status;
服务器状态
show variables like ‘’;
服务器配置变量
show global variables like '%datadir%';
:看数据文件存放位置
select @@datadir;
查询数据库的路径
select @@basedir
查询
mysql
的安装路径
4
、快捷命令
\h
或
help
或
?
查看帮助
help create database
\G
格式化查看数据(
key : value
)
\c
(
5.7
可以
ctr1+c
)束命令
\s
或
status
查看状态信息
\.
或
source
导入数据
\u
或
use
切换数据库
\q
或
exit
或
quit
退出
\!
system
执行系统命令 前面敲一个
system
就可以了 比如
system ifconfig
5
、
mysqladmin
常用命令
mysqladmin -uroot -p123456 status
查看状态
mysqladmin -uroot -p123456 ping
查看状态
mysqladmin -uroot -p123456 variables
查看变量
Mysqladmin -uroot -p drop database
删除数据库
Mysqladmin -uroot -p create dadtabse
创建数据库
Mysqladmin -uroot -p password
修改密码
mysqladmin -uroot -p flush-log
刷新日志
mysqladmin -uroot -p reload 刷新缓存
MySql
修改配置文件
1
、了解
mysql
的配置文件
Linux
下安装的
mysql
,配置文件位置
/etc/my.cnf 或者 /etc/mysql/my.cnf
2
、修改端口
(1)编辑
vi /etc/my.cnf
在
[mysqld]
选项下增加
port=12345
(2)关闭 selinuc
setenforce 0
(3)重新启动
mysql
服务
service mysqld restart
(4)查看修改端口
mysqladmin -uroot -p show variables like 'port'
(5)防火墙放行
12345
端口,关闭
3306
端口
firewall-cmd --zone=
public
--
add
-port=
12345
/tcp --permanent
firewall-cmd --permanent --zone=public --remove-port=3306/tcp
(6)防火墙重新启动
Service firewalld restart
重启
systemctl restart firewalld
重启
systemctl disable firewalld
关闭开机启动
MySQL
数据库用户权限管理
1
、
MySQL
中用户是如何定义的
用户名
@
主机域
主机域的样子
10.0.0.51
10.0.0.%
%
10.0.0.0/255.255.255.0
Db01
localhost
127.0.0.1
端口号 0-65535
2
、
MySQL
权限级别介绍
全局——可以管理整个
MySQL
库——可以管理指定的数据库
表——可以管理指定数据库的指定表
字段——可以管理指定数据库的指定表的指定字段、
权限存储在
mysql
库的
user, db, tables_priv, columns_priv, procs_priv
这几个系统表中,待
mysql
实例启动后就加载到内存中
3
、用户查看
(1)
查看所有用户
select user,host from mysql.user;
(2)
查看单个用户所有情况
select * from mysql.user where user = 'root' \G
(3)
查看用户权限赋予情况
show grants for root@'%'
4
、用户创建
create user 用户名@'主机域' identified by '密码';
create user test1@'%' identified by '123';
create user test2@'%' identified by '123';
create user test3@'%' identified by '123';
create user gmf@'%' identified by '123';
5
、用户删除
drop
user username;
username
:是要删除的用户名
如
drop user 用户名1@'主机域'
drop user ' '@'127.0.0.1'
用户名为空的删除
6
、用户授权
(
1
)赋权语句
grant privileges
on databasename.tablename to 'username'@'host' with grant option
identified by ‘password’
例如:
grant all privileges on *.* to ‘xj’@’%’ identified by ‘123’ with grant option;
privileges:
是指赋予哪些数据库的操作权限,如:
insert
、
update
等,全部是
‘all’databasename
:
是指可以操作哪个数据库,全部数据库则是
* . *tablename
:指可对哪些表进行操作
username
:
指给哪个用户授权
Host
:指哪一主机、
GRANT
命令说明:
(1)ALL PRIVILEGES
表示所有权限,你也可以使用
select
、
update
等权限。
(2)ON
用来指定权限针对哪些库和表。
(3)*.*
中前面的号用来指定数据库名,后面的号用来指定表名。
(4)TO
表示将权限赋予某个用户。
(5)@
前面表示用户,
@
后面接限制的主机,可以是
IP
、
IP
段、域名以及
%
,
%
表示任何地方。
(6)IDENTIFIED BY
指定用户的登录密码。
(7)WITH GRANT OPTION
这个选项表示该用户可以将自己拥有的权限授权给别人。
(
2
)部分赋权举例
单数据库赋权
create database test
use test
create table aaa(cmd text)
create table bbb(cmd text)
grant all privileges on test.* to ‘test1’@’%’ identified by ‘123’ with option;
单表赋权
grant all privileges on test.aaa to ‘test2’@’%’ identified by ‘123’ with 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;
--
新建
1
个用户
test4@'localhost'
create user test4@'localhost' identified by '123456';
--
查看
test4
用户权限
select * from user where user='test4';
--
给
test4
赋权限 对所有表的所有权限
,5.7
没有用户给创建一个用户
grant all privileges on test.aaa to 'test4'@'%' identified by '123456';
--
收回权限
revoke
看
table
权限表
revoke all privileges on test.aaa from 'test4'@'%';
select * from tables_priv;
MySQL
几种读取外部文件的方法
一、为什么要在
mysql
数据库中读取外部文
mysql
数据库在渗透过程中能够使用的功能还是比较多的
,
除了读取数据库数据之外,还可以
进行对数据库外部文件进行读写
(
但前提是权限足够
)
mysql
在不同版本读取文件方法大致有这
3
个
:
1.load_file()
2.load data infile()
3.system cat
load_file()和 load data infile 读取文件的方法为:新建一个表,读取文件为字符串形式插入表中,
然后读出表中数据。
但是通常情况下有前提:
1、对外部文件有读的权限
2、secure_file_priv null 什么文件都读不了 默认/var/lib/mysql-files/ 有读取权限
为无 任意读取路径
能够做到任意路径读取 local-infile=1 [mysqld] [mysql]
insert into 表(字段) values(load_file('路径和文件'));
load data infile '路径文件' into table 表名
system cat -----只能本地读
二、读取文件前提实现
修改
mysql.cnf
文件,
在
[mysqld]
下添加条目
: secure_file_priv =
在
[mysqld]
下面添加
local-infile=1
选项
在
[mysql]
下面也添加
local-infile=1
保存,关闭
selinux
setenforce 0
重启
mysql
Service mysqld restart
三、
load_file()
方式读取文件实现
首先在
/tmp
目录下创建一个文档

运行
mysql
sql
命令如下
:
1 create table aaa(cmd text);
2 insert into aaa(cmd) values (load_file('/tmp/1.txt'));
3 select * from user;
四、
load data infile
方式实现文件读取
其实
load data infile
和
load_file()
用法上没有什么区别
,
只是在注入过程中,往往会过滤掉
load_file()
这个函数,但是仍然有
load data infile
可以使用。
如:
load data infile '/tmp/1.txt' into table aaa;
五、
System
命令方式读取文件
在
mysql
版本为
5.x
时
,
除了可以使用上两种方法外,还可以使用系统命令直接读取文件

注意:
1.
此方法只能在本地读取,远程连接
mysql
时无法使用
system
。
2.
无法越权读取。
show grants for 用户名@主机域
操作权限 insert delete update select create drop grant revoke
操作对象 库,表,字段,所有
操作权限 insert delete update select create drop grant revoke
操作对象 库,表,字段,所有
读取外部文件
load_file 函数 insert into 表(字段) values(load_file(‘’路径文件))
load data infile 命令 load data infile ‘路径文件’ into table 表名
system cat system ifconfig 本地运行
load_file 函数 insert into 表(字段) values(load_file(‘’路径文件))
load data infile 命令 load data infile ‘路径文件’ into table 表名
system cat system ifconfig 本地运行