mysql
mysqlcheck/myisamchk
mysqlhotcopy
mysqldump
mysqladmin
mysql存取控制包含2个阶段:
阶段1: 服务器检查是否允许你的IP地址连接mysql服务器。 检查是否允许你从哪连接。
阶段2: 如果可以连接上。 检查你对具体的库,表,字段有没有权限。
这两个阶段使用mysql数据库的user,db,host表。如果语法涉及表,服务器可以另外参考:、table_priv表和columns_priv表
存储权限的表有:
1、user表
2、db表
3、host表
4、table_priv表
5、columns_priv表
权限控制主要是出于安全因素,因此需要遵循一下几个经验原则:
1、只授予能满足需要的最小权限,防止用户干坏事。比如用户只是需要查询,那就只给select权限就可以了,不要给用户赋予update、insert或者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 是表示所有权限,你也可以使用select、update等权限
ON 用来指定权限针对哪些库和表。
*.* 中前面的*号用来指定数据库名,后面的*号用来指定表名。
TO 表示将权限赋予某个用户。
'root'@'localhost'表示root用户,@后面接限制的主机,可以是IP、IP段、域名以及%,%表示任何地方。注意:这里%
注意一点:有的版本不包括本地,以前碰到过给某个用户设置了%允许任何地方登录,但是在本地登录不了,这个和版本有关系,遇到这个问题再加一个localhost的用户就可以了。
IDENTIFIED BY 指定用户的登录密码。
WITH GRANT OPTION 这个选项表示该用户可以将自己拥有的权限授权给别人。注意:经常有人在创建操作用户的时候不指定WITH GRANT OPTION选项导致后来该用户不能使用GRANT命令创建用户或者给其它用户授权。
备注:可以使用GRANT重复给用户添加权限,权限叠加,比如你先给用户添加一个select权限,然后又给用户添加一个insert权限,那么该用户就同时拥有了select和insert权限。
创建用户
//登录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用户权限
修改前查看表
phplamp 用户登录
查看数据库,及库中表 ,权限设置成功
只授权部分权限:
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';
回收用户权限