MySQL/スタートアップガイド

From Gentoo Wiki
< MySQL
Jump to: navigation, search
This page is a translated version of the page MySQL/Startup Guide and the translation is 100% complete.

Other languages:
Deutsch • ‎English • ‎Türkçe • ‎français • ‎русский • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어

この文書は、ユーザーによるMySQLのセットアップと使用を手助けします。

MySQL をはじめる

背景

MySQL は様々なアプリケーションで使用されている人気のあるデータベースサーバーです。SQL は (S)tructured (Q)uery (L)anguage (訳注: 構造化クエリー言語)を意味しており、MySQL はこれを他のプログラムとのやりとりに使っています。それに加えて、MySQL はユーザーに追加機能を提供するため独自の拡張された SQL 機能を有しています。この文書では、MySQL の初期インストール、データベースやテーブルのセットアップ、新しいユーザーの作成をする方法を見ていきます。それでは、インストールの方法から始めましょう。

MySQL のインストール

まず、システムに MySQL がインストールされていることを確認してください。MySQL の特定の機能が必要な場合は、インストールをうまく調整するために必要なUSEフラグを有効化しているか確認してください。

root #emerge --ask mysql

インストールが完了すると、以下の通知が表示されるはずです:

CODE MySQL の einfo メッセージ
You might want to run:
"emerge --config =dev-db/mysql-[version]"
if this is a new install.

今回は新規インストールなのでこのコマンドを実行します。MySQL データベースの設定中に何か尋ねられた場合には ENTER を押す必要があります。設定ではデータベース、テーブル、ユーザー、権限などの管理情報を含む MySQL のメインデータベースをセットアップします。ここでは、できる限り root パスワードを変更することが推奨されています。必ずこれを行ってください、さもないとたまたまやってきた誰かがデフォルト設定の MySQL サーバーを乗っ取ってしまうかもしれません。

root #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.
Note
上のコマンドがホスト名が localhost に設定されているという理由で中断された場合には、ホスト名をたとえば gentoo などの別の名前に変更してください。/etc/conf.d/hostname ファイルを更新してから /etc/init.d/hostname を再起動します。

MySQL についての ebuild 特有でない情報の一部は、この文書をできるだけ一貫したものに保つためにここでは省略しています。

Important
mysql-4.0.24-r2 以降では設定フェーズ内でパスワードを入力します。これにより、root パスワードがより安全になります。

設定スクリプトがパスワードを設定するために実行すべきコマンドを出力していますから、それらを今実行してください。

OpenRC をお使いの場合はこのコマンドを実行します:

root #/etc/init.d/mysql start
 * Re-caching dependency info (mtimes differ)...
 * Starting mysqld (/etc/mysql/my.cnf) ...        [ ok ]

systemd をお使いの場合は代わりに以下のコマンドを実行してください:

root #systemctl restart mysqld.service

>=dev-db/mariadb-10.1.18 では:

root #systemctl restart mariadb.service

その後、root パスワードを設定します:

root #/usr/bin/mysqladmin -u root -h localhost password 'new-password'

MySQL サーバーにログインして、root パスワードが正しく設定されているか確かめることができます:

user $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 プロンプトに入れたので、データベースのセットアップに進めます。

Important
mysql のデフォルトインストールは開発環境のシステムを対象としています。より安全なデフォルト設定にする場合、 /usr/bin/mysql_secure_installation を実行するとよいでしょう。

データベースのセットアップ

データベースの作成

既にログインして mysql プロンプトが表示されています。まず、今あるデータベースを見てみましょう。これを行うには、SHOW DATABASES コマンドを使用します。

mysql>SHOW DATABASES;
+----------+
| Database |
+----------+
| mysql    |
| test     |
+----------+
2 rows in set (0.09 sec)
Important
MySQL のコマンドはセミコロン -- ; -- で終わることを覚えておいてください。

既にテストデータベースが一つ作成されていますが、ここでは自分で作ってみましょう。データベースは CREATE DATABASE コマンドを使って作成します。"gentoo" という名前で作成します。

mysql>CREATE DATABASE gentoo;
Query OK, 1 row affected (0.08 sec)

応答から、コマンドがエラーなく実行されたことが分かります。この場合、1行が変更されました。これはメインの mysql データベースを指しており、そこで全データベースのリストが保持されています。背景の詳細についてはさほど気にする必要はありません。最後の数字はクエリーがどれくらいの速さで実行されたかを表します。SHOW DATABASES コマンドを再度実行して、データベースが作成されたことを確認できます。

