急ぎですのでピンポイント回答者様に1000pt差し上げます。

**SQL初心者なのでそれなりのレベルに合わせたご回答をお願いします。

WindowsServer2003でMySQL5を使用しています。

MySQLAdministratorで操作を間違え、rootユーザの削除をしてしまい、rootでの作業ができなくなりました。
その後、下記のサイトを参考にして、6.のrootに新しいパスを設定する所までは行いました。
http://dev.mysql.com/doc/refman/5.0/en/resetting-permissions.html

が、ユーザの権限部分?だと思うのですが、information_schemaのUSER_PRIVILEGESが1行しかなく、root@localhostにPRIVILEGE_TYPEがUSAGEとして設定されているだけです。

とりあえずrootが再作成できればいいので、全ての権限をONで再作成するSQL文を教えてください。

一応バックアップサーバに同等のテーブルがありますが、これを転記/SQL構文の作成もよくわからないので、
「○○をinsertしてください。」ではなく具体的なSQL文を示していただければ幸いです。
(質問文が長すぎると蹴られてしまったので続きはコメントに記載します)

回答の条件
  • 1人5回まで
  • 登録:2008/09/23 12:14:38
  • 終了:2008/09/23 18:24:26

ベストアンサー

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/09/23 12:48:55

ポイント35pt

以下の手順を実行してください。

ご質問手順を行ったことがないので分かりませんが、権限が失われた状態の root ユーザーが存在していれば、手順の4,4-1はスキップできます。


1.DOSプロンプトを開き、MySQL\bin ディレクトリに移動してください。


2.MySQLサービスを停止してください。

net stop mysql


3.MySQLサービスを認証無効モードで起動してください。

net start mysql --skip-grant-tables


4.rootユーザーを作成してください。

mysql -u root


これ以降は、MySQL プロンプトでの作業になります。


4-1.MySQL DB を選択し、rootユーザーのパスワードを設定してください。

use mysql;

update user set password=PASSWORD('パスワード') where user='root';


4-2.rootユーザーの権限を設定してください。

update user set Select_priv='Y', Insert_priv='Y', Update_priv='Y', Delete_priv='Y', Create_priv='Y', Grant_priv='Y', Alter_priv='Y' where User='root';


4-3.設定値を反映し、MySQLコマンドを終了します。

flush privileges.

exit;


これ以降は、再びDOSプロンプトでの作業になります。


5.MySQLサービスを停止、再起動してください。

net stop mysql

net start mysql

id:kitamati

細かい事を確認しますが、、

・指定するフィールド名に"_priv"とついているのは MySQLのエスケープ処理 で合っていますでしょうか

・4-2の手順だとフィールドに追加される値は"Y"ですよね?

バックアップサーバのほうは全て"YES"となっています。

2008/09/23 13:23:26

