a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 52|回复: 0

[其他] Oracle认证:Mysql数据库权限丢失怎么办

[复制链接]
发表于 2012-8-4 13:41:06 | 显示全部楼层 |阅读模式
今天要安装一个软件,需要用到Mysql数据库,要在里面建一个数据库,及相应的用户,我按其脚本执行建库脚本,很顺利,数据库成功建好,但在执行用户授权时却犯了一个低级错误:     create database cactidb ;7 z7 G+ R! ^- ?( w4 H
    grant all on cactidb.* to root@localhost;
2 s  I( `; K% c% ]    grant all on cactidb.* to cactiuser;
( B. t- T1 K* I2 Z    本来这是没什么的,但我之前已经把root@localhost这个用户给删除了,我只留下了用户名为root,host是%的用户,而我平常的操作为了方便都只是用root在本机登录的,我的mysql也只监听127.0.0.1这个地址,结果一执行grant all on cactidb.* to root@localhost;这个命令立即完蛋了,我在本机用root登录就只能是root@localhost这个用户的权限,而不是一平常用的root@%这个用户,但root@localhost基本就是没有权限,按照Mysql的授权机制,我只有在其它主机登录才可使用root@%这个用户,而我根本就不可能从其它地址登录,这下把我给急坏了。由于严格的防火墙策略,我是不可能开放mysql的端口的。后来在网上找了相关资料,用以下方法解决了这个问题:, }& k% s3 M0 @1 G+ r
    1、 关闭mysql服务:service mysqld stop
" Q1 j7 Q. w: `9 G7 H: L0 N    2、 ./mysqld_safe --skip-grant-tables 重新启动mysql
3 e3 [# A% F: m8 E9 w  F+ ]    3、 重新使用root登录,此时不需要密码( v  \# U4 N7 i) V) r2 A
    4、 登录后删除root@local这个用户$ O5 s0 V% U: ?/ N
    5、 用ps查到mysqld进程,并用kill中止mysql进程" C  g- l1 W: @9 h  q1 K
    6、 重新启动mysql进程: service mysqld start& P8 x5 E5 I: J! \
    7、 当然使用这个方法也可重置root密码: set password for root =password(yourpass');& M& `3 s, e; @+ o6 j
    8、或者也可以重置root用户权限4 F, q! _2 g& q$ F& a5 S2 ?; B) h
    update db set Select_priv='Y' where user='root';
" M9 X+ {( _$ a/ `1 u" O    update db set Insert_priv='Y' where user='root';9 o. X9 ~2 r8 d6 k+ |3 U
    update db set Update_priv='Y' where user='root';: }$ ?. v8 r  v+ A8 O
    update db set Delete_priv='Y' where user='root';& q  |: S) m% s; q6 f
    update db set Create_priv='Y' where user='root';
5 u  s! V6 ^7 |! }    update db set Drop_priv='Y' where user='root';( q- \$ V8 {. w9 @& [- D. w
    update db set References_priv='Y' where user='root';/ [2 g! B3 c( [
    update db set Grant_priv='Y' where user='root';& U, N. m* t; @( h6 G# f
    update db set Index_priv='Y' where user='root';9 M2 J( g9 s( f/ K& b$ f; S" [
    update db set Alter_priv='Y' where user='root';
7 q) r. A) \8 J! J8 O, U% C- C  _! a    update db set Create_tmp_table_priv='Y' where user='root';
1 F" k: q0 w* I/ X4 M    update db set Lock_tables_priv='Y' where user='root';* J9 R0 [/ \8 K; L% c( @! C
    update db set Create_view_priv='Y' where user='root';3 |" ^' n1 |( e6 S
    update db set Grant_priv='Y' where user='root';
+ ^- n6 j' D7 a- i$ g2 V+ o    update db set Show_view_priv='Y' where user='root';
; v3 `4 k: G' V5 w1 G: R    update db set Create_routine_priv='Y' where user='root';0 t5 v: I0 z7 N% C: w& M
    update db set Alter_routine_priv='Y' where user='root';
/ ~5 e) V) b2 l( g    update db set Execute_priv='Y' where user='root';+ s, _7 d6 @4 |4 P3 p- G! c2 K8 w5 Q
    再把mysql.user表里root用户的所有字段都置为'Y'; A, m9 a. j$ }( o  K+ A- R
    注意使用--skip-grant-tables 启动mysql时不可使用grant命令的,所以只有我们手工来理发权限表
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-4 14:24 , Processed in 0.250588 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表