一、MySQL 简介

1、MySQL 简介

  • MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB(创始人 Michael Widenius)公司开发,2008 被 Sun 收购(10 亿美金),2009 年 Sun 被 Oracle 收购。
  • MariaDB 基于事务的Maria 存储引擎,替换了 MySQL 的MyISAM 存储引擎; 它使用了 Percona 的 XtraDB 代替了 InnoDB 存储引擎。
  • MySQL 是一种关联数据库管理系统,将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
  • MySQL 是开源的,所以你不需要支付额外的费用。
  • MySQL 是可以定制的,采用了 GPL(GNU General Public License)协议,你可以修改源码来开发自己的 MySQL 系统
  • MySQL 支持大型的数据库。可以处理拥有上千万条记录的大型数据库。
  • MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为 8TB。
  • MySQL 使用标准的 SQL 数据语言形式。
  • MySQL 可以允许于多个系统上,并且支持多种语言。这些编程语言包括 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等。

二、用户管理

1、创建用户

1
create user shiguang identified by '123456';

表示创建名称为 shiguang 的用户,密码设为 123456;

2、user 表

在 MySQL 自带的四个数据库中,在其中的mysql数据库中的user表就储存了 mysql 登录用户的各种信息

查看用户, 以列的方式显示数据

1
select * from mysql.user \G;

查询特定字段

1
select host,user,authentication_string,select_priv,insert_priv,drop_priv from mysql.user;

  • host : 表示连接类型

    • localhost 本地方式通过命令行方式的连接 ,比如 mysql -u xxx -p xxx 方式的连接
    • % 表示所有远程通过 TCP 方式的连接
    • IP 地址 如 (192.168.1.2,127.0.0.1) 通过制定 ip 地址进行的 TCP 方式的连接
    • 机器名 通过制定网络中的机器名进行的 TCP 方式的连接
    • ::1 IPv6 的本地 ip 地址,等同于 IPv4 的 127.0.0.1
  • user : 表示用户名, 同一用户通过不同方式链接的权限是不一样的。

  • authentication_string : 密码

    • 所有密码串通过 password(明文字符串) 生成的密文字符串。加密算法为 MYSQLSHA1,不可逆 。

    • mysql 5.7 的密码保存到 authentication_string 字段中不再使用 password 字段

  • select_priv:查询数据权限

  • insert_priv:插入数据权限

  • drop_priv:删除数据权限

3、设置密码

修改当前用户的密码:

1
set password =password('12345');

修改某个用户的密码:

1
2
update mysql.user set authentication_string=password('123456') where user='shiguang';
flush privileges;

注意:所有通过 user 表的修改,必须用 flush privileges; 命令才能生效。否则,需重启服务。

4、修改用户

修改用户名:

1
2
update mysql.user set user='guang' where user='shiguang';
flush privileges;

5、删除用户

1
drop user guang;

注意:不要通过 delete from user u where user='guang' 进行删除,系统会有残留信息保留。

三、权限管理

1、授权命令

格式

grant 权限 1,权限 2 on 数据库名称.表名称 to 用户名

grant 权限 1,权限 2 on 数据库名称.表名称 to 用户名@用户地址登录(即上面的 host) identified by ‘连接口令(密码)’;

该权限如果发现没有该用户,则会直接新建一个用户。

比如:

1
2
3
4
#给shiguang用户,授予 所有数据库下的所有表 的查询、插入、删除、更新的权限。
grant select,insert,delete,update on *.* to shiguang;
#授予通过网络方式登录的用户,对 所有数据库所有表 的全部权限,密码设为123456.
grant all privileges on *.* to guang@'%' identified by '123456';

2、查看权限

查看当前用户权限

1
show grants;

查看某用户的全局权限

1
select * from mysql.user;

查看某用户的某个表的权限

1
select * from mysql.tables_priv;

3、收回权限

收回权限命令

revoke 权限 1,权限 2 on 数据库名称.表名称 from 用户名

revoke 权限 1,权限 2 on 数据库名称.表名称 from 用户名@用户地址 ;

1
2
3
4
#收回全库全表的所有权限
REVOKE ALL PRIVILEGES ON *.* FROM guang;
#收回mysql库下的所有表的插删改查权限
REVOKE select,insert,update,delete ON *.* FROM shiguang@'%';

须用户重新登录后才能生效