mysql数据在实际生产环境中大量被使用,那平时在做好服务器上防火墙策略以外平时,对mysql下的用户权限也要严格管理,mysql的用户权限都是放在mysql.user这张表里,平时的用户权限管理都是隐式使用着这张表的,先说下权限:权限意义

select查询

insert插入

update更新

delete删除记录,一般用于清空表或者某一条记录

create创建

drop删除,从表空间里删除

grant授予,一般用于给用户授权

references引用

index索引

alter修改表

create temporary tables创建临时表

lock tables锁表

execute执行存储过程,这个比较少用

create view创建视图

show view查看视图

create routine创建存储过程

alter routine修改存储过程

event事务管理,相当于unix系统中的cron任务,通过mysq.event表中设定定时任务

trigger触发器

如果是普通用户一般都是给一些基本的增删改查的权限就够了,平时管理一般就用以下权限:mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

#查所有用户,授予哪个主机的权限,CONCAT整理下查看时会比较清晰直观

mysql> show grants for 'root'@'127.0.0.1';

#用于查看用名对应主机下的权限

mysql> grant all *.* to 'test'@'127.0.0.1' identified by "youpasswd";

#授予test在127.0.0.1下所有库的所有权限登录密码youpasswd,这个如果这个用户没有被创建会隐式

creat用户,这里要注意的是普通用户给这个权限肯定不行,权限太高,比如当前库下有一个daemon库,

给test基本权限,如

CREATE USER 'test'@'127.0.0.1' IDENTIFIED BY "youpasswd";

GRANT SELECT, INSERT, UPDATE, DELETE ON `daemon`.* TO 'test'@'127.0.0.1';

#在这里可以creat创建后再限定权限,当然也可以写

GRANT SELECT, INSERT, UPDATE, DELETE ON `daemon`.* TO 'test'@'127.0.0.1' IDENTIFIED BY "youpasswd";

#当然这里都是给固定主机的权限,也可以给某个地址段,如10.0.%,或者是任意ip即%,当然在实际生产环境

中这样是不允许的

REVOKE INSERT ON `daemon`.* FROM 'test'@'127.0.0.1';

#移除权限

drop user test@127.0.0.1;

#删除用户

#以上的的操作都会隐式FLUSH PRIVILEGES刷新授权表

UPDATE user SET Password = PASSWORD('newpasswd') WHERE user = 'test';

FLUSH PRIVILEGES;

#利用update跟新test密码,需要FLUSH PRIVILEGES刷新授权表

select password('newpasswd');

#生成依赖于mysql的哈希加密的密码,多用于程序内部使用mysql给权限时使用

基本,在平时管理mysql用户权限里大概使用的就是这么多,还有要注意的是在给主机权限的时候要注意2点:能使用内网就一定要内网;要尽量避免使用用域名,能用ip就用ip,以免mysql中DNS反解析,可以在启动时使用/usr/local/mysql/bin/mysqld_safe --skip-name-resolve --user=mysql&

添加--skip-name-resolve参数,当然最好是在my.cnf或者是my.ini中加skip-name-resolve参数