mysql授权

添加一个本地用户,名为username密码为password
GRANT ALL PRIVILEGES ON *.* TO username@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;

添加一个远程用户,名为username密码为password
GRANT create,select,insert,update,delete ON *.* TO username@"%" IDENTIFIED BY 'password' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON database.* TO username@"111.111.111.111" IDENTIFIED BY 'password' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO username@"%" IDENTIFIED BY 'password' WITH GRANT OPTION;

mysql创建和删除用户方法
关键字: mysql创建和删除用户方法
命令方式的.注意每行后边都跟个 ; 表示一个命令语句结束.
格式:grant select on 数据库.* to 用户名@登录主机 identified by "密码"

例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,然后键入以下命令:
grant select,insert,update,delete on *.* to test1@"%" Identified by "abc";
但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见例2。
例2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。
grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc";
如果你不想test2有密码,可以再打一个命令将密码消掉。
grant select,insert,update,delete on mydb.* to test2@localhost identified by "";

撤权并删除用户
要取消一个用户的权限,使用REVOKE语句。REVOKE的语法非常类似于GRANT语句,除了TO用FROM取代并且没有INDETIFED BY和WITH GRANT OPTION子句:
REVOKE privileges (columns) ON what FROM user
例如:revoke usage on *.* from username@localhost;

grant, revoke 用户权限后,该用户只有重新连接 MySQL 数据库,权限才能生效。

user部分必须匹配原来GRANT语句的你想撤权的用户的user部分。privileges部分不需匹配,你可以用GRANT语句授权,然后用REVOKE语句只撤销部分权限。
REVOKE语句只删除权限,而不删除用户。即使你撤销了所有权限,在user表中的用户记录依然保留,这意味着用户仍然可以连接服务器。要完全删除一个用户,你必须用一条DELETE语句明确从user表中删除用户记录:

use user;
DELETE FROM user WHERE User='user_name' and Host='host_name';

FLUSH PRIVILEGES;
DELETE语句删除用户记录,而FLUSH语句告诉服务器重载授权表。(当你使用GRANT和REVOKE语句时,表自动重载,而你直接修改授权表时不是。)
分析用户授权:
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

select User, Host from user;
show grants for username@localhost;
delete from user where User='username' and Host='localhost';
FLUSH PRIVILEGES;
show grants for username@localhost;
select * from mysql.user where user='username'\G
select * from mysql.db where user='username'\G

=========================================

简单说,mysql库是mysql系统的管理数据库,它里面存放了用户信息和配置信息,其中最主要的两个:
mysql.user:用户库,里面有全局的权限。
mysql.db :按库来指定的权限

but:用grant把一个用户加了好几个库的访问权限,然后不管是用revoke删除权限,还是用delete删除用户后,然后再随便把这个用户赋予某一个库的权限后,这个用户以前所有的权限都出来了。
没办法解决,只能从mysql.db中用命令删除数据
delete from mysql.db where User='username' and Host='173.234.50.142';
delete from mysql.user where User='username' and Host='173.234.50.142';