mysql>SHOW DATABASES;
+----------+
| Database |
+----------+
| gentoo   |
| mysql    |
| test     |
+----------+
3 rows in set (0.00 sec)

実際にデータベースが作成されています。新しい gentoo データベースでテーブルの作成をするためには、それを現在のデータベースとして選択する必要があります。このためには USE コマンドを使います。USE コマンドは現在のデータベースとして使用したいデータベースの名前をとります。もう一つの選択肢は、これをコマンドラインの -D スイッチの後に設定することです。それでは gentoo データベースに切り替えましょう。

mysql>USE gentoo;
Database changed

現在のデータベースが先ほど作成した gentoo データベースになりました。これでテーブルの作成や情報の挿入を始めることができます。

MySQL のテーブルでの作業

テーブルの作成

MySQL の構造の中には、データベース、テーブル、レコード、そしてフィールドがあります。データベースはテーブルをまとめており、テーブルはレコードをまとめており、レコードはフィールドをまとめており、フィールドが実際の情報を格納しています。ユーザーは、この構造に従って情報へアクセスする方法を選択します。私たちはここまでデータベースを扱ってきましたが、ここからはテーブルについての作業をしていきましょう。まず、SHOW TABLES コマンドを使ってデータベースと同様にテーブルを一覧表示できます。現在 gentoo データベースにはテーブルがないので、このコマンドは以下のように出力します:

mysql>SHOW TABLES;
Empty set (0.00 sec)

これは、テーブルを作成する必要があることを意味します。そのためには、CREATE TABLE コマンドを使用します。しかしながら、このコマンドは単純な CREATE DATABASE コマンドとはかなり違います。このコマンドは引数のリストをとります。その形式は以下の通りです:

CODE CREATE TABLE の構文
CREATE TABLE [table_name] ([field_name] [field_data_type]([size]));

table_name は作成したいテーブルの名前です。今回は developers という名前のテーブルを作成してみましょう。このテーブルには開発者の名前(name)、電子メール(email)、そして仕事(job)を格納します。

field_name にはフィールドの名前を含めます。今回は3つの名前が必要です: name、email、そして job です。また、他のテーブルとの関連を容易にするための PRIMARY KEY フィールドが定義され、データが挿入されるたびに auto-increment されます。PRIMARY KEY は定義することが推奨されますが、 MySQL によって内部的に1つ維持されるので必須ではありません。インデックスには PRIMARY KEY も含まれますが、これを使うとテーブルが大きくなっても高速にデータへアクセスできます。

field_data_type は格納する情報の型です。利用可能な様々な型が MySQL Column Types Page にあります。今回は、すべてのデータフィールドでは VARCHAR データ型を、また key フィールドについては INTEGER を使用します。VARCHAR は文字列を扱う場合において最も単純なデータ型の一つです。

size は1つのフィールドが格納するデータの大きさです。今回は128とします。これは、そのフィールドが128バイトの VARCHAR データを持てることを意味します。これについてはさらなる幾らかの技術的説明が先ほどのサイトで提供されていますが、さしあたってはこれを128文字と考えて構いません。これでテーブルの作成方法が分かったので、やってみましょう。

mysql>CREATE TABLE developers ( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(128), email VARCHAR(128), job VARCHAR(128));
Query OK, 0 rows affected (0.11 sec)

正常にテーブルが作成できたようです。SHOW TABLES コマンドで確認してみましょう:

mysql>SHOW TABLES;
+------------------+
| Tables_in_gentoo |
+------------------+
| developers       |
+------------------+
1 row in set (0.00 sec)

はい、これが作成したテーブルです。しかしながら、セットアップしたフィールドの型についての情報がないようです。それを見るには、 DESCRIBE コマンド(または短縮して DESC)を使用します。このコマンドは引数としてテーブルの名前をとります。developers テーブルについてどのように表示されるか見てみましょう:

mysql>DESCRIBE developers;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| 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 Database にデータを挿入する

テーブルに初期データを挿入する(またはデータを追加する)には INSERT コマンドを使用します。CREATE TABLE のように、このコマンドにも特有のフォーマットがあります:

CODE INSERT の構文
INSERT INTO table (col1, col2, ...) VALUES('value1', 'value2', ...);

このコマンドはテーブルにレコードを追加するために使われます。table は情報を入力したいテーブルを含みます。テーブルの名前の後には、データを挿入したい列のリストと、テーブルに挿入したい値を含む VALUES() が続きます。すべての列に値を挿入する場合には、値を列が定義された順番どおりに書けば列のリストを省略できます。auto-increment な列では、NULL 値は次の利用可能な値になります。今回はデータを developers テーブルに挿入します。サンプルレコードを挿入してみましょう:

