用户安全:
mysql 的认证方式: 用户名、密码、登录主机
客户端:要通过什么用户通过什么密码登录服务器
用户名 密码 要登录的服务器的IP地址 服务器提供的mysql服务的端口号
服务端:验证客户端的登录信息是否在自己的用户表中
用户名 密码 客户端的登录主机
权限:
授权(级别):
- 系统权限---------mysql.user
- 针对某一个数据库-----mysql.db
- 某一个数据库中的某一个表-------mysql.table_priv
- 某一个数据库中某一个表中的某一列-------mysql.columns_priv
grant :
1、u1可以访问所有数据库的所有表(select)
grant select on table *.* to 'u1'@'localhost';
select * from mysql.user;
2、u1可以访问test数据库的所有表(insert)
grant insert on table test.* to 'u1'@'localhost';
select * from mysql.db;
3、u1可以访问test数据库里面的t1 表(所有权限)
grant all on table test.t1 to 'u1'@'localhost';
select * from mysql.tables_priv;
4、u1可以访问test数据库中t1 表的id列
grant insert(id) on table test.t1 to 'u1'@'localhost';
select * from mysql.columns_priv;
权限的传递:
with grant option
通过在grant语句的最后使用该子句,就允许被授权的用户把得到的权限继续授权给其他用户。
grant all on *.* to 'root'@'%' with grant option
grant建立用户:
1、如果grant的用户不存在,并且加上密码,会自动创建用户。
grant all on *.* to 'u12'@'%' identified by '123456' with grant option ;
2、如果不加密码进行强制建立用户,则修改会话级别参数
show variables like 'sql_mode';
set @@session.sql_mode='......';
去掉sql_mode里面的no_auto_create_user这个参数即可。(为了安全级别还是别去掉这个参数)
revoke:
(废除用户权限)
先查看用户有哪些权限,再废除
revoke select on test from 'u1'@'%';
废除用户在所有级别上的权限
revoke all privileges,grant option from user [,user]......