三、MYSQL权限实战

1.  GRANT命令使用说明

先来看一个例子,创建一个只允许从本地登录的超级用户feihong,并允许将权限赋予别的用户,密码为test@feihong.111

GRANT ALL PRIVILEGES ON *.* TO feihong@'localhost' IDENTIFIED BY 'test@feihong.111' WITH GRANT OPTION;

GRANT命令说明:

ALL PRIVILEGES 是表示所有权限,你也可以使用select、update等权限提到的权限。

ON 用来指定权限针对哪些库和表。

*.* 中前面的*号用来指定数据库名,后面的*号用来指定表名。

TO 表示将权限赋予某个用户。

feihong@'localhost' 表示feihong用户,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。注意:这里%有的版本不包括本地,以前碰到过给某个用户设置了%允许任何地方登录,但是在本地登录不了,这个和版本有关系,遇到这个问题再加一个localhost的用户就可以了。

IDENTIFIED BY 指定用户的登录密码。

WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项导致后来该用户不能使用GRANT命令创建用户或者给其他用户授权。

备注:可以使用GRANT重复给用户添加权限,权限叠加,比如你先给用户添加了一个select权限,然后又给用户添加了一个insert权限,那么该用户就同时拥有了select和insert权限。

2.  创建一个超级用户
创建一个只允许从本地登录的超级用户feihong,并允许将权限赋予别的用户,密码为test@feihong.111
 
  
GRANT ALL PRIVILEGES ON *.* TO feihong@'localhost' IDENTIFIED BY 'test@feihong.111' WITH GRANT OPTION;
 
  
3.   创建一个网站用户(程序用户)
创建一个一般的程序用户,这个用户可能只需要SELECT, INSERT, UPDATE, DELETE, CREATE TEMPORARY TABLES等权限如果有存储过程还需要加上EXECUTE权限,一般是指定内网网段192.168.100网段。
 
  
GRANT  USAGE,SELECT, INSERT, UPDATE, DELETE, SHOW VIEW ,CREATE TEMPORARY TABLES,EXECUTE ON `test`.* TO webuser@'192.168.100.%' IDENTIFIED BY  'test@feihong.111';
 
  
4.  创建一个普通用户(仅有查询权限)
 
  
GRANT USAGE,SELECT ON `test`.* TO public@'192.168.100.%' IDENTIFIED BY  'public@feihong.111';
 
  
5.  刷新权限
使用这个命令使权限生效,尤其是你对那些权限表user、db、host等做了update或者delete更新的时候。以前遇到过使用grant后权限没有更新的情况,大家可以养成习惯,只要对权限做了更改就使用FLUSH PRIVILEGES命令来刷新权限。
 
  
FLUSH PRIVILEGES;
 
  
6.  查看权限
使用如下命令可以方便的查看到某个用户的权限:
 
  
SHOW GRANTS FOR 'webuser'@'192.168.100.%';
 
  
7.  回收权限
将前面创建的webuser用户的DELETE权限回收,使用如下命令
 
  
REVOKE DELETE ON test.* FROM 'webuser'@'192.168.100.%';



8.  删除用户

注意删除用户不要使用DELETE直接删除,因为使用DELETE删除后用户的权限并未删除,新建同名用户后又会继承以前的权限。正确的做法是使用DROP USER命令删除用户,比如要删除'webuser'@'192.168.100.%'用户采用如下命令:



DROP USER 'webuser'@'192.168.100.%';



        

大家可以采用percona-toolkit工具中的pt-show-grants工具来辅助管理mysql权限

https://blog.51cto.com/showerlee/1127090