MySQL中用户与权限管理
一、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 | update mysql.user set authentication_string=password('123456') where user='shiguang'; |
注意:所有通过 user 表的修改,必须用
flush privileges;
命令才能生效。否则,需重启服务。
4、修改用户
修改用户名:
1 | update mysql.user set user='guang' where user='shiguang'; |
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 | #给shiguang用户,授予 所有数据库下的所有表 的查询、插入、删除、更新的权限。 |
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 | #收回全库全表的所有权限 |
须用户重新登录后才能生效