dポイントプレゼントキャンペーン実施中!

ユーザー名にアンダーバーを含む場合のデータベース作成について

mysql > create database demo_demo;
mysql > grant all on demo_demo.* to demo_demo@localhost

上記のSQL を発行した場合、「demo_demo」というデータベースと、ローカルから「demo_demo」データベースにALL の権限の範囲内でアクセスできる「demo_demo」というユーザーが作成されると思います。ここで2点教えてください。

質問1:
ALL権限には「create database」を許可するCREATE権限が含まれますが、上記「demo_demo.* 」のように、grant 時に特定のデータベースに対してのみALL権限を与えた場合の「create database」を許可するCREATE権限とはどういう意味を持つのでしょうか?

質問2:
mysql > create database `demotdemo`;
など、ユーザー名のアンダーバー部分に任意文字を当てたデータベースが無限に作成できてしまいます。アンダーバーがSQL的に「任意の一文字」に相当するとは理解していますが、「demotdemo」などのデータベースが作成できてしまうのはmysql の仕様でしょうか?また、ユーザーが「create database」可能かでないかの判定はどの権限で制御されているのでしょうか?

参考資料でもよいので教えてください。お願いします。

A 回答 (2件)

アンダースコア脆弱性のことかな


http://news.livedoor.com/article/detail/546720/
概要、_ アンダースコアは、SQLのワイルドカードのため、そのままでは、何か1文字にマッチしてしまうということ(ワイルドカードを使いたい状況もあるので、使えなくはできない)

対策:データベース名にアンダースコアが含まれる場合、バックスラッシュで(Unixシェルによっては2つ)エスケープされるべき。どんなコマンドにおいても常にということ。
http://dev.mysql.com/doc/refman/5.1/ja/mysqlshow …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

アンダースコア脆弱性!まさにこれでした。ありがとうございます。
てっきりgrant の際のユーザー名のアンダースコアが今回の症状に影響していると思ってましたが、grant のデータベース名が影響してたんですね。

とってもすっきりしました。ありがとうございました。

お礼日時:2010/07/06 09:57

ALL権限には「create database」を許可するCREATE権限が含まれます


>> そうではなく、CREATE TABLE の使用を許可するのではありませんか?

「demotdemo」などのデータベースが作成できてしまうのはmysql の仕様でしょうか?
>>OSのファイル名作成の仕様ではありませんか?

この回答への補足

回答ありがとうございます。

マニュアルにはCREATE権限は「create database」と「create table」の権限とあるのです。

また、「OSのファイル名作成の仕様」の部分が理解できなかったのですが、データベース名がなんであれ、最終的な作成可否についてはデータベースサーバーが判断するところと思うのですが、私の理解がまちがえてるのでしょうか?

お願いします。

補足日時:2010/07/05 13:13
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!