mysql>INSERT INTO developers VALUES(NULL, 'Joe Smith', 'joesmith@gentoo.org', 'toolchain');
Query OK, 1 row affected (0.06 sec)
## (If you don't know the order of the columns in the table or want to insert an incomplete record)
mysql> INSERT INTO developers (job, name) VALUES('outsourced', 'Jane Doe');
Query OK, 1 row affected (0.01 sec)

返された結果によるとレコードは正しく挿入されたようです。では、複数のレコードを入力したい場合にはどうすればよいでしょう? それが LOAD DATA コマンドが働く場面です。このコマンドはレコードをタブ区切りのファイルから読み込みます。ホームディレクトリーでレコードを含むファイルを編集してそれを試してみましょう。このファイルを records.txt とします。以下は一例です:

CODE ~/records.txt
3	John Doe	johndoe@gentoo.org	portage
4	Chris White	chriswhite@gentoo.org	documentation
5	Sam Smith	samsmith@gentoo.org	amd64
Important
あなたが今扱っているのがどんなデータなのか、しっかり把握しておいてください。ファイルの内容が確かでない場合には、LOAD DATA の使用は非常に危険です!

現在の LOAD DATA コマンドはかなり長い定義を持っていますが、ここでは最も単純な形式を使います。

CODE LOAD DATA の構文
LOAD DATA LOCAL INFILE '/path/to/filename' INTO TABLE table;

/path/to/filename は使用するファイルのディレクトリーおよびファイル名です。table はテーブルの名前です。今回はファイルが ~/records.txt、table が developers になります。

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
Important
何かしらの奇妙な挙動が生じた場合、各フィールドがタブで区切られていることを確認してください。情報を別のソースから入力ファイルに貼り付けた場合、タブがスペースに変換されているかもしれません。

うまくいきました。しかしながら、これでは単にレコードを挿入するだけで、MySQL のコントロールはまったくできません。多くのウェブアプリケーションは MySQL を手早く簡単にセットアップするために sql スクリプトを使用します。sql スクリプトを使用したい場合、mysql をバッチモードで実行するか、またはファイルをソースとして読み込む必要があります。これは mysql をバッチモードで実行する例です:

user $mysql -u root -h localhost -p < sqlfile

LOAD DATA と同様、sqlfile が何をするのか必ず理解しておいてください。さもないと、あなたのデータベースへのセキュリティ侵害が生じる可能性があります! sql ファイルを使用するもう一つの方法は source コマンドです。このコマンドは mysql のインタラクティブモード中に mysql コマンドを sql ファイルから実行します。sql ファイルをソースとして読み込む方法は以下の通りです:

mysql>source sqlfile;

sql ファイルの実行を求めるウェブアプリケーションを見つけた場合には、その作業をするために上の2つのコマンドを使用できます。これでテーブルのセットアップは済みましたが、それではフィールドのチェックはどうやるのでしょう? クエリーを使ってテーブル検索をすることでこれを行っていきます。

クエリーを使って MySQL のテーブルを閲覧する

クエリーはすべての SQL データベースの主要機能の一つです。テーブル内のデータを有用な形に変換するのに役立ちます。多くのクエリーは SELECT コマンドを使って実行されます。SELECT コマンドはかなり複雑なので、この文書ではコマンドの3つの基本的な形式のみを見ていきます。

CODE SELECT の形式
## (テーブル内のすべての項目を選択する)
SELECT * FROM table;
## (テーブル内の特定の項目を選択する)
SELECT * FROM table WHERE field=value;
## (特定のフィールドを選択する)
SELECT field1,field2,field3 FROM table [WHERE field=value];

最初の形式を簡単に見てみましょう。これは比較的単純で、テーブル全体を表示します。実行して、これまでにどのようなデータを持っているか見てみましょう。

mysql>SELECT * FROM developers;
+----+-------------+-----------------------+----------------+
| id | name        | email                 | job            |
+----+-------------+-----------------------+----------------+
|  1 | Joe Smith   | joesmith@gentoo.org   | toolchain      |
|  2 | Jane Doe    | NULL                  | Outsourced job |
|  3 | John Doe    | johndoe@gentoo.org    | portage        |
|  4 | Chris White | chriswhite@gentoo.org | documentation  |
|  5 | Sam Smith   | samsmith@gentoo.org   | amd64          |
+----+-------------+-----------------------+----------------+
5 rows in set (0.00 sec)

以前に INSERT で挿入したデータと LOAD DATA で挿入したデータ両方が表示されています。では、今度は Chris White のレコードだけが必要だとします。これは、以下で示すように select の2つめの形式で実現できます。

