mysql

mysqlcheck/myisamchk

mysqlhotcopy

mysqldump

mysqladmin



mysql存取控制包含2个阶段:

         阶段1: 服务器检查是否允许你的IP地址连接mysql服务器。 检查是否允许你从哪连接。

         阶段2: 如果可以连接上。 检查你对具体的库,表,字段有没有权限。

这两个阶段使用mysql数据库的user,db,host表。如果语法涉及表,服务器可以另外参考:、table_priv表和columns_priv表


存储权限的表有:

1user

2db

3host表

4、table_priv表

5、columns_priv表


MySQL权限经验原则:

   权限控制主要是出于安全因素,因此需要遵循一下几个经验原则:

    1、只授予能满足需要的最小权限,防止用户干坏事。比如用户只是需要查询,那就只给select权限就可以了,不要给用户赋予updateinsert或者delete权限。

    2、创建用户的时候限制用户的登录主机,一般是限制成指定IP或者内网IP段。

    3、初始化数据库的时候删除没有密码的用户。安装完数据库的时候会自动创建一些用户,这些用户默认没有密码。

    4、为每个用户设置满足密码复杂度的密码。

    5、定期清理不需要的用户。回收权限或者删除用户。


    如果用Grant,revoke 或 set password 对权限表进行修改,服务器会注意到并立即重新将授权表载入内存。如果手动的修改授权表(使用insert,update 或 delete ),你应该执行 mysqladmin flush-perivileges 或 mysqladmin reload 告诉服务器在装载权限表,否则你的更改讲不会生效,除非你重新驱动服务器


mysql> show grants; #查看当前用户权限


GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' WITH GRANT OPTION


grant命令说明

格式:grant 权限 on 数据库名.表名 to 用户@登录主机 identified by "用户密码";

grant[英][grɑ:nt]   承认; 同意; 准许; 授予; 

 ALLPRIVILEGES 是表示所有权限,你也可以使用selectupdate等权限

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

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

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

'root'@'localhost'表示root用户,@后面接限制的主机,可以是IPIP段、域名以及%%表示任何地方。注意这里%

注意一点:有的版本不包括本地,以前碰到过给某个用户设置了%允许任何地方登录,但是在本地登录不了,这个和版本有关系,遇到这个问题再加一个localhost的用户就可以了。

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

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

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


创建用户

//登录MYSQL
@>mysql -u root -p
@>密码
//创建用户
mysql> insert into mysql.user(Host,User,Password) values("localhost","phplamp",password("1234"));
//刷新系统权限表
mysql>flush privileges;
这样就创建了一个名为:phplamp  密码为:1234  的用户。


mysql> flush privileges;

创建用户后刷新权限


mysql> grant all on game.books to 'phplamp'@'localhost' identified by '1234';

设置phplamp用户权限


修改前查看表

wKiom1biX0PBO78wAAAoNYUxVOA408.png


phplamp 用户登录

wKioL1biX8nDTsH0AAAjh4-tSbE774.png


查看数据库,及库中表 ,权限设置成功


wKiom1biX0PjUy-VAAA5j758vDk761.png



只授权部分权限:

mysql> grant select,insert,update,delete,create,dropon aa.* to 'custom'@'localhost' identified by '123456';




mysql> show grants for smxj1

查看指定用户的权限


mysql> show grants for smxj1@'%' 

查看指定用户所有ip的权限

mysql> show grants for smxj1@'localhost' 

查看指定用户localhost的权限


mysql> revoke delete on *.* from 'smxj1'@'localhost';

回收用户权限