M-63.第十一周作业

1、 导入hellodb.sql生成数据库

(1) 在students表中,查询年龄大于25岁,且为男性的同学的名字和年龄

select name,age from students where age>25 and gender='m' ;

(2) 以ClassID为分组依据,显示每组的平均年龄

select classid,avg(age) from students where classid is not null group by classid;

(3) 显示第2题中平均年龄大于30的分组及平均年龄

 select classid,avg(age) as avgage from students where classid is not null group by classid having avgage>30;

(4) 显示以L开头的名字的同学的信息

select * from students where name like 'l%';

2、数据库授权magedu用户,允许192.168.1.0/24网段可以连接mysql

查看数据库版本

$ mysql --version

mysql  Ver 15.1 Distrib 10.2.41-MariaDB, for Linux (x86_64) using readline 5.1

服务端登录MySQL建立测试库

$ mysql

MariaDB [(none)]> create database magedu;

Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> show databases;

+--------------------+

| Database          |

+--------------------+

| information_schema |

| magedu            |

| mysql              |

| performance_schema |

| test              |

+--------------------+

5 rows in set (0.00 sec)

授权

MariaDB [(none)]> grant all privileges on magedu.* to 'magedu'@'10.10.6.0/24' identified by '123123' with grant option;

Query OK, 1 rows affected (0.00 sec)

// 其中,关键字 “privileges” 可以省略。

// all privileges:表示将所有权限授予给用户。也可指定具体的权限,如:SELECT、CREATE、DROP等。

// on:表示这些权限对哪些数据库和表生效,格式:数据库名.表名,这里写“*”表示所有数据库,所有表。如果我要指定将权限应用到test库的user表中,可以这么写:test.user

// to:将权限授予哪个用户。格式:”用户名”@”登录IP或域名”。%表示没有限制,在任何主机都可以登录。比如:”yangxin”@”192.168.0.%”,表示yangxin这个用户只能在192.168.0IP段登录

// identified by:指定用户的登录密码

MariaDB [(none)]> flush privileges;

Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> select host,user from mysql.user;

+--------------+--------+

| host        | user  |

+--------------+--------+

| 10.10.6.0/24 | magedu |

| 127.0.0.1    | root  |

| ::1          | root  |

| localhost    |        |

| localhost    | root  |

| mysql-01    |        |

| mysql-01    | root  |

+--------------+--------+

7 rows in set (0.00 sec)

登录其他服务器,下载mysql客户端

$ yum install mysql -y

测试远程连接(若无反应根据文章末尾操作)

$ mysql -umagedu -h 10.10.6.188 magedu -p

Enter password:

MariaDB [magedu]> show tables;

Empty set (0.00 sec)

MariaDB [magedu]> show grants;

+-----------------------------------------------------------------------------------------------------------------------------------------+

| Grants for [email protected]/24                                                                                                              |

+-----------------------------------------------------------------------------------------------------------------------------------------+

| GRANT ALL PRIVILEGES ON `magedu`.* TO 'magedu'@'10.10.6%'  IDENTIFIED BY PASSWORD '*E56A114692FE0DE073F9A1DD68A00EEB9703F3F1'  WITH GRANT OPTION                                                            |

+-----------------------------------------------------------------------------------------------------------------------------------------+

2 rows in set (0.00 sec)

MariaDB [magedu]> quit

Bye

服务端测试权限回收

MariaDB [(none)]> revoke all on magedu.* from 'magedu'@'10.10.6.0/24';

Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;

Query OK, 0 rows affected (0.00 sec)

删除用户

MariaDB [(none)]> drop user 'magedu'@'10.10.6.0/24';

Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;

Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> select host,user from mysql.user;

+-----------+------+

| host      | user |

+-----------+------+

| 127.0.0.1 | root |

| ::1      | root |

| localhost |      |

| localhost | root |

| mysql-01  |      |

| mysql-01  | root |

+-----------+------+

6 rows in set (0.00 sec)

客户端再次远程登录,提示失败

$ mysql -umagedu -h 10.10.6.188 magedu -p

Enter password:

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0

PS:客户端登录无反应,可能是:

1、检查3306端口是否被防火墙屏蔽,开启3306端口

$ sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

// -A 表示append向iptables的INPUT链中追加

// -p 表示‘协议’ 后跟tcp

// --dport 端口号

// -j ACCEPT 这个参数用于指定匹配的数据包的目标。用在这里表示接受和允许符合上述标准的数据包通过

2、MySQL服务端未开启远程连接

主要有这么几个配置文件,mysql和mariadb略有不同

/etc/mysql/mariadb.cnf 默认配置文件,

/etc/mysql/conf.d/*.cnf 设置全局项的文件

“/etc/mysql/mariadb.conf.d/*.cnf” 设置与MariaDB相关的信息

“~/.my.cnf” 设置该账户对应的信息

这也就是为什么我们在my.cnf做相关设置有的时候不起作用(可能在其他配置文件中有相同的项,MySQL最终采用的是另外一个文件中的设置);

根据官方的说法,MariaDB为了提高安全性,默认只监听127.0.0.1中的3306端口并且禁止了远程的TCP链接,我们可以通过下面两步来开启MySQL的远程服务:

注释掉skip-networking选项来开启远程访问.

注释bind-address项,该项表示运行哪些IP地址的机器连接,允许所有远程的机器连接

拓展

MySQL 赋予用户权限命令的简单格式可概括为:grant 权限 on 数据库对象 to 用户

grant select on testdb.* to common_user@'%'

grant insert on testdb.* to common_user@'%'

grant update on testdb.* to common_user@'%'

grant delete on testdb.* to common_user@'%'

或者,用一条 MySQL 命令来替代:

grant select, insert, update, delete on testdb.* to common_user@'%'


grant 创建、修改、删除 MySQL 数据表结构权限。

grant create on testdb.* to developer@'192.168.0.%';

grant alter on testdb.* to developer@'192.168.0.%';

grant drop on testdb.* to developer@'192.168.0.%';

grant 操作 MySQL 外键权限。

grant references on testdb.* to developer@'192.168.0.%';

grant 操作 MySQL 临时表权限。

grant create temporary tables on testdb.* to developer@'192.168.0.%';


MySQL grant 权限,分别可以作用在多个层次上。

1. grant 作用在整个 MySQL 服务器上:

grant select on *.* to dba@localhost; -- dba 可以查询 MySQL 中所有数据库中的表。

grant all on *.* to dba@localhost; -- dba 可以管理 MySQL 中的所有数据库

2. grant 作用在单个数据库上:

grant select on testdb.* to dba@localhost; -- dba 可以查询 testdb 中的表。

3. grant 作用在单个数据表上:

grant select, insert, update, delete on testdb.orders to dba@localhost;

这里在给一个用户授权多张表时,可以多次执行以上语句。例如:

grant select(user_id,username) on smp.users to mo_user@'%' identified by '123345';

grant select on smp.mo_sms to mo_user@'%' identified by '123345';

4. grant 作用在表中的列上:

grant select(id, se, rank) on testdb.apache_log to dba@localhost;

5. grant 作用在存储过程、函数上:

grant execute on procedure testdb.pr_add to 'dba'@'localhost'

grant execute on function testdb.fn_add to 'dba'@'localhost'

你可能感兴趣的:(M-63.第十一周作业)