mysql>SELECT * FROM developers WHERE name = 'Chris White';
+----+-------------+-----------------------+---------------+
| id | name        | email                 | job           |
+----+-------------+-----------------------+---------------+
|  3 | Chris White | chriswhite@gentoo.org | documentation |
+----+-------------+-----------------------+---------------+
1 row in set (0.08 sec)

期待した通り、探していた特定の項目が選択されました。今度は、人の名前ではなく、仕事(job)と電子メール(email)アドレスだけが必要な場合を考えます。これは、以下で示すように3番目の形式で実現できます。

mysql>SELECT email,job FROM developers WHERE name = 'Chris White';
+-----------------------+---------------+
| email                 | job           |
+-----------------------+---------------+
| chriswhite@gentoo.org | documentation |
+-----------------------+---------------+
1 row in set (0.04 sec)

この選択方法は、後々わかることですが大量の情報を扱う場合には特に、管理がはるかに容易です。さて、現在は mysql の root ユーザーになっているので MySQL データベースで望むことを何でもできる無制限の権限があります。サーバー環境では、一ユーザーがそのような特権を持っていることにはかなり問題があります。データベースで誰が何をするのか制御するために、特権を設定しましょう。

MySQL における特権

特権は、データベース、テーブル、その他ほとんどすべてのものに対してユーザーが持っているアクセス権の種類です。現在の gentoo データベースでは、権限により MySQL の root アカウントが唯一そこにアクセス可能なアカウントです。それでは、gentoo データベースにアクセスしてその中の情報を扱える、もう少し一般的な2つのユーザー guest と admin を作成しましょう。guest アカウントは制限されたアカウントにします。できるのはデータベースから情報を得ること、それだけです。admin は root と同様のコントロールができますが、gentoo データベースについてのみ(メインの mysql データベースにはできない)にします。

ユーザーの作成

CREATE USER SQL 文はユーザーを定義してその認証方法を設定します。認証は一般的にはパスワードによる方法ですが、他のプラグインも利用可能です。

CREATE USER コマンドの例:

CODE CREATE USER の構文
CREATE USER '[user]'@'[host]' IDENTIFIED BY '[password]';

user がユーザー名、host がそのユーザーのアクセス元のホスト名です。多くの場合、これは localhost でしょう。この例で使うユーザーを作成するには:

(admin)

mysql>CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password';

(guest)

mysql>CREATE USER 'guest'@'localhost' IDENTIFIED BY 'password';
Important
'localhost' というホストは、MySQL にとっては DNS の localhost (127.0.0.1) という意味ではありません。そうではなく、これは TCP/IP ではない UNIX ソケットの接続を参照しています。

GRANT で特権を付与する

幾分簡略化した GRANT コマンドの形式をよく見てみましょう。

CODE GRANT の構文
GRANT [privileges] ON database.* TO '[user]'@'[host]';

まず割り当てたい特権を決めます。これまでに学んできたものに関して設定できる特権には以下のようなものがあります:

  • ALL - このデータベースのコントロールについてすべての特権を与える
  • CREATE - ユーザーにテーブルの作成を許可する
  • SELECT - ユーザーにテーブルへのクエリーを許可する
  • INSERT - ユーザーにテーブルへのデータの挿入を許可する
  • SHOW DATABASES - ユーザーにデータベースの一覧表示を許可する
  • USAGE - ユーザーは何も特権を持たない
  • GRANT OPTION - ユーザーに特権の付与を許可する
Note
MySQLをウェブアプリケーションとやりとりするために実行している場合、必要になる許可はたいてい CREATESELECTINSERT (これらについてはここで議論しています)、DELETEUPDATE (これらの詳細な情報については MySQL Reference Manual - GRANT and REVOKE Syntax を見てください) のみです。多くの人々が実際には必要でないのにすべての権限を付与するという誤りを犯しています。このような権限で一般的な操作に問題があるか確かめるには、アプリケーションの開発者に確認してください。

admin ユーザーには ALL がよいでしょう。guest ユーザーは読み取り専用アクセスのため SELECT で十分です。database はユーザーにこれらの権限を持たせたいデータベースです。この例では、gentoo が database になります。.* はすべてのテーブルを意味します。お望みなら、テーブルごとにアクセス権を適用できます。

mysql>GRANT ALL ON gentoo.* TO 'admin'@'localhost';
mysql>GRANT SELECT ON gentoo.* TO 'guest'@'localhost';

これでユーザーがセットアップできたので、それらをテストします。まずコマンドプロンプトで quit と入力して mysql を終了します:

