Top

NTD WEBSEC DAY01

  1. 案例1:部署及访问数据库
  2. 案例2:使用mysql连接工具
  3. 案例3:库的基本操作
  4. 案例4:表格创建及查询
  5. 案例5:删除表
  6. 案例6:复制表
  7. 案例7:grant授权及撤销
  8. 案例8:重置数据库管理密码

1 案例1:部署及访问数据库

1.1 问题

本例要求基于kali2020环境,熟悉数据库服务的部署及基本验证方法,完成下列任务:
1)在kali2020上启用mysql服务,并设置开机自启
2)完成初始安全设置,将管理密码设为1234
3)使用 mysqladmin 更改管理密码,设置为 pwd@123
4)使用 mysql 验证无密码登录被拒绝

1.2 步骤

实现此案例需要按照如下步骤进行。
步骤一:在kali2020上启用mysql服务,并设置开机自启
1)启动mariadb数据库服务
root@kali:~# systemctl start mariadb
root@kali:~#

2)查看mariadb服务状态,确保激活标记为running
root@kali:~# systemctl status mariadb
● mariadb.service - MariaDB 10.3.20 database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2020-03-19 01:34:38 CST; 1min 50s ago //正在运行
Docs: man:mysqld(8)
https://mariadb.com/kb/en/library/systemd/
Process: 2880 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCC>
Process: 2881 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUC>
Process: 2883 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= || VAR=`/usr/bin/galera_recovery>
Process: 2962 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SU>
Process: 2964 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS)
Main PID: 2931 (mysqld)
Status: “Taking your SQL requests now…”
Tasks: 31 (limit: 2309)
Memory: 73.5M
CGroup: /system.slice/mariadb.service
└─2931 /usr/sbin/mysqld

3月 19 01:34:37 kali systemd[1]: Starting MariaDB 10.3.20 database server…
3月 19 01:34:37 kali mysqld[2931]: 2020-03-19 1:34:37 0 [Note] /usr/sbin/mysqld (mysqld 10.3.20-MariaDB-1) starting a>
3月 19 01:34:38 kali systemd[1]: Started MariaDB 10.3.20 database server.
3月 19 01:34:38 kali /etc/mysql/debian-start[2966]: Upgrading MySQL tables if necessary.
3月 19 01:34:38 kali /etc/mysql/debian-start[2969]: /usr/bin/mysql_upgrade: the ‘—basedir’ option is always ignored
3月 19 01:34:38 kali /etc/mysql/debian-start[2969]: Looking for ‘mysql’ as: /usr/bin/mysql
3月 19 01:34:38 kali /etc/mysql/debian-start[2969]: Looking for ‘mysqlcheck’ as: /usr/bin/mysqlcheck
3月 19 01:34:38 kali /etc/mysql/debian-start[2969]: This installation of MySQL is already upgraded to 10.3.20-MariaDB,>
3月 19 01:34:38 kali /etc/mysql/debian-start[2977]: Checking for insecure root accounts.
3月 19 01:34:38 kali /etc/mysql/debian-start[2981]: Triggering myisam-recover for all MyISAM tables and aria-recover f>
lines 1-27/27 (END) //按 q 键返回命令行
root@kali:~#

3)设置以后每次开机自动启动mariadb服务
root@kali:~# systemctl enable mariadb //标记开机自启
Created symlink /etc/systemd/system/mysql.service → /lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /lib/systemd/system/mariadb.service.
root@kali:~# systemctl is-enabled mariadb //检查设置结果
enabled

4)测试快速访问
默认情况下,只要maridb服务已经运行,执行mysql命令无需密码即可连接。
root@kali:~# mysql //连接本机数据库系统
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 36
Server version: 10.3.20-MariaDB-1 Debian buildd-unstable

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

MariaDB [(none)]> //连接成功
MariaDB [(none)]> quit //退出(返回命令行)
Bye
root@kali:~#

步骤二:完成初始安全设置,将管理密码设为1234
执行mysql_secure_installation命令,可以针对默认的mariadb数据库执行一系列安全初始化设置,包括设置密码、禁止匿名登录等等。
root@kali:~# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we’ll need the current
password for the root user. If you’ve just installed MariaDB, and
you haven’t set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): //提供原密码(默认没有)
OK, successfully used password, moving on…

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y //输入y表示要设置新密码
New password: //输入新密码,比如1234
Re-enter new password: //重复一次新密码
Password updated successfully!
Reloading privilege tables..
… Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] //删除匿名数据库用户
… Success!

Normally, root should only be allowed to connect from ‘localhost’. This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] //禁止root用户远程登录
… Success!

By default, MariaDB comes with a database named ‘test’ that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] //删除test库
- Dropping test database…
… Success!
- Removing privileges on test database…
… Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] //重新加载数据库权限表
… Success!

Cleaning up…

All done! If you’ve completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
root@kali:~#

步骤三:使用 mysql 验证无密码登录会被拒绝
当数据库系统要求用户名、密码,但是mysql连接未提供,或者提供的信息不对时,就会被拒绝(Access denied)。
root@kali:~# mysql
ERROR 1045 (28000): Access denied for user ‘root’@’localhost’ (using password: NO)
root@kali:~#

步骤四:使用 mysqladmin 更改管理密码,设置为 pwd@123
实际工作中,1234这样的密码肯定是非常不安全的,特别是对于数据库系统来说。
因此一方面密码设置应该足够复杂,另一方面最好定期使用mysqladmin更换密码。
root@kali:~# mysqladmin -uroot -p1234 password ‘pwd@123’
root@kali:~#

2 案例2:使用mysql连接工具

2.1 问题

本例要求以案例1的结果为基础,使用mysql命令工具连接本机的MariaDB数据库服务器,完成下列任务:
1)以管理用户root登入
2)列出有哪些库
3)退出MariaDB>交互界面,返回Linux命令行

2.2 步骤

实现此案例需要按照如下步骤进行。
步骤一:以管理用户root登入
root@kali:~# mysql -uroot -ppwd@123
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 41
Server version: 10.3.20-MariaDB-1 Debian buildd-unstable

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

MariaDB [(none)]> //交互式管理界面

步骤二:列出有哪些库
MariaDB [(none)]> SHOW DATABASES; //列出有哪些库
+——————————+
| Database |
+——————————+
| information_schema |
| mysql |
| performance_schema |
+——————————+
3 rows in set (0.000 sec)

MariaDB [(none)]>

步骤三:退出MariaDB>交互界面,返回Linux命令行
MariaDB [(none)]> QUIT; //退出管理
Bye
root@kali:~# //已返回命令行

3 案例3:库的基本操作

3.1 问题

本例要求熟悉MariaDB库的基本管理操作,完成下列任务:
1)列出MariaDB服务器上有哪些库
2)选择mysql库,列出此库中有哪些表,找到 user 表
3)创建2个库,名称分别为 studb、webdb,确认结果
4)删除名为 webdb 的库,确认结果

3.2 步骤

实现此案例需要按照如下步骤进行。
步骤一:列出MariaDB服务器上有哪些库
MariaDB [(none)]> SHOW DATABASES;
+——————————+
| Database |
+——————————+
| information_schema |
| mysql |
| performance_schema |
| test |
| zabbix |
+——————————+
5 rows in set (0.00 sec)

MariaDB [(none)]>

步骤二:选择mysql库,列出此库中有哪些表,找到 user 表
MariaDB [(none)]> USE mysql; //选择mysql库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [mysql]>
MariaDB [mysql]> SHOW TABLES; //列出当前库中有哪些表
+—————————————-+
| Tables_in_mysql |
+—————————————-+
| column_stats |
| columns_priv |
| db |
| event |
| func |
| general_log |
| gtid_slave_pos |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| host |
| index_stats |
| innodb_index_stats |
| innodb_table_stats |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| roles_mapping |
| servers |
| slow_log |
| table_stats |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| transaction_registry |
| user | //存放数据库用户的表
+—————————————-+
31 rows in set (0.000 sec)

MariaDB [mysql]>

步骤三:创建2个库,名称分别为 studb、webdb,确认结果
MariaDB [mysql]> CREATE DATABASE studb; //新建studb库
Query OK, 1 row affected (0.000 sec)

MariaDB [mysql]> CREATE DATABASE webdb; //新建webdb库
Query OK, 1 row affected (0.000 sec)

MariaDB [(mysql)]> SHOW DATABASES; //确认结果
MariaDB [mysql]> SHOW DATABASES;
+——————————+
| Database |
+——————————+
| information_schema |
| mysql |
| performance_schema |
| studb | //列表结果可看到studb
| webdb | //列表结果可看到webdb
+——————————+
5 rows in set (0.000 sec)

MariaDB [mysql]>

步骤四:删除名为 webdb 的库,确认结果
MariaDB [mysql]> DROP DATABASE webdb; //删除webdb库
Query OK, 0 rows affected (0.000 sec)

MariaDB [mysql]> SHOW DATABASES; //确认结果
+——————————+
| Database |
+——————————+
| information_schema |
| mysql |
| performance_schema |
| studb |
+——————————+
4 rows in set (0.000 sec)

MariaDB [mysql]>

4 案例4:表格创建及查询

4.1 问题

本例要求学会在数据库中创建及查询表格,参考如图1所示表格及数据,
WEBSEC DAY01 - 图1
图-1
完成下列任务:
1)在 studb 库中创建 hero 表
2)检查表格的列设置
3)向表格 hero 中录入4条数据记录
4)确认表格 hero 的内容

4.2 步骤

实现此案例需要按照如下步骤进行。
步骤一:在 studb 库中创建 hero 表
MariaDB [mysql]> CREATE TABLE studb.hero(学号 int,姓名 varchar(20),性别 char(1),手机号 char(11),籍贯 varchar(24),期望薪资 int);
Query OK, 0 rows affected (0.049 sec)

MariaDB [mysql]>

步骤二:检查表格的列设置
MariaDB [mysql]> DESC studb.hero;
+———————+——————-+———+——-+————-+———-+
| Field | Type | Null | Key | Default | Extra |
+———————+——————-+———+——-+————-+———-+
| 学号 | int(11) | YES | | NULL | |
| 姓名 | varchar(20) | YES | | NULL | |
| 性别 | char(1) | YES | | NULL | |
| 手机号 | char(11) | YES | | NULL | |
| 籍贯 | varchar(24) | YES | | NULL | |
| 期望薪资 | int(11) | YES | | NULL | |
+———————+——————-+———+——-+————-+———-+
6 rows in set (0.001 sec)

MariaDB [mysql]>

步骤三:向表格 hero 中录入4条数据记录
MariaDB [mysql]> INSERT INTO studb.hero VALUES(202012001,’郭靖’,’男’,’13145201314’,’东海桃花岛’,8000);
Query OK, 1 row affected (0.002 sec)

MariaDB [mysql]> INSERT INTO studb.hero VALUES(202012002,’黄蓉’,’女’,’13145201413’,’东海桃花岛’,16000);
Query OK, 1 row affected (0.001 sec)

MariaDB [mysql]> INSERT INTO studb.hero VALUES(202012003,’华筝’,’女’,’13705666777’,’蒙古大营’,12000);
Query OK, 1 row affected (0.001 sec)

MariaDB [mysql]> INSERT INTO studb.hero VALUES(202012004,’洪七公’,’男’,’18888888888’,’太湖北丐帮总舵’,48000);
Query OK, 1 row affected (0.002 sec)

MariaDB [mysql]>

步骤四:确认表格 base 的内容
MariaDB [mysql]> SELECT * FROM studb.hero;
+—————-+—————-+————+——————-+———————————-+———————+
| 学号 | 姓名 | 性别 | 手机号 | 籍贯 | 期望薪资 |
+—————-+—————-+————+——————-+———————————-+———————+
| 202012001 | 郭靖 | 男 | 13145201314 | 东海桃花岛 | 8000 |
| 202012002 | 黄蓉 | 女 | 13145201413 | 东海桃花岛 | 16000 |
| 202012003 | 华筝 | 女 | 13705666777 | 蒙古大营 | 12000 |
| 202012004 | 洪七公 | 男 | 18888888888 | 太湖北丐帮总舵 | 48000 |
+—————-+—————-+————+——————-+———————————-+———————+
4 rows in set (0.000 sec)

MariaDB [mysql]>

5 案例5:删除表

5.1 问题

本例要求学会在MariaDB数据库中删除表数据、删除表,完成下列任务:
1)使用 select 检查 hero 表中的内容
2)删除整个 hero 表
3)再次使用 select 检查 hero 表中的内容
4)重新在 studb 库中创建 hero 表,并录入4条表格记录
表格数据如图-2所示。
WEBSEC DAY01 - 图2
图-2

5.2 步骤

实现此案例需要按照如下步骤进行。
步骤一:使用 select 检查 hero 表中的内容
MariaDB [mysql]> SELECT * FROM studb.hero;
+—————-+—————-+————+——————-+———————————-+———————+
| 学号 | 姓名 | 性别 | 手机号 | 籍贯 | 期望薪资 |
+—————-+—————-+————+——————-+———————————-+———————+
| 202012001 | 郭靖 | 男 | 13145201314 | 东海桃花岛 | 8000 |
| 202012002 | 黄蓉 | 女 | 13145201413 | 东海桃花岛 | 16000 |
| 202012003 | 华筝 | 女 | 13705666777 | 蒙古大营 | 12000 |
| 202012004 | 洪七公 | 男 | 18888888888 | 太湖北丐帮总舵 | 48000 |
+—————-+—————-+————+——————-+———————————-+———————+
4 rows in set (0.000 sec)

MariaDB [mysql]>

步骤二:删除整个 hero 表
MariaDB [mysql]> DROP TABLE studb.hero;
Query OK, 0 rows affected (0.001 sec)

MariaDB [mysql]>

步骤三:再次使用 select 检查 hero 表中的内容
MariaDB [mysql]> SELECT * FROM studb.hero;
ERROR 1146 (42S02): Table ‘studb.hero’ doesn’t exist
MariaDB [mysql]>

步骤四:重新在 studb 库中创建 hero 表,并录入4条表格记录
1)重新创建hero表
MariaDB [mysql]> CREATE TABLE studb.hero(学号 int,姓名 varchar(20),性别 char(1),手机号 char(11),籍贯 varchar(24),期望薪资 int);
Query OK, 0 rows affected (0.049 sec)

MariaDB [mysql]> I

2)重新向表格 hero 中录入4条数据记录
MariaDB [mysql]> INSERT INTO studb.hero VALUES(202012001,’郭靖’,’男’,’13145201314’,’东海桃花岛’,8000);
Query OK, 1 row affected (0.002 sec)

MariaDB [mysql]> INSERT INTO studb.hero VALUES(202012002,’黄蓉’,’女’,’13145201413’,’东海桃花岛’,16000);
Query OK, 1 row affected (0.001 sec)

MariaDB [mysql]> INSERT INTO studb.hero VALUES(202012003,’华筝’,’女’,’13705666777’,’蒙古大营’,12000);
Query OK, 1 row affected (0.001 sec)

MariaDB [mysql]> INSERT INTO studb.hero VALUES(202012004,’洪七公’,’男’,’18888888888’,’太湖北丐帮总舵’,48000);
Query OK, 1 row affected (0.002 sec)

MariaDB [mysql]>

3)再次确认表格 hero 的内容
MariaDB [mysql]> SELECT * FROM studb.hero;
+—————-+—————-+————+——————-+———————————-+———————+
| 学号 | 姓名 | 性别 | 手机号 | 籍贯 | 期望薪资 |
+—————-+—————-+————+——————-+———————————-+———————+
| 202012001 | 郭靖 | 男 | 13145201314 | 东海桃花岛 | 8000 |
| 202012002 | 黄蓉 | 女 | 13145201413 | 东海桃花岛 | 16000 |
| 202012003 | 华筝 | 女 | 13705666777 | 蒙古大营 | 12000 |
| 202012004 | 洪七公 | 男 | 18888888888 | 太湖北丐帮总舵 | 48000 |
+—————-+—————-+————+——————-+———————————-+———————+
4 rows in set (0.000 sec)

MariaDB [mysql]>

6 案例6:复制表

6.1 问题

本例要求学会在MariaDB数据库中复制表格,完成下列任务:
1)复制 studb 库中的 hero 表,建立 studb 库的新表 xiake
2)复制 mysql 库中的 user 表,建立 studb 库的新表 dbusers
3)确认新表 xiake、dbusers 的内容

6.2 步骤

实现此案例需要按照如下步骤进行。
步骤一:复制 studb 库中的 hero 表,建立 studb 库的新表 xiake
MariaDB [mysql]> CREATE TABLE studb.xiake SELECT * FROM studb.hero;
Query OK, 4 rows affected (0.006 sec)
Records: 4 Duplicates: 0 Warnings: 0 //提示已复制4条记录

MariaDB [mysql]>

步骤二:复制 mysql 库中的 user 表,建立 studb 库的新表 dbusers
MariaDB [mysql]> CREATE TABLE studb.dbusers SELECT * FROM mysql.user;
Query OK, 3 rows affected (0.009 sec)
Records: 3 Duplicates: 0 Warnings: 0 //提示已复制3条记录

MariaDB [mysql]>

步骤三:确认新表 xiake、dbusers 的内容
1)使用SELECT语句检查xiake表的内容
MariaDB [mysql]> SELECT * FROM studb.xiake;
+—————-+—————-+————+——————-+———————————-+———————+
| 学号 | 姓名 | 性别 | 手机号 | 籍贯 | 期望薪资 |
+—————-+—————-+————+——————-+———————————-+———————+
| 202012001 | 郭靖 | 男 | 13145201314 | 东海桃花岛 | 8000 |
| 202012002 | 黄蓉 | 女 | 13145201413 | 东海桃花岛 | 16000 |
| 202012003 | 华筝 | 女 | 13705666777 | 蒙古大营 | 12000 |
| 202012004 | 洪七公 | 男 | 18888888888 | 太湖北丐帮总舵 | 48000 |
+—————-+—————-+————+——————-+———————————-+———————+
4 rows in set (0.000 sec)

MariaDB [mysql]>

2)使用SELECT语句检查dbusers表的内容
MariaDB [mysql]> SELECT FROM studb.dbusers;
+———————+———-+—————————————————————-+——————-+——————-+——————-+——————-+——————-+—————-+——————-+———————-+———————+—————-+——————+————————-+——————+——————+———————+——————+———————————-+—————————+———————+————————-+—————————+—————————+————————+——————————-+——————————+—————————+——————+———————+————————————+——————————-+—————+——————+——————-+———————+———————-+——————-+————————-+———————————+———————————-+—————————————————————-+—————————+————-+———————+——————————+
| Host | User | Password | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv | Show_db_priv | Super_priv | Create_tmp_table_priv | Lock_tables_priv | Execute_priv | Repl_slave_priv | Repl_client_priv | Create_view_priv | Show_view_priv | Create_routine_priv | Alter_routine_priv | Create_user_priv | Event_priv | Trigger_priv | Create_tablespace_priv | Delete_history_priv | ssl_type | ssl_cipher | x509_issuer | x509_subject | max_questions | max_updates | max_connections | max_user_connections | plugin | authentication_string | password_expired | is_role | default_role | max_statement_time |
+———————+———-+—————————————————————-+——————-+——————-+——————-+——————-+——————-+—————-+——————-+———————-+———————+—————-+——————+————————-+——————+——————+———————+——————+———————————-+—————————+———————+————————-+—————————+—————————+————————+——————————-+——————————+—————————+——————+———————+————————————+——————————-+—————+——————+——————-+———————+———————-+——————-+————————-+———————————+———————————-+—————————————————————-+—————————+————-+———————+——————————+
| localhost | root |
760F60073FD235571A5260444301DB22136ED604 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 | 0 | mysql_native_password | 760F60073FD235571A5260444301DB22136ED604 | N | N | | 0.000000 |
| localhost | zhsan |
760F60073FD235571A5260444301DB22136ED604 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | N | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y | | | | | 0 | 0 | 0 | 0 | | | N | N | | 0.000000 |
| 192.168.10.% | zhsan | *760F60073FD235571A5260444301DB22136ED604 | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | N | | | | | 0 | 0 | 0 | 0 | | | N | N | | 0.000000 |
+———————+———-+—————————————————————-+——————-+——————-+——————-+——————-+——————-+—————-+——————-+———————-+———————+—————-+——————+————————-+——————+——————+———————+——————+———————————-+—————————+———————+————————-+—————————+—————————+————————+——————————-+——————————+—————————+——————+———————+————————————+——————————-+—————+——————+——————-+———————+———————-+——————-+————————-+———————————+———————————-+—————————————————————-+—————————+————-+———————+——————————+
3 rows in set (0.000 sec)

MariaDB [mysql]>

7 案例7:grant授权及撤销

7.1 问题

本例要求掌握MariaDB数据库用户账号的授权操作,完成下列任务:
1)授权数据库用户 zhsan ,密码为 pwd@123

  • 允许从本机访问,对所有库有任何权限
  • 允许从192.168.10.0/24网段访问,对所有库有任何权限

2)查看 zhsan@localhost 的权限,并验证权限

  • 执行 mysql -uzhsan -ppwd@123 连接数据库
  • 连接成功以后,尝试创建新库 zhsandb

3)撤销 zhsan@localhost 的权限,再次验证权限

  • 重新执行 mysql -uzhsan -ppwd@123 连接数据库
  • 连接成功以后,尝试删除新库 zhsandb

    7.2 步骤

    实现此案例需要按照如下步骤进行。
    步骤一:授权数据库用户 zhsan ,密码为 pwd@123
    首先要确保当前在MariaDB交互环境,而且是以数据库的root管理员登录。
    root@kali:~# mysql -uroot -ppwd@123
    Welcome to the MariaDB monitor. Commands end with ; or \g.
    Your MariaDB connection id is 42
    Server version: 10.3.20-MariaDB-1 Debian buildd-unstable

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

MariaDB [(none)]>

然后使用GRANT语句执行操作。
1)允许从本机访问,对所有库有任何权限
MariaDB [(none)]> GRANT all ON . TO zhsan@localhost IDENTIFIED BY ‘pwd@123’;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]>

2)允许从192.168.10.0/24网段访问,对所有库有任何权限
MariaDB [(none)]> GRANT all ON . TO zhsan@’192.168.10.%’ IDENTIFIED BY ‘pwd@123’;
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]>

步骤二:查看 zhsan@localhost 的权限,并验证权限
管理员root使用SHOW GRANTS查看指定数据库用户的权限。
MariaDB [(none)]> SHOW GRANTS FOR zhsan@localhost;
+———————————————————————————————————————————————————————————-+
| Grants for zhsan@localhost |
+———————————————————————————————————————————————————————————-+
| GRANT ALL PRIVILEGES ON . TO ‘zhsan’@’localhost’ IDENTIFIED BY PASSWORD ‘*760F60073FD235571A5260444301DB22136ED604’ |
+———————————————————————————————————————————————————————————-+
1 row in set (0.000 sec)

MariaDB [(none)]>

若要测试另一个用户的数据库访问权限,需要退出重新登录。
1)执行 mysql -uzhsan -ppwd@123 连接数据库
退出原来登录的数据库环境,重新以zhsan的身份登录。
MariaDB [(none)]> quit //退出原来的root环境
Bye
root@kali:~# mysql -uzhsan -ppwd@123 //重新以zhsan登录
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 43
Server version: 10.3.20-MariaDB-1 Debian buildd-unstable

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

MariaDB [(none)]>

2)连接成功以后,尝试创建新库 zhsandb
MariaDB [(none)]> CREATE DATABASE zhsandb; //测试创建新库
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> SHOW DATABASES; //检查建库结果
+——————————+
| Database |
+——————————+
| information_schema |
| mysql |
| performance_schema |
| studb |
| zhsandb | //结果中已包含zhhsandb库
+——————————+
5 rows in set (0.000 sec)

MariaDB [(none)]>

步骤三:撤销 zhsan@localhost 的权限,再次验证权限
要撤销zhsan的权限,需要再次以root登录。
MariaDB [(none)]> quit //退出原来的zhsan环境
Bye
root@kali:~# mysql -uroot -ppwd@123 //重新以root登录
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 44
Server version: 10.3.20-MariaDB-1 Debian buildd-unstable

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

MariaDB [(none)]>

然后由管理员root使用REVOKE撤销指定用户的权限。
MariaDB [(none)]> REVOKE all ON . FROM zhsan@localhost; //撤销权限
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> SHOW GRANTS FOR zhsan@localhost; //查看结果
+———————————————————————————————————————————————————————+
| Grants for zhsan@localhost |
+———————————————————————————————————————————————————————+
| GRANT USAGE ON . TO ‘zhsan’@’localhost’ IDENTIFIED BY PASSWORD ‘*760F60073FD235571A5260444301DB22136ED604’ |
+———————————————————————————————————————————————————————+
1 row in set (0.000 sec) //保留最基本的USAGE权限(仅登录)

MariaDB [(none)]>

撤销权限完毕以后,可以再次测试zhsan的数据库访问权限,参考下述操作。
1)重新执行 mysql -uzhsan -ppwd@123 连接数据库
MariaDB [(none)]> quit //退出原来的root环境
Bye
root@kali:~# mysql -uzhsan -ppwd@123 //重新以zhsan登录
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 43
Server version: 10.3.20-MariaDB-1 Debian buildd-unstable

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

MariaDB [(none)]>

2)连接成功以后,尝试删除新库 zhsandb
MariaDB [(none)]> DROP DATABASE zhsandb;
ERROR 1044 (42000): Access denied for user ‘zhsan’@’localhost’ to database ‘zhsandb’
//拒绝删库操作
MariaDB [(none)]>
MariaDB [(none)]> show databases; //连看到zhsandb库的机会都没有
+——————————+
| Database |
+——————————+
| information_schema |
+——————————+
1 row in set (0.000 sec)

MariaDB [(none)]>

8 案例8:重置数据库管理密码

8.1 问题

本例要求学会重置数据库管理密码的基本方法,以便在忘记或无法获知MariaDB数据库管理密码的情况下取得管理权限,完成下列任务:
1)停止mariadb服务
2)直接启动数据库进程mysqld_safe,并且跳过授权表
3)重设管理密码
4)关闭mysqld_safe进程,正常启动mariadb服务
5)验证新密码

8.2 步骤

实现此案例需要按照如下步骤进行。
步骤一:停止mariadb服务
root@kali:~# systemctl stop mariadb //停服务
root@kali:~# s

步骤二:直接启动数据库进程mysqld_safe,并且跳过授权表
root@kali:~# mysqld_safe —skip-grant-tables & //直接启动进程
[1] 105799
root@kali:~#

步骤三:重设管理密码
1)免密码登入数据库
root@kali:~# mysql -uroot //免密码登入
.. ..
MariaDB [(none)]>

2)设置新密码
MariaDB [(none)]> UPDATE mysql.user SET Password=password(‘pwd@123’),plugin=’’ WHERE User=’root’ AND Host=’localhost’; //设置新密码
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0

MariaDB [(none)]>

3)退出连接
MariaDB [(none)]> QUIT //退出
Bye

步骤四:关闭mysqld_safe进程,正常启动mariadb服务
1)关闭mysqld_safe进程
root@kali:~# pkill -9 mysqld //强关mysqld服务进程
[1]+ 已杀死 mysqld_safe —skip-grant-tables

2)正常启动mariadb服务
root@kali:~# systemctl restart mariadb //起正常服务

步骤五:验证新密码
root@kali:~# mysql -uroot -ppwd@123 //验证新密码登入
.. ..
MariaDB [(none)]> QUIT
Bye
root@kali:~#