mysql用户权限管理

时间:2022-09-22 08:31:30

  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的技术随笔” 博客,谢绝转载!