mysql>quit

これでコンソールに戻ってきました。次でセットアップしたユーザーが何をできるか見てみましょう。

ユーザーの権限をテストする

今度は guest ユーザーとしてログインを試みます。現在、guest ユーザーは SELECT 特権のみを持っています。これは基本的には検索のみができ、それ以外は何もできないということになります。では、guest アカウントとしてログインしてください。

user $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 データベースに切り替えてください:

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>CREATE TABLE test (test VARCHAR(20), foobar VARCHAR(2));
ERROR 1044: Access denied for user: 'guest@localhost' to database 'gentoo'

このように、ユーザーが適切なアクセス権を持っていないためこの関数は失敗します。しかしながら、唯一付与したアクセス権は 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 としてログインします。

mysql>quit
Bye
user $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 MySQL アカウントと似たアクセス権を持ち、選択したあらゆる種類の gentoo データベースへの変更をすることができます。ここでは、ユーザーのメイン MySQL データベースへのアクセスをテストします。以前、特定のデータベースの権限のみを設定したことを思い出してください。

mysql>CREATE DATABASE gentoo2;
ERROR 1044: Access denied for user: 'admin@localhost' to database 'gentoo2'

実際に admin ユーザーは gentoo データベースでのあらゆる権限に関わらずメイン MySQL データベースでデータベースを作成することはできません。しかしそれでも、admin アカウントを以下のデータ挿入の例で示すように 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
mysql> INSERT INTO developers VALUES('Bob Simmons', 'bobsimmons@gentoo.org', 'python');
Query OK, 1 row affected (0.08 sec)

admin ユーザーはこのデータベースに好きなだけアクセスできます。さて、しばしばユーザーの権限を取り除かなければならないことがあります。問題のあるユーザーの場合もあれば、退職した従業員の場合もあるでしょう。REVOKE コマンドを使ってユーザーの権限を無効にする方法を見ていきましょう。

REVOKE コマンドでユーザーのアクセス権を削除する

REVOKE コマンドはユーザーのアクセス権を否定するのに使います。すべてのアクセス権を否定することも、特定のアクセス権を否定することもできます。実際のところ、そのフォーマットは GRANT とよく似ています。

CODE REVOKE の構文
REVOKE [privileges] ON database.* FROM '[user]'@'[host]';

ここにあるオプションは GRANT コマンドの節で説明されています。しかしながらこの節では、ユーザーのアクセスをすべて否定します。guest アカウントがセキュリティー上何らかの問題を発生させたことに気付いたと仮定します。すべての特権の取り消しが決まりました。root としてログインし、必要な作業をしましょう。

mysql>REVOKE ALL ON gentoo.* FROM 'guest'@'localhost';
Query OK, 0 rows affected (0.00 sec)
Note
この例では、ユーザーのアクセス権は単純なのでデータベースごとの取消しで問題ありません。しかし、より大規模なケースではたいてい gentoo.* ではなく *.* を使用して他のすべてのデータベースへのアクセスも削除することになるでしょう。

それでは、mysql を終了して guest ユーザーとしてログインしてください。

user $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 へのアクセス権はもはや無くなっています。

mysql>USE gentoo;
ERROR 1044: Access denied for user: 'guest@localhost' to database 'gentoo'

これで、問題のあるユーザーはもはや gentoo データベースにアクセスできなくなりました。ユーザーがまだログインできることに留意してください。これは、ユーザーがメインの MySQL データベースに残っているためです。DROP USER を使ってアカウントを完全に削除する方法を見ていきましょう。

アカウントの削除

root としてログインしていることを確認してください。

DROP USER はユーザーテーブルとすべての特権テーブルのレコードを削除します。やってみましょう:

mysql>DROP USER 'guest'@'localhost';
Query OK, 1 row affected (0.07 sec)

うまくいったようです。ログアウトして guest ユーザーとしてログインを試みてください。

mysql>quit
Bye
user $mysql -u guest -h localhost -p
Enter password:
ERROR 1045: Access denied for user: 'guest@localhost' (Using password: YES)

ユーザーが正常に削除されました!

おわりに

このガイドは主にコマンドラインでの MySQL のセットアップに焦点を当てていますが、いくつかの GUI 形式の代替策も利用可能です:

  • phpMyAdmin - php ベースの人気の MySQL 管理ツール。

これで MySQL の入門チュートリアルは終わりです。これが MySQL の背後にある基礎のよりよい理解やデータベースのセットアップに役に立つことを願っています。


This page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Chris White, Shyam Mani, Xavier Neys
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article's associated history page.