Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.2Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


6.2.3 アカウント名の指定

MySQL アカウント名はユーザー名とホスト名で構成されます。これにより、別々のホストから接続可能な同じ名前を持つユーザーのためのアカウントを作成できます。このセクションでは、特殊な値やワイルドカードルールを含む、アカウント名の記述方法について説明します。

CREATE USERGRANTSET PASSWORD などの SQL ステートメントでは、次のルールを使用してアカウント名を記述してください。

  • アカウント名の構文は 'user_name'@'host_name' です。

  • ユーザー名のみで構成されるアカウント名は、'user_name'@'%' と同等です。たとえば、'me''me'@'%' と同等です。

  • ユーザー名およびホスト名は、それらが引用符なしの識別子として有効な場合、引用する必要はありません。引用符が必要なのは、user_name 文字列が特殊文字 (- など) を含んでいたり、host_name 文字列が特殊文字またはワイルドカード文字 (% など) を含んでいたりする場合で、たとえば 'test-user'@'%.com' のようになります。

  • ユーザー名およびホスト名は、逆引用符 (`)、単一引用符 (')、または二重引用符 (") のいずれかを使用して、識別子または文字列として引用符で囲みます。

  • ユーザー名およびホスト名の部分が引用符で囲まれる場合、別々に囲んでください。つまり、'me'@'localhost' と記述し、'me@localhost' とは記述しません。後者は 'me@localhost'@'%' と解釈されます。

  • CURRENT_USER または CURRENT_USER() 関数への参照は、現行クライアントのユーザー名およびホスト名の文字を指定することと同等です。

MySQL は、mysql データベースの付与テーブルにアカウント名を格納するとき、ユーザー名とホスト名の部分に別々のカラムを使用します。

  • user テーブルにはアカウントごとに 1 行が格納されます。User および Host カラムはユーザー名およびホスト名を格納します。このテーブルには、アカウントが持つグローバル権限も指定されます。

  • ほかの付与テーブルには、データベースおよびデータベース内のオブジェクトに対してアカウントが持つ権限が示されます。これらのテーブルにはアカウント名を格納するための User および Host カラムがあります。これらのテーブルの各行は、同じ User および Host の値を持つ user テーブル内のアカウントに関連付けられています。

付与テーブル構造に関する追加の詳細については、セクション6.2.2「権限システム付与テーブル」を参照してください。

ユーザー名およびホスト名は、次に示すような特殊な値が使用されたりワイルドカード規則が適用されたりします。

ユーザー名は、入接続を試行するユーザー名と文字が一致するブランクでない値であるか、あらゆるユーザー名と一致するブランク値 (空の文字列) です。ブランクのユーザー名を持つアカウントは匿名ユーザーです。SQL ステートメントで匿名ユーザーを指定するには、''@'localhost' のように引用符で囲んだ空のユーザー名部分を使用します。

アカウント名のホスト名部分は多くの形式を持つことができ、ワイルドカードが許可されます。

  • ホスト値はホスト名または IP アドレス (IPv4 または IPv6) とすることができます。'localhost' という名前はローカルホストを示します。IP アドレス '127.0.0.1' は IPv4 ループバックインタフェースを示します。IP アドレス '::1' は、IPv6 ループバックインタフェースを示します。

  • ワイルドカード文字 % および _ を、ホスト名または IP アドレスの値に使用できます。これらは LIKE 演算子で実行されるパターンマッチング演算と同じ意味を持ちます。たとえば、ホスト値 '%' はあらゆるホスト名に一致し、'%.mysql.com' という値は mysql.com ドメイン内のすべてのホストに一致し、'192.168.1.%' は 192.168.1 のクラス C ネットワークのあらゆるホストに一致します。

    IP ワイルドカード値をホスト値に使用できるため (サブネット上のすべてのホストに一致する '192.168.1.%' など)、一部のユーザーがホスト 192.168.1.somewhere.com を指定することによって、この機能を悪用しようとする可能性があります。このような試みを阻止するために、MySQL では、数字およびドットで始まるホスト名との一致が許可されていません。したがって、1.2.example.com のような名前を持つホストがある場合、その名前はアカウント名のホスト部分と決して一致しません。IP ワイルドカード値は、ホスト名でなく IP アドレスのみと一致することができます。

  • IPv4 アドレスで指定されるホスト値について、ネットワーク番号に使用するアドレスビットの数を示すネットマスクを指定することができます。ネットマスク表記は IPv6 アドレスについては使用できません。

    構文は host_ip/netmask です。例:

    CREATE USER 'david'@'192.58.197.0/255.255.255.0';

    これにより david は、次の条件が true となる IP アドレス client_ip を持つすべてのクライアントホストから接続できます。

    client_ip & netmask = host_ip

    つまり、次のような CREATE USER ステートメントがあるとします。

    client_ip & 255.255.255.0 = 192.58.197.0

    この条件を満たし、MySQL サーバーに接続できる IP アドレスは、192.58.197.0 から 192.58.197.255 までの範囲のものです。

    ネットマスクは、8、16、24、または 32 ビットのアドレスを使用するようサーバーに指示するためにのみ使用できます。例:

    • 192.0.0.0/255.0.0.0: 192 のクラス A ネットワーク上のすべてのホスト

    • 192.168.0.0/255.255.0.0: 192.168 のクラス B ネットワーク上のすべてのホスト

    • 192.168.1.0/255.255.255.0: 192.168.1 のクラス C ネットワーク上のすべてのホスト

    • 192.168.1.1: この特定の IP アドレスを持つホストのみ

    次のネットマスクは 28 ビットをマスクしますが、28 は 8 の倍数でないため機能しません。

    192.168.0.1/255.255.255.240

サーバーは、クライアントホスト名または IP アドレス用のシステム DNS リゾルバによって返された値を使用して、アカウント名のホスト値の突き合わせをクライアントホストに対して実行します。アカウントホスト値がネットマスク記法を使用して指定される場合を除き、この比較は IP アドレスとして指定されるアカウントホスト値であっても文字列の突き合わせとして実行されます。つまり、DNS によって使用されるのと同じ形式でアカウントホスト値を指定しなければならないということを意味します。留意するべき問題の例を次に示します。

  • ローカルネットワーク上のホストの完全修飾名が host1.example.com だとします。DNS がこのホストの名前参照を host1.example.com として返す場合、アカウントホスト値にこの名前を使用します。ただし、DNS が host1 のみを返す場合、代わりに host1 を使用します。

  • DNS が特定のホストの IP アドレスとして 192.168.1.2 を返す場合、これはアカウントホスト値 192.168.1.2 と一致しますが 192.168.01.2 とは一致しません。同様に、これは 192.168.1.% のようなアカウントホストパターンに一致しますが 192.168.01.% には一致しません。

このような問題を避けるために、DNS がホスト名およびアドレスを返す際の形式を確認し、同じ形式の値を MySQL アカウント名に使用するようにすることをお勧めします。


User Comments
Sign Up Login You must be logged in to post a comment.