U-style MySQL独学日記  Since2001 メニューに戻る MySQLに戻る
タイトルセットアップ直後のMySQLのセキュリティ設定
文書管理番号 作成日 分類1 分類2 キーワード
MYS0002 2002-07-28 環境 セキュリティ セキュリティ、mysqlデータベース、userテーブル、パスワード、
root、select文、delete文

 セットアップ直後のMySQLはroot(管理者)のパスワードが設定されておらず、しかも誰でも管理者のパスワードを設定できるという仕組みになっています。というわけでこのままの設定でMySQLを運用していると、誰かにのっとられてしまう可能性があります。そこで今日はこの管理者に関する設定と、その他のユーザーの設定することにしました。
 MySQLのユーザー情報はおもしろいことにそれ自体がテーブルとして保管されています。そのテーブルはMySQLデータベースの中のuserというテーブルです。ここには管理者であるRootを含めてユーザーの情報が記録されています。通常(?)たとえばエクセルなどはもしファイルにパスワードを設定しようとしたらセルに情報を書く事はありません。ファイルを保存するときに設定します。MySQLがちょっと意外な気がするのは私が初心者だからでしょうか。
 さて話を戻し、まずこの管理者(root)用のパスワードを設定することにします。

  1. 管理者用パスワードを設定する
    @mysqlモニターを起動する
      
     mysqlモニターの起動方法の詳細は前回のページを参照してください。
    A下記のコマンドを実行して、root(管理者)のパスワードを設定する(ここでは1234というパスワードを設定しています)

     
    B本当に設定されたかどうかをみるために、userテーブルを確認してみます。
      userテーブルの確認のためには、select文を使います。select文は

       select <テーブルの列名(カンマで区切ることによりいくつでも指定可能> from テーブル名;
      *今回は命令文の学習ではないので、次回改めてselect文の学習をします。

      で指定します。テーブル名「user」の中のパスワードをみたいので下記の通り実行しました。
      
      テーブル名の場所がmysql.userとなっていますが、これはmysqlというデーターベースのuserテーブルという意味です。つまり「.」は「の」という風に置き換えると読みやすいようです。パスワードはどうやら暗号化されているようです。指定したパスワードとは異なっています。

  2. 必要なユーザーのみを残す(管理者用パスワードのみを残す)
    1. 1−Bでパスワードの確認を行いましたが、その際にroot以外にもユーザーがいるようです。ユーザーのところに表示はされていませんが名前が’’(名無し)さんが2名(下から2行表示されていませんがそこに2名います)それとパスワードの設定されていないrootさんです。先ほどmysqlと入力してmysqlモニターが起動しましたが、これはおそらく名無しさんで入れたからだと思います。ではuserテーブルの中身をすべて見てみます。select文ですべての列を見るには*を使います。

      なんだかわけのわからない表がでてきました。やっぱりわからないので列をuser,host,passwordに限定してみることにします。

      今度は4人いることがわかると思います。mysqlではデフォルト(初期状態)では4人のユーザーが設定されています。
      localhosは現在利用しているパソコンをさし、%はネットワークをさすようです。上の表を上からみていくと、

      1:root localhost       現在利用しているパソコン上のrootさん
      2:root %            ネットワーク上のrootさん
      3:名無しさん localhost  現在利用しているパソコン上の名無しさん
      4:名無しさん %       ネットワーク上の名無しさん

      というユーザーが最初に登録されているようです。環境にもよりますがとりあえずネットワークからのルートと名無しさんに来てもらってはこまるのと、ローカルでの名無しさんも必要ないので削除することにします。ここで削除してしまっても必要になったら後でユーザー登録すればいいので使わないユーザーは削除してしまいます。ただし2−1の登録情報がないと設定のしようがないので、これは何とか保存しておかねば後々不安です。といってもこの表がとてもみづらいのは事実です。なんとか見やすい方法はないものかとおもいきやありました。それはファイルに出力する方法です。Mysqlでは引数に「-e」をつけることによって結果をファイルに出力することができるようです。mysqlモニターを一度終了してから実行します。mysqlモニターを終了するにはexitコマンドを実行します。以下はmysqlモニターを終了したあとに実行してください。




      出力したファイルを表示したいんですがやっぱり長いので、上記を実行して結果を得るか、出力されたファイルをみてください。

    2. localhostのroot以外を削除する。
      では削除に移ります。削除のコマンドは「delete」です。delete文は削除するレコードの指定にwhereを使います。詳細については後日学習すると思うので、ここでは言われたとおり(書いてある通り)に実行してみました。



      上記はいらない3名を特定するためにパスワードが’’、つまり設定されていないものを対象としました。これは先ほどlocalhostのrootにパスワードを設定したので、rootが残るようになりました。削除にあたってはもちろんほかの条件を指定することもできます。たとえば
      where user='';(ダブルクウォーテーションではないです。「’」を二つ続けたものです。)
      を指定すれば名無しさんのみを削除することができます。

      userテーブルの内容を確認してみます

      無事root(管理者)のみが残りました。

    3. mysqlを名無しさんで起動してみる
      セキュリティが正しく設定されているかどうかテストするために、@rootでパスワードを指定せずにuserテーブルを参照する。A名無しさんでuserテーブルを参照する、を試してみます。


      あれ?思いっきり名無しさんで入れてしまっています。もしかしてサーバーを一度再起動をかけないと内容が反映されないのでしょうか。

      一度サーバーを落としてみます。

      windowsの右下のタスクバーのところにある信号機(winsqladminを実行していれば表示されているはずです。詳しくは前回のページを参照)を選択して、上記表の順番どおりに選択してstop service(サーバーを停止させる)を実行します。信号機が赤になればサーバーが停止しています。(これはほんと便利ですね)

      今度は逆にサーバーを開始します。信号機が緑になればサーバーが起動しています。
      さて先ほどできるはずのないmysqlモニターを名無しさんで起動してみます。

      上記の通りエラーになりました。よかった。ついでにルートでパスワードを設定せずにmysqlモニターを起動してみます。するとやはりエラーになりました。これでセキュリティが確保できました。mysqlの起動方法は

      mysql −u <ユーザー名> −p

      です。このコマンドを入力するとパスワードが聞かれますのでそれでmysqlモニターを起動できます。現状ではこのmysqlサーバーにはrootしかないのでrootでmysqlモニターを起動してみます。

      rootで無事にmysqlモニターに入れました。

 


 

感想
 本を一冊かってきました。なかなかわかりやすいです。しかし1冊の本ではどうしても限界があり、ひとつのことを成し遂げるのに何冊の本をみて四苦八苦しています。ひとつのことをやるにも何通りかのやり方があります。いろいろ試していこうとおもいます。

今回のページ作成で参考にさせていただいた本

  1. webデータベース構築ガイド 豊崎直也、豊崎朋子著 ソーテック社出版・・・内容がシンプルで非常にみやすいです。これはお勧めの本です。
  2. 日系ソフトウエア20027月号特集・・・・参考になります。操作方法よりも考え方でお世話になりました。