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参数
本文出自 “Jim的技术随笔” 博客,谢绝转载!