その他の回答(1件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/09/23 12:48:55ここでベストアンサー

ポイント35pt

以下の手順を実行してください。

ご質問手順を行ったことがないので分かりませんが、権限が失われた状態の root ユーザーが存在していれば、手順の4,4-1はスキップできます。


1.DOSプロンプトを開き、MySQL\bin ディレクトリに移動してください。


2.MySQLサービスを停止してください。

net stop mysql


3.MySQLサービスを認証無効モードで起動してください。

net start mysql --skip-grant-tables


4.rootユーザーを作成してください。

mysql -u root


これ以降は、MySQL プロンプトでの作業になります。


4-1.MySQL DB を選択し、rootユーザーのパスワードを設定してください。

use mysql;

update user set password=PASSWORD('パスワード') where user='root';


4-2.rootユーザーの権限を設定してください。

update user set Select_priv='Y', Insert_priv='Y', Update_priv='Y', Delete_priv='Y', Create_priv='Y', Grant_priv='Y', Alter_priv='Y' where User='root';


4-3.設定値を反映し、MySQLコマンドを終了します。

flush privileges.

exit;


これ以降は、再びDOSプロンプトでの作業になります。


5.MySQLサービスを停止、再起動してください。

net stop mysql

net start mysql

id:kitamati

細かい事を確認しますが、、

・指定するフィールド名に"_priv"とついているのは MySQLのエスケープ処理 で合っていますでしょうか

・4-2の手順だとフィールドに追加される値は"Y"ですよね?

バックアップサーバのほうは全て"YES"となっています。

2008/09/23 13:23:26
id:pahoo No.2

pahoo回答回数5960ベストアンサー獲得回数6332008/09/23 13:51:11

ポイント35pt

・指定するフィールド名に"_priv"とついているのは MySQLのエスケープ処理 で合っていますでしょうか

いいえ。

Select_priv は select 文の実行権限を許可するフィールド名です。

Update_priv は update 文の実行権限、Delete_priv は delete 文の実行権限、以下同様です。

・4-2の手順だとフィールドに追加される値は"Y"ですよね?

表示上が YES になっているだけで、Update 文での代入は 'Y' で問題ありません。


※設定された回答回数の上限になりました。さらにフォローが必要でしたら、コメント欄を開けていただくか、回答回数を増やしてください。

id:kitamati

了解しました。

何かおかしくなったら再度質問すると思いますので宜しくお願いします。

2008/09/23 13:55:08
  • id:kitamati
    以下バックアップサーバからCSV形式で取り出した内容の一部です。
    ================
    "GRANTEE","TABLE_CATALOG","PRIVILEGE_TYPE","IS_GRANTABLE"
    "'root'@'localhost'","","SELECT","YES"
    "'root'@'localhost'","","INSERT","YES"
    "'root'@'localhost'","","UPDATE","YES"




    これをINSERT文で追加する方法(SQLの記法)がわかっていません。。。
  • id:kitamati
    50pで質問を作成してしまいました。ピンポイント回答者様にはいるか+ポイント送信で対応させていただきます。
  • id:kitamati
    Select_priv='Y', Insert_priv='Y',Update_priv='Y', Delete_priv='Y', Create_priv='Y', Create_prive='Y',Drop_priv='Y', Reload_priv='Y',Shutdown_priv='Y', Process_priv='Y',File_priv='Y', References_priv='Y',Index_priv='Y', Super_priv='Y'Execute_priv='Y'Grant_priv='Y',Alter_priv='Y' where User='root';

    pahoo様
    上記SQLを投げたところUnknown table 'user' in information_schemaと表示されました。
    これはSCHEMA_PRIVILEGESを指定すればいいのでしょうか?
  • id:kitamati
    訂正)SCHEMA_PRIVILEGESじゃなかったです。
    USER_PRIVILEGESを指定すればいいのでしょうか? ですね。
  • id:kitamati
    訂正2)SQL文の頭にupdate user setが抜けてますね。当然これを付けてSQLを流しています。
    その結果がUnknown table 'user' in information_schemaです。
    すみません。
  • id:pahoo
    Super_priv='Y'Execute_priv='Y'Grant_priv='Y'

    このあたりに , が抜けています。


    落ち着いて、まずは Select_priv を1つだけ設定して成功するかどうか確認してください。
    他の設定は後で追加すればいいですから。
  • id:kitamati
    update user set Select_priv='Y' where User='root';
    を実行した所、同じエラーで失敗してしまいます。
    Unknown table 'user' in information_schema

    USER_PRIVILEGESを指定したほうがいいのでしょうか?

  • id:pahoo
    information_schema データベースに以下の16個のテーブルはありますか。

    CHARACTER_SETS
    COLLATIONS
    COLLATION_CHARACTER_SET_APPLICABILITY
    COLUMNS
    COLUMN_PRIVILEGES
    KEY_COLUMN_USAGE
    ROUTINES
    SCHEMATA
    SCHEMA_PRIVILEGES
    STATISTICS
    TABLES
    TABLE_CONSTRAINTS
    TABLE_PRIVILEGES
    TRIGGERS
    USER_PRIVILEGES
    VIEWS

    もし無かったり内容に問題がありそうだとすると、USER_PRIVILEGESの設定が必要です。
  • id:kitamati
    17個ありました。こちらにはPROFILINGがあります。

    問題がありそうとはどういう状態でしょうか?
  • id:pahoo
    information_schema データベースの内容は環境によって変化するので、一概にどうとは言えないのですが、バックアップしてあるinformation_schemaと比べて内容が違うようでしたら、バックアップしたものに合わせた方がいいでしょう。
    CSVに吐き出してから比較するといいと思います。
  • id:kitamati
    たまたま出社してきた開発に相談したところバックアップサーバから復旧作業を行う事で元に戻りました。
    pahoo様 親身にご協力いただきまして本当にありがとうございました。

    少ないですが、回答ポイントは別に200ポイントばかし送信させていただきます。
  • id:pahoo
    どういたしまして。復旧して良かったですね。
    バックアップは大切ですね。(最近、バックアップをしていなかったために10ファイルほど失った自分‥‥トホホ)

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません