【MySQL】ユーザー関連初期設定(作成・削除とかとか)【コマンドプロンプト】
rootユーザーのパスワードは設定したが、その他のユーザーは未設定なので、とりあえずそれらのユーザーの設定をする。
でもって、インストール時にユーザー名とパスワードが空のユーザーが作成されるらしい。
セキュリティ上宜しくないので削除する。
useコマンドでデータベースを指定する。
何の作業をするにしても、どのデータベースを使うか指定しないとダメ。
(MySQLが「どのデータベースさわるんだよ!」って困るので)
ユーザー名やパスワードを管理してるデータベースはmysqlなので、useコマンドを使ってデータベースを指定する。
ユーザー関連のデータはデータベースmysqlのuserテーブルにあるので、データベースmysqlを使うよーと指定する。
mysql > use mysql; ←データベース「mysql」を使う
Databases changed ←データベースが変わりました
コマンドの終わりには ; (セミコロン)を入れる
コマンドの終わりには必ず ; (セミコロン)を入れる。コマンドの終わりですよって印。
例えば下のように入れ忘れてエラーが出たりするのは、1行目から3行目までが1つのコマンドだと認識されて、「そんなコマンドねーよ」状態な訳だ。
mysql> use mysql ←;入れ忘れる -> ←なにも起こらないよ?なんで -> use mysql; ←もう一度入力し直した(今度は;入れたよー)
もしセミコロン入力を忘れて -> が出ても、その後に ; を入れたらおk
mysql> use mysql ←;入れ忘れる -> ←入れ忘れた! -> ; ←ここで入れても大丈夫
あと、入力を間違えまくっても ¥c で抜けれるみたい。
( /c と書いてたけど、/c では抜けれませんでした。
MACの/はたいていwindowsでは¥になる事多し)
コマンドは大文字と小文字は区別しない。データベースやテーブル名はOSに依存するみたい。
windowsはファイルやフォルダ名で大文字小文字の区別しない→MySQLでもテーブル名とか区別しない。
区別するOSならテ−ブル名とかも区別するらしい。
ユーザー一覧を表示する
現在のユーザーとホストの一覧で、削除するユーザーを確認しておく。
mysql > select user, host from mysql.user; ←ユーザーとホスト一覧を表示
+---------+-----------+ | User | Host | +---------+-----------+ | aaa | localhost | | root | localhost | +---------+-----------+
こんな感じで一覧が出る。
aaaとroot、2つのユーザーが設定されている。
selectコマンドは、select以降に書かれた内容を検索し表示してくれるコマンドのようで、今回入力したコマンドは
select [フィールド] from [データベース].[テーブル];
という形式で、データベース[mysql]の[user]テーブルにある[userとhost]フィールドを探して表示しろ、って事だと思う。
(複数のフィールドがある場合は , で区切るみたい)
ユーザーを削除する
とりあえず削除すべきは、パスワードが設定されていないユーザーと、匿名ユーザー。どっちも簡単にデータベースにアクセスできてしまうユーザーなので削除しておいた方が良いです。
パスワードを設定していないユーザーを削除する
delete from user where password='';
userテーブルからパスワードが空白のものを抽出して削除するって事。
whereはコマンドじゃなくてオプションで、where以降に検索や抽出する条件を指定する。
deleteコマンドは、そんまんま削除、from userはuserテーブルから、where password=''; はパスワードが空白のものを抽出ってこと
成功するとこんなメッセージが。
Query OK, 1 row affected(0.05sec)
useコマンドでデータベースを指定してないと、ここでエラーが出ますorz
匿名ユーザーの削除
自分はそうならなかったけど、ユーザー一覧を表示させた時に、ユーザーフィールドが空のユーザーがある場合があって、匿名ユーザーというそうです。
+---------+-----------+ | User | Host | +---------+-----------+ | | localhost | | root | localhost | +---------+-----------+
匿名ユーザーがあるとユーザー認証を求められた時、適当にユーザー名入れても「そんなユーザーいないから、とりあえず匿名ユーザーに割り当てとくね」と余計な事をしてくれるらしい。セキュリティ的に宜しくなさげ。とにかく削除しておいた方が吉
上のパスワードが空のユーザーを削除した時と同じコマンドで、where以降の抽出条件を変えればok
匿名ユーザーはユーザー名も、パスワードも設定されていないユーザーの事のらしい。
(一覧で表示させると、ユーザー名もパスワードも空白になってるユーザー)
なので、パスワードを設定していないユーザーを削除した時点で、匿名ユーザーは削除されていると思われ。
delete from user where host='';
削除できてるか確認
+---------+-----------+ | User | Host | +---------+-----------+ | root | localhost | +---------+-----------+
再度ユーザー一覧を表示させるとユーザーがrootだけになってる。
ユーザーの作成
パスワードが空のユーザー削除が成功したらrootユーザーしか残らないので、普段使いのユーザーを作る。
rootは多分、特別なユーザーなので普段は使わない方が良いと思う。調べてないけど。
rootって何でも出来そうな感じだし。出来すぎて間違って余計な事しそうだし。
手順的には
- criate user文でユーザーを作る
- grant文でユーザーに権限を与える
て感じ。
create userで新規ユーザーを作る
create user [ユーザ名] identified by '[パスワード]';
例えば、ユーザー名test、パスワードをabc123というユーザーを作成して成功すると、下記のように表示される。
mysql> create user test identified BY 'abc123';
Query OK, 0 rows affected (0.00 sec)
+---------+-----------+ | User | Host | +---------+-----------+ | test | ‰ | | root | localhost | +---------+-----------+
ここで select user, host from mysql.user; でユーザー一覧を表示させると、作成したユーザーとrootユーザが表示される。
これ以降、例文ではユーザー名 test パスワード abc123 を使う。
updateでホストを変更する
作成したユーザーのホストが ‰ (パーセント)となっているのでそれを修正する。
MySQLでは ‰ はワイルドカードになる。
ホストに ‰ が設定されていると、どのホストでも繋げれる=誰でもアクセスできちゃうって事で、セキュリティ上宜しくないので変更する。
update mysql.user set host='[変更後のホスト名]' where host='[現在のホスト名]';
updateはレコードの内容を変更するコマンド。
mysql> update mysql.user set host='localhost' where host=' ‰ ';
Query OK, 0 rows affected (0.02 sec)
データベースmysqlのuserテーブルにある[host]フィールドの中で、値が ‰ のものの値をlocalhostに変更しろって事ですな。
これで ‰ からlocalhostに変わる。
が、条件を where host=' ‰ ' としているので、ホスト名が ‰ のユーザーは一括でlocalhostに変換されてしまいます。
今回のように、セキュリティ上%はまずいって時はいいけど、とあるホストAからホストBに変更する時にこの構文を使うと、ホストAのままでよかったユーザーまで変更されてしまう。
ユーザー毎に変更する場合は、条件をユーザー名に変えればおk
update mysql.user set host='[変更後のホスト名]' where user='[変更したいユーザー名]';
mysql> update mysql.user set host='localhost' where user=' test ';
Query OK, 0 rows affected (0.02 sec)
データベースmysqlのuserテーブルにある[user]フィールドの中で、値が test のものの[host]フィールドの値をlocalhostに変更しろって事です。
ややこしいな。
でもまあ、コマンドの文章見てたらなんとなくわかるよね。
+---------+-----------+ | User | Host | +---------+-----------+ | test | localhost | | root | localhost | +---------+-----------+
ここで select user, host from mysql.user; でユーザー一覧を表示させると、ホストが変更されている。
mysql host名変更/mindia
grantを使って、作成したユーザーの権限を設定する
作成したユーザーでログインし直して、新しく作ったデータベースをuseで指定してもエラーが出る(はず)
これは権限を与えられてないから、そのデータベースには何も出来ないって事。
試しにshow databases;でデータベース一覧を表示させると、rootでログインしてた時とは違うデータベース一覧が出た。
useでその中のデータベース名を指定してみたが、エラーでました。
とにかくrootでログインした状態で、作成したユーザーに権限を与えてみる。
grant [権限の種類] on [データベース名].[テーブル名] to [ユーザ名]@[ホスト名] identified by '[パスワード]';
[権限の種類]は作成したユーザーにどこまでの作業をさせるかによって変わる。
4.4.1. GRANT および REVOKE の構文/MySQL のページにまとまってるので参照の事。
データベースをまだ作ってない場合は【MySQL】ユーザー関連初期設定(作成・削除とかとか)【コマンドプロンプト】 の記事参照。
とりあえず、権限はallでつくる(rootの代わりに使うので、基本なんでも出来るようにしておく事にする)
mysql> grant all on test_db.* to test@localhost identified by 'abc123';
成功したら、okほにゃららsecと出ます。
文中の ∗ はワイルドカードで、(test_db内の)全テーブルって事。
権限を与えたいテーブル名が分かってるなら、普通にテーブル名にする。
testユーザーでログインし直して、show databases; と入力すると、データベース一覧にtest_dbが増えてる。
use tast_db;と入力すると Database changed と出る。
これでtestユーザーでtest_dbに色々出来るようになった。
MySQLでは「create user」という操作がなく(?)、「grant」構文がそのまま「create user」の機能も併せ持っている
MySQLにユーザを追加する/PHPのテクメモ
との事。create userでユーザー作らずとも、grantでユーザーを作成し、同時に権限も付与できるって事?
よく分からん。
MySQLデータベースサーバーのセットアップ /自宅サーバーで行こう
MySQLについて 弐/IKEUCHI Atsushi Home Page
MySQLのWHEREオプション/2php
ユーザーの作成/DBOnline
なんで root でrpm をbuildしてはだめなのですか?/okyuu.com
MySQL: ユーザの追加とパスワード、権限の付加 - GRANT文/Yukun's Blog
[MySQLウォッチ]第26回 知らないではすまされない,MySQLのセキュリティ設定/IT Pro
MySQLの匿名ユーザについて/ Climb ( www.climb.co.jp ) IT Square
| 固定リンク
この記事へのコメントは終了しました。
コメント