MySQL スタートアップ・ガイド
1.
MySQL はじめの一歩
背景
MySQLは様々なアプリケーションで利用されている、著名なデータベースサーバです。SQLは(S)tructured (Q)uery (L)anguage(構造化問い合わせ言語)を表し、MySQLはこのSQLを使用して他のプログラムと通信します。加えて、MySQLには独自の拡張SQL関数が用意されおり、ユーザに追加機能を提供しています。このドキュメントでは、初期インストール、データベースとテーブルのセットアップ、新規ユーザの作成方法について見ていきます。
それではインストールから始めましょう。
MySQLのインストール
まず最初に、あなたのシステムにMySQLをインストールします。MySQLの特定の機能が必要な場合は、それ用のUSEフラグを有効にしてください。インストールが最適なものとなります。
コード表示 1.1: MySQLをインストールする |
# emerge --pretend --verbose mysql
# emerge mysql
|
インストールが完了すると、次のメッセージが表示されます。
コード表示 1.2: MySQLのeinfoメッセージ |
You might want to run:
"emerge --config =dev-db/mysql-[version]"
if this is a new install.
|
新規インストールですので、表示されたこのコマンドを実行し、MySQLを設定します。設定中にプロンプトが表示された場合は、ENTERキーを押して下さい。
この構成ではMySQLのメインデータベースmysqlがセットアップされ、メインデータベースには管理情報(データベース、テーブル、ユーザ、権限など)が格納されます。
また、設定ではできる限り早くrootパスワードを変更するよう推奨されます。もちろんこの推奨に従いましょう。さもなければ、通りすがりの誰かにデフォルト設定のMySQLサーバをハックされかねません。
コード表示 1.3: MySQLの設定 |
# emerge --config =dev-db/mysql-[version]
* MySQL DATADIR is /var/lib/mysql
* Press ENTER to create the mysql database and set proper
* permissions on it, or Control-C to abort now...
Preparing db table
Preparing host table
Preparing user table
Preparing func table
Preparing tables_priv table
Preparing columns_priv table
Installing all prepared tables
To start mysqld at boot time you have to copy support-files/mysql.server
to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, issue the following commands to start the server
and change the applicable passwords:
/etc/init.d/mysql start
/usr/bin/mysqladmin -u root -h pegasos password 'new-password'
/usr/bin/mysqladmin -u root password 'new-password'
Depending on your configuration, a -p option may be needed
in the last command. See the manual for more details.
* For security reasons you should set your MySQL root
* password as soon as possible.
|
重要:
mysql-4.0.24-r2以降では、rootパスワードをより安全にするため、この設定中にパスワードを入力するようになっています。
|
パスワード設定のために必要なコマンドは、既に上の設定中に表示されています。それではそれらコマンドを実行しましょう。
コード表示 1.4: MySQLのrootパスワードを設定する |
# /etc/init.d/mysql start
* Re-caching dependency info (mtimes differ)...
* Starting mysqld (/etc/mysql/my.cnf) ... [ ok ]
# /usr/bin/mysqladmin -u root -h localhost password 'new-password'
|
rootパスワードが正常に設定されているか確認するには、MySQLサーバにログインしてみます。
コード表示 1.5: mysqlコマンドを使用してログインする |
$ mysql -u root -h localhost -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 4.0.25
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
|
引数 -u でログインするユーザを設定します。
-hでホストを設定します。リモートサーバを設定している場合を除いて、通常はlocalhostになります。
最後に、-p で接続用パスワードを入力することをmysqlクライアントに伝えます。
mysql>というプロンプトを見て下さい。ここに全てのコマンドを入力します。
これでrootユーザとしてmysqlプロンプトに入れましたので、データベースのセットアップへ進みましょう。
2.
データベースのセットアップ
データベースの作成
ログインは済んでおり、mysqlプロンプトが表示されている状態です。まずは既に作成されているデータベースを見てみましょう。SHOW DATABASESコマンドを使用して、作成済みのデータベースを見ることができます。
コード表示 2.1: データベースを表示する |
mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.09 sec)
|
重要:
MySQLのコマンドはセミコロン(;)で終わることに注意して下さい。
|
既にテスト用データベースが構築されていますが、自前のデータベースを作成します。データベースの作成にはCREATE DATABASEコマンドを使用します。「gentoo」という名前のデータベースを作成しましょう。
コード表示 2.2: データベースgentooを作成する |
mysql> CREATE DATABASE gentoo;
Query OK, 1 row affected (0.08 sec)
|
応答メッセージによって、エラー無しでコマンドが実行されたことが分かります。
またここでは1行が変更されています。これは、全データベースのリストが格納されている、メインデータベースmysqlへの参照です。しかし裏側の細かいことについてあまり考える必要はありません。
最後の数値はクエリの実行速度です。
もう一度SHOW DATABASESコマンドを実行すると、データベースが作成されたことを確認できます。
コード表示 2.3: データベースが作成されたことを確認する |
mysql> SHOW DATABASES;
+----------+
| Database |
+----------+
| gentoo |
| mysql |
| test |
+----------+
3 rows in set (0.00 sec)
|
確かにデータベースが作成されていました。
この新しいデータベースgentooにテーブルを作成するには、gentooを現在の接続先データベースとして選択する必要があります。そのためにはUSEコマンドを使用します。USEコマンドは、接続先としたいデータベースの名前を引数にします。他には、mysqlコマンドの-Dオプションの後にデータベースの名前を指定する方法があります。それでは接続先をデータベースgentooに変更しましょう。
コード表示 2.4: 接続先データベースを変更する |
mysql> USE gentoo;
Database changed
|
上で作成したデータベースgentooに接続できました。これでデータベースgentooを使用可能になりましたので、テーブルを作成しデータを格納していきましょう。
3.
MySQLのテーブルを操作する
テーブルの作成
MySQLの構成には、データベース、テーブル、レコード、フィールドがあります。
データベースにはテーブルが格納され、そのテーブルにはレコードが格納され、レコードにはフィールドが格納されます。そしてフィールドには実際のデータが格納されます。この構成により、ユーザはどのようにデータにアクセスするかを選択することができます。
これまではデータベースに取り組んできましたので、ここからはテーブルを操作しましょう。
まず始めに、データベースと同様テーブルもSHOW TABLESコマンドを使用して一覧表示することができます。現在のところデータベースgentooにはテーブルがありませんので、コマンドの実行結果は以下のようになります。
コード表示 3.1: 空っぽのデータベースgentoo |
mysql> SHOW TABLES;
Empty set (0.00 sec)
|
つまりはテーブルを作成する必要があるということです。そのためには、CREATE TABLEコマンドを使用します。しかしながらこのコマンドは、シンプルなCREATE DATABASEコマンドとは全く違います。このコマンドには一連の引数が必要です。以下のようなフォーマットです。
コード表示 3.2: CREATE TABLE の構文 |
CREATE TABLE [table_name] ([field_name] [field_data_type]([size]));
|
table_nameは作成したいテーブルの名前です。今回はdevelopersという名前で作成しましょう。このテーブルには開発者(developer)の名前、メールアドレス、仕事を格納します。
field_nameにはフィールドの名前を指定します。今回はフィールドが3つ必要です。name(名前)、email(メールアドレス)、job(職業)です。
field_data_typeは格納されるデータの型です。利用可能な個々の型についてはMySQL Column Types Pageで確認できます。今回の用途では、全てのフィールドにVARCHAR型を使用します。VARCHAR型は文字列を扱う場合にもっともシンプルなデータ型です。
sizeには格納される1フィールドのデータ長を指定します。ここでは128とします。
つまりこのフィールドには128バイトのVARCHAR型データを格納できるということです。これは、とりあえずは128文字という意味と考えておいて大丈夫ですが、上のサイトに掲載されているようにより技術的な説明もあります。
これでテーブルの作成方法が分かりましたので、実際に作成してみましょう。
コード表示 3.3: テーブルを作成する |
mysql> CREATE TABLE developers ( name VARCHAR(128), email VARCHAR(128), job VARCHAR(128));
Query OK, 0 rows affected (0.11 sec)
|
テーブルをうまく作成できたようです。SHOW TABLESコマンドでチェックしてみましょう。
コード表示 3.4: テーブルを確認する |
mysql> SHOW TABLES;
+------------------+
| Tables_in_gentoo |
+------------------+
| developers |
+------------------+
1 row in set (0.00 sec)
|
はい、テーブルが出来ていました。しかしながら、フィールドに設定した型に関する情報が見当たりません。そのためには、DESCRIBEコマンド(もしくは省略してDESCコマンド)を使用します。このコマンドの引数にはテーブル名を指定します。
このコマンドでテーブルdevelopersの情報を見てみましょう。
コード表示 3.5: テーブルdevelopersの情報を表示する |
mysql> DESCRIBE developers;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| name | varchar(128) | YES | | NULL | |
| email | varchar(128) | YES | | NULL | |
| job | varchar(128) | YES | | NULL | |
+-------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)
|
個々のフィールドとその型が表示されました。また、このドキュメントでは解説しない情報がいくつか表示されています。さらなる情報はMySQL Reference Manualで確認して下さい。
これでテーブルが利用可能になりましたので、さらに先に進んでデータを登録していきましょう。
MySQLにデータを登録する
データを登録する(もしくは追加する)には、INSERTコマンドを使用します。CREATE TABLEコマンドと同様、INSERTコマンドにも特定のフォーマットがあります。
コード表示 3.6: INSERT の構文 |
INSERT INTO table (col1, col2, ...) VALUES('value1', 'value2', ...);
|
このコマンドでテーブルにレコードを挿入します。
tableにはデータを登録したいテーブルを指定します。
テーブル名の後には、データを挿入する列名のリストが続き、VALUES()にはテーブルに挿入したい値を指定します。全ての列にデータを挿入し、かつ列の定義順通りに値を記述する場合には、列名のリストを省略することができます。
今回はテーブルdevelopersにデータを挿入します。サンプルデータを挿入してみましょう。
コード表示 3.7: テーブルdevelopersにデータを挿入する |
mysql> INSERT INTO developers VALUES('Joe Smith', 'joesmith@gentoo.org', 'toolchain');
Query OK, 1 row affected (0.06 sec)
mysql> INSERT INTO developers (job, name) VALUES('outsourced', 'Jane Doe');
Query OK, 1 row affected (0.01 sec)
|
表示されたメッセージによると、データは正常に挿入されたようです。もし複数のデータを挿入したい場合はどうでしょう?ここでLOAD DATAコマンドの登場です。このコマンドはタブ区切りのファイルからデータを読み込みます。試しにデータの入ったファイルをホームディレクトリに作成して読み込んでみましょう。ファイルをrecords.txtとします。
以下はサンプルです。
コード表示 3.8: ~/records.txt |
John Doe johndoe@gentoo.org portage
Chris White chriswhite@gentoo.org documentation
Sam Smith samsmith@gentoo.org amd64
|
重要:
扱っているデータをよく確かめるようにして下さい。ファイルの中身がよく分からないのにLOAD DATAコマンドを使用するのは非常に危険です。
|
LOAD DATAコマンドの記述はいくぶん長たらしいものですが、ここでは最もシンプルなフォーマットを使ってみましょう。
コード表示 3.9: LOAD DATA の構文 |
LOAD DATA LOCAL INFILE '/path/to/filename' INTO TABLE table;
|
/path/to/filenameには使用するファイルのパスとファイル名を指定します。tableにはテーブル名を指定します。この場合、ファイルは~/records.txtでテーブルはdevelopersです。
コード表示 3.10: データを読み込む |
mysql> LOAD DATA LOCAL INFILE '~/records.txt' INTO TABLE developers;
Query OK, 3 rows affected (0.00 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
|
重要:
おかしな挙動が見られた場合は、フィールドがタブで区切られていることを確認して下さい。もし他の場所からデータを貼り付けた場合は、タブがスペースに変換されてしまっているかもしれません。
|
うまくいきました。しかし、この例は単純にレコードを挿入しただけで、MySQLを制御したとは言えません。
MySQLを素早く簡単に設定するために、多くのウェブアプリケーションではsqlスクリプトが利用されています。sqlスクリプトを利用したい場合、mysqlコマンドをバッチモードで実行するか、sourceコマンドでスクリプトファイルから読み込みます。
以下はmysqlコマンドをバッチモードで実行する例です。
コード表示 3.11: バッチモード |
$ mysql -u root -h localhost -p < sqlfile
|
LOAD DATAコマンドと同様、sqlfileが何を行っているのかよく理解しておいて下さい。理解しておかないと、データベースに障害が起きかねません!
もう一つの方法としてsourceコマンドを使用する方法があります。このコマンドは、インタラクティブモードでsqlファイルからスクリプトを読み込みます。
以下のようにsoureコマンドでsqlファイルから読み込みます。
コード表示 3.12: sqlファイルから読み込む |
mysql> source sqlfile;
|
もしウェブアプリケーションにおいてsqlファイルを実行する必要がある場合、上記2つの方法が利用できます。
これでテーブルの用意ができましたが、どうやってフィールドを確認しましょう?フィールドの確認にはクエリを使用してテーブルを検索します。
クエリを使用してMySQLのテーブルを閲覧する
クエリはどんなSQLデータベースにも当てはまる主な特徴の一つです。クエリを使えばテーブルの中のデータを有効なものにすることができます。ほとんどのクエリがSELECTコマンドを使用します。SELECTコマンドはかなり複雑ですから、このドキュメントでは主だった3つの形式を見てみます。
コード表示 3.13: SELECT の形式 |
SELECT * FROM table;
SELECT * FROM table WHERE field=value;
SELECT field1,field2,field3 FROM table [WHERE field=value];
|
最初の形式を簡単に見てみましょう。比較的シンプルで、テーブル全体を確認することができます。それではここまででどんなデータが入っているかSELECTコマンドで確認してみましょう。
コード表示 3.14: テーブルの内容 |
mysql> SELECT * FROM developers;
+-------------+-----------------------+----------------+
| name | email | job |
+-------------+-----------------------+----------------+
| Joe Smith | joesmith@gentoo.org | toolchain |
| John Doe | johndoe@gentoo.org | portage |
| Chris White | chriswhite@gentoo.org | documentation |
| Sam Smith | samsmith@gentoo.org | amd64 |
| Jane Doe | NULL | Outsourced job |
+-------------+-----------------------+----------------+
5 rows in set (0.00 sec)
|
INSERTコマンドで挿入したデータと、LOAD DATAコマンドで挿入したデータが両方存在しています。では、Chris Whiteのデータだけ見たいとしましょう。以下に示したように、これにはselectの2番目の形式を使用します。
コード表示 3.15: SELECTコマンドで特定のデータを選択する |
mysql> SELECT * FROM developers WHERE name = 'Chris White';
+-------------+-----------------------+---------------+
| name | email | job |
+-------------+-----------------------+---------------+
| Chris White | chriswhite@gentoo.org | documentation |
+-------------+-----------------------+---------------+
1 row in set (0.08 sec)
|
期待通り、探していたデータだけが選択されました。では、名前(name)を除いた職業(job)とメールアドレス(email)だけを知りたいとしましょう。下に示したように、SELECTの3番目の形式を使用すれば可能です。
コード表示 3.16: SELECTを使用して特定のデータとフィールドを選択する |
mysql> SELECT email,job FROM developers WHERE name = 'Chris White';
+-----------------------+---------------+
| email | job |
+-----------------------+---------------+
| chriswhite@gentoo.org | documentation |
+-----------------------+---------------+
1 row in set (0.04 sec)
|
この選択の方法は他の2つの形式に比べて扱い易く、後でみるように特に大きなデータの場合に有効です。
今現在我々はrootユーザですから、MySQLサーバに対して望んだとおり何でもできる無制限の許可を持っています。サーバ環境においては、そのような権限を持ったユーザには極めて問題があります。データベースに対して誰が何をするのか制御するために、権限を設定しましょう。
4.
MySQLの権限
GRANTコマンドで権限を付与する
権限とは、データベース、テーブルなどあらゆるものに対して、ユーザがどのようなアクセス権を持っているかを表すものです。データベースgentooでは今のところ、MySQLのrootユーザだけが、許可を与えられアクセス可能なアカウントです。それでは、データベースgentooにアクセスしてデータを利用するのに、もう少し一般的なユーザ、guestとadminを作成してみましょう。guestは制限付のアカウントです。データベースからデータを取り出すことのみ可能であり、他には何もできません。adminはrootアカウントと同様の権限を持ちますが、ただしデータベースgentooに対してのみです(メインデータベースmysqlに対しては持たない)。ユーザ作成の前に、GRANTコマンドの簡易な形式について詳しく見てみましょう。
コード表示 4.1: GRANT 構文 |
GRANT [privileges] ON database.* TO '[user]'@'[host]' IDENTIFIED BY '[password]';
|
注意:
GRANTコマンドはユーザを作成する方法として用いられています。後のバージョンにはCREATE_USER関数が導入されてはいますが、GRANTが依然好まれています。
|
まず与えたい権限を挙げます。ここまで学んできたことから、いくつか設定できる権限を挙げます。
-
ALL - データベースに対する全ての権限を与える
-
CREATE - テーブル作成を許可する
-
SELECT - テーブルへの問い合わせを許可する
-
INSERT - テーブルへのデータ挿入を許可する
-
SHOW DATABASES - データベースの一覧を閲覧することを許可する
-
USAGE - 権限なし
-
GRANT OPTION - 権限を与えることを許可する
注意:
ウェブアプリケーションとのやり取りのためにMySQLを使用しているなら、必要なのはCREATE、SELECT、INSERT(この文書で解説しています)、DELETE と UPDATE( MySQL Reference Manual - GRANT and REVOKE Syntaxを参照)くらいでしょう。多くの人が、必要もないのに全ての権限を与えてしまいますが、それは間違いです。そのような権限では通常の業務に支障があるか、アプリケーション開発者と確認してみて下さい。
|
adminユーザとしては、全ての権限が必要です。guestユーザとしては参照のみのアクセスですからSELECT権限で十分です。
databaseはユーザに権限を与えたいデータベースを指定します。この例ではgentooになります。.* は全てのテーブルを意味しています。もしそうしたいなら、テーブル毎に適用することも可能です。userにはユーザ名を、hostにはそのユーザがアクセスしてくるホスト名を指定します。ほとんどの場合がloalhostになります。最後にpasswordにはユーザのパスワードを指定します。これらの情報を設定して、ユーザを作成しましょう。
コード表示 4.2: adminユーザとguestユーザを作成する |
mysql> GRANT ALL ON gentoo.* TO 'admin'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT SELECT ON gentoo.* TO 'guest'@'localhost' IDENTIFIED BY 'password';
|
ユーザの設定ができましたので、テストしてみましょう。まずプロンプトにquitと入力してmysqlクライアントを終了させます。
コード表示 4.3: MySQLクライアントを終了する |
mysql> quit
|
これでコンソールに戻りました。ユーザの設定はできていますので、ユーザにどんなことが可能か見てみましょう。
ユーザの権限をテストする
guestユーザとしてログインしてみます。今のところ、guestユーザにはSELECT権限しかありません。基本的には検索のみで他には何もできないということです。それではguestユーザでログインしてみましょう。
コード表示 4.4: guestユーザでログインする |
$ mysql -u guest -h localhost -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6 to server version: 4.0.25
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
|
制限が効いているかテストします。データベースgentooに接続しましょう。
コード表示 4.5: データベースgentooに接続する |
mysql> USE gentoo;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
|
許可されていないことをしてみましょう。テーブルを作成してみます。
コード表示 4.6: guestユーザでテーブル作成を試みる |
mysql> CREATE TABLE test (test VARCHAR(20), foobar VARCHAR(2));
ERROR 1044: Access denied for user: 'guest@localhost' to database 'gentoo'
|
ご覧のように、適切なアクセス権を持っていないので失敗しました。しかしながら、許可した権限はSELECTです。これを試してみましょう。
コード表示 4.7: SELECTを試みる |
mysql> SELECT * FROM developers;
+-------------+-----------------------+----------------+
| name | email | job |
+-------------+-----------------------+----------------+
| Joe Smith | joesmith@gentoo.org | toolchain |
| John Doe | johndoe@gentoo.org | portage |
| Chris White | chriswhite@gentoo.org | documentation |
| Sam Smith | samsmith@gentoo.org | amd64 |
| Jane Doe | NULL | Outsourced job |
+-------------+-----------------------+----------------+
5 rows in set (0.00 sec)
|
このコマンドはうまくいきました。これでユーザ権限でどのようなことができるのか少し分かりました。私たちはadminユーザも作成しています。このユーザで、全ての権限を与えられたユーザでさえも制限があることをお見せします。mysqlクライアントを終了して、adminユーザとしてログインしてみましょう。
コード表示 4.8: adminとしてログインする |
mysql> quit
Bye
$ mysql -u admin -h localhost -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7 to server version: 4.0.25
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
|
手始めに、adminユーザでデータベースを作成してみます。このadminユーザはrootアカウントと同様の権限を持っており、データベースgentooに対してどんな変更も可能です。以下ではメインデータベースmysqlに対する権限を確認します。特定のデータベースに対してだけ権限を設定したことを思い出して下さい。
コード表示 4.9: 新しいデータベースの作成を試みる |
mysql> CREATE DATABASE gentoo2;
ERROR 1044: Access denied for user: 'admin@localhost' to database 'gentoo2'
|
データベースgentooに対して全ての権限を持つにも関わらず、adminユーザではメインデータベースにデータベースを作成することができませんでした。それでもadminユーザでデータベースgentooを変更することはできます。以下にデータ挿入の例を示します。
コード表示 4.10: データベースgentooでのadminの権限 |
mysql> USE gentoo;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> INSERT INTO developers VALUES('Bob Simmons', 'bobsimmons@gentoo.org', 'python');
Query OK, 1 row affected (0.08 sec)
|
adminユーザは好きなようにデータベースgentooにアクセスできます。また時にはユーザから権限を剥奪する必要があります。問題のあるユーザから退職した社員まで、色々な場合がありえます。ではREVOKEコマンドでユーザ権限を無効にする方法を見てみましょう。
REVOKEコマンドでユーザ権限を削除する
REVOKEコマンドを使用すると、ユーザに対してアクセスを拒否することができます。全てのアクセスを拒否することもできますし、特定のアクセスを拒否することもできます。実際のところ、構文はGRANTコマンドに非常に似ています。
コード表示 4.11: REVOKE の構文 |
REVOKE [privileges] ON database.* FROM '[user]'@'[host]';
|
オプションについてはGRANTコマンドの項で説明しています。このセクションでは、ユーザに対して全てのアクセスを拒否します。guestユーザがセキュリティの点で問題を引き起こすと分かったとしましょう。全ての権限を剥奪することにします。rootとしてログインし、必要な処置を行います。
コード表示 4.12: ユーザ権限を剥奪する |
mysql> REVOKE ALL ON gentoo.* FROM 'guest'@'localhost';
Query OK, 0 rows affected (0.00 sec)
|
注意:
今回はユーザ権限がシンプルであり、データベース毎の剥奪で問題になりませんでした。しかしながら、より大規模なケースで全てのデータベースへのアクセス権削除するには、「gentoo.*」よりも「*.*」を使用するのがよいでしょう。
|
それでは一旦mysqlクライアントを終了させてから、ユーザguestとしてログインしてみましょう。
コード表示 4.13: ユーザguestとしてログインを試みる |
$ mysql -u guest -h localhost -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9 to server version: 4.0.25
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
|
ログインはできましたが、データベースgentooへのアクセス権はありません。
コード表示 4.14: ユーザguestのアクセスが拒否される |
mysql> USE gentoo;
ERROR 1044: Access denied for user: 'guest@localhost' to database 'gentoo'
|
これで問題のあるユーザがデータベースgentooにアクセスすることはできなくなりました。しかしログインはできたことに注意して下さい。これはメインデータベースmysqlにユーザが残っているためです。DELETEコマンドとユーザ情報テーブルを使用してユーザを完全に削除する方法を見てみましょう。
DELETEコマンドでユーザを削除する
ユーザ情報テーブルには全てのユーザとそのユーザに関する情報の一覧があります。rootユーザでログインしていることを確認して、メインデータベースmysqlを利用してみましょう。
コード表示 4.15: メインデータベースmysqlを利用する |
mysql> USE mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql>
|
ではメインデータベースmysqlがどんなテーブルを持っているか見てみましょう。
コード表示 4.16: mysqlのテーブル一覧 |
mysql> SHOW TABLES;
+-----------------+
| Tables_in_mysql |
+-----------------+
| columns_priv |
| db |
| func |
| host |
| tables_priv |
| user |
+-----------------+
6 rows in set (0.00 sec)
|
探していたのはテーブルuserです。しかしテーブルuserには30ものフィールドがあり、照会するのは大変です。そこで照会を楽にするために、SELECTコマンドの3番目の形式を使いましょう。必要なフィールドはHostとUserです。
コード表示 4.17: テーブルuserからユーザguestを探す |
mysql> SELECT Host,User FROM user WHERE User = 'guest';
+-----------+-------+
| Host | User |
+-----------+-------+
| localhost | guest |
+-----------+-------+
1 row in set (0.00 sec)
|
必要な情報は揃いましたので、ユーザguestを削除できます。DELETEコマンドを使用して可能ですので、下に構文を示します。
コード表示 4.18: DELETE の構文 |
DELETE FROM table WHERE field='value';
|
DELETEの構文はSELECTにどこか似ていることに気づくかもしれません。今回のケースではfieldがUserで、valueがguestになります。これでUserがguestであるレコードがテーブルuserから削除され、ユーザguestを完全に消すことができます。それではやってみましょう。
コード表示 4.19: ユーザguestを削除する |
mysql> DELETE FROM user WHERE User='guest';
Query OK, 1 row affected (0.07 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
|
うまくいったようです。確認のためログアウトしてからユーザguestでログインしてみましょう。
コード表示 4.20: ユーザguestでログインを試みる |
mysql> quit
Bye
$ mysql -u guest -h localhost -p
Enter password:
ERROR 1045: Access denied for user: 'guest@localhost' (Using password: YES)
|
ユーザがみごと削除されました!
結論
このガイドでは主にコマンドラインでのMySQLのセットアップを解説しましたが、別の方法としてGUIでのセットアップもいくつか提供されています。
これでMySQL入門チュートリアルは終了です。このチュートリアルがMySQLの基礎の理解と、データベースのセットアップに関する理解の助けになれば幸いです。何かコメントがあればChris Whiteまでメールして下さい。
このドキュメントの内容は、他のものが明示されない限りは、
CC-BY-SA-2.5ライセンスです。
Gentoo Name and Logo Usage Guidelines (日本語訳)が適用されます。
|