ユーザの追加には、2
        つの方法があります。GRANT
        ステートメントを使用する方法と、MySQL
        権限テーブルを直接操作する方法です。正確でエラーが発生しにくい
        GRANT
        ステートメントの使用を推奨します。 See
        項4.4.1. 「GRANT および REVOKE の構文」。
      
        ユーザの作成および管理に使用できるコントリビューションプログラムもいくつかあります(phpMyAdmin
        など)。
      
        以下の例では、mysql
        クライアントを使用して新規ユーザを設定する方法を示します。この例では、前のセクションで説明したデフォルト設定に従って権限がセットアップされていることを前提にしています。そのため変更を行うには、mysqld
        を実行しているマシンにログインしていること、MySQL
        root
        ユーザとして接続していること、root
        ユーザに mysql
        データベースに対する INSERT
        権限と RELOAD
        管理者権限があることが必要条件となります。また、root
        ユーザパスワードを変更している場合、ここで、mysql
        コマンドを使用してそのパスワードを指定する必要があります。
      
        まず、mysql
        プログラムを使用してサーバに MySQL
        root ユーザとして接続します。
      
shell> mysql --user=root mysql
        次に、GRANT
        ステートメントを実行して新規ユーザを追加できます。
      
mysql>GRANT ALL PRIVILEGES ON *.* TO monty@localhost->IDENTIFIED BY 'some_pass' WITH GRANT OPTION;mysql>GRANT ALL PRIVILEGES ON *.* TO monty@'%'->IDENTIFIED BY 'some_pass' WITH GRANT OPTION;mysql>GRANT RELOAD,PROCESS ON *.* TO admin@localhost;mysql>GRANT USAGE ON *.* TO dummy@localhost;
        これらの GRANT
        ステートメントでは、以下の 3
        人の新規ユーザが追加されます。
      
            monty
          
            どこからでもサーバに接続できる完全なスーパーユーザ。ただし、パスワード
            'some_pass' の使用が必要。注意:
            GRANT ステートメントを
            monty@localhost と
            monty@"%"
            の両方に対して発行することが必要である。localhost
            のエントリを追加しないと、ローカルホストから接続したとき、mysql_install_db
            によって作成された localhost
            のエントリの方が、Host
            フィールド値がより具体的であり、user
            テーブルのソート順序で上位になるため優先されることになる。
          
            admin
          
            localhost
            からパスワードなしで接続でき、RELOAD
            および PROCESS
            の管理権限のあるユーザ。このユーザは、mysqladmin
            reload、mysqladmin
            refresh、mysqladmin flush-*
            の各コマンド、および mysqladmin
            processlist
            を実行できる。データベースレベルの権限は設定されていない(GRANT
            ステートメントを実行して後で追加できる)。
          
            dummy
          
            パスワードなしでローカルホストからのみ接続できるユーザ。権限は設定されていない。USAGE
            権限タイプにより、このような権限なしのユーザを作成できる。これは、すべてのグローバル権限を
            'N'
            に設定するのと同じことである。これは、後でこのアカウントに固有の権限を設定することを想定している。
          
        INSERT
        ステートメントを発行してサーバに権限テーブルを再度読み込ませることにより、同じユーザアクセス情報を直接追加することもできます。
      
shell>mysql --user=root mysqlmysql>INSERT INTO user VALUES('localhost','monty',PASSWORD('some_pass'),->'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');mysql>INSERT INTO user VALUES('%','monty',PASSWORD('some_pass'),->'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');mysql>INSERT INTO user SET Host='localhost',User='admin',->Reload_priv='Y', Process_priv='Y';mysql>INSERT INTO user (Host,User,Password)->VALUES('localhost','dummy','');mysql>FLUSH PRIVILEGES;
        MySQL バージョンによっては、上記
        'Y'
        値の数が違う場合があります(3.22.11
        より前のバージョンでは権限カラムが少なく、4.0.2
        以降では多くなります)。admin
        ユーザに対しては、バージョン 3.22.11
        以降で利用可能になった SET
        を使用する拡張 INSERT
        構文が使用されています。
      
        注意:
        スーパーユーザを設定する場合は、権限フィールドを
        'Y' に設定した user
        テーブルエントリを作成するだけで済みます。db
        テーブルや host
        テーブルのエントリは必要ありません。
      
        最後の INSERT
        ステートメント(dummy
        ユーザ)では、user
        テーブルレコードの
        Host、User、および
        Password
        カラムだけが値を割り当てられています。権限カラムはどれも明示的に設定されていないため、MySQL
        はこれらすべてにデフォルト値の
        'N'
        を設定します。これは、GRANT USAGE
        と同じ機能です。
      
        以下の例では、ユーザ custom
        を追加します。このユーザは
        bankaccount
        データベースにはローカルホストからのみ、expenses
        データベースにはホスト
        whitehouse.gov
        からのみ、customer
        データベースにはホスト
        server.domain
        からのみアクセスできるとします。3
        つのホストすべてでパスワード
        obscure を使用します。
      
        GRANT
        ステートメントを使用してこのユーザの権限を設定するには、以下のコマンドを実行します。
      
shell>mysql --user=root mysqlmysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP->ON bankaccount.*->TO custom@localhost->IDENTIFIED BY 'obscure';mysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP->ON expenses.*->TO custom@'whitehouse.gov'->IDENTIFIED BY 'obscure';mysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP->ON customer.*->TO custom@'server.domain'->IDENTIFIED BY 'obscure';
        権限テーブルを直接変更してユーザの権限を設定するには、以下のコマンドを実行します(注意:
        最後の FLUSH PRIVILEGES に注目)。
      
shell>mysql --user=root mysqlmysql>INSERT INTO user (Host,User,Password)->VALUES('localhost','custom',PASSWORD('obscure'));mysql>INSERT INTO user (Host,User,Password)->VALUES('whitehouse.gov','custom',PASSWORD('obscure'));mysql>INSERT INTO user (Host,User,Password)->VALUES('server.domain','custom',PASSWORD('obscure'));mysql>INSERT INTO db->(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,->Create_priv,Drop_priv)->VALUES->('localhost','bankaccount','custom','Y','Y','Y','Y','Y','Y');mysql>INSERT INTO db->(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,->Create_priv,Drop_priv)->VALUES->('whitehouse.gov','expenses','custom','Y','Y','Y','Y','Y','Y');mysql>INSERT INTO db->(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,->Create_priv,Drop_priv)->VALUES('server.domain','customer','custom','Y','Y','Y','Y','Y','Y');mysql>FLUSH PRIVILEGES;
        INSERT
        ステートメントを使用した前の例と同様、MySQL
        のバージョンによっては 'Y'
        の値の数が異なります。
      
        最初の 3 つの INSERT
        ステートメントは user
        テーブルエントリを追加し、ユーザ
        custom
        がさまざまなホストから指定のパスワードで接続できるようにしますが、権限については何も設定していません(権限はすべて、デフォルト値の
        'N' に設定されています)。次の 3
        つの INSERT
        ステートメントは、db
        テーブルエントリを追加し、custom
        に
        bankaccount、expenses、customer
        の各データベースに対する権限を設定します。これらの権限は、適切なホストからアクセスしたときにだけ適用されるものです。権限テーブルを直接変更した場合、FLUSH
        PRIVILEGES
        を使用してサーバに権限テーブルを再度読み込ませ、権限の変更を反映させる必要があります。
      
        特定のユーザに、あるドメイン(たとえば
        mydomain.com)のすべてのマシンからのアクセスを許可するには、以下のような
        GRANT
        ステートメントを実行します。
      
mysql>GRANT ...->ON *.*->TO myusername@'%.mydomain.com'->IDENTIFIED BY 'mypassword';
権限テーブルを直接変更して同じことを行うには、以下を実行します。
mysql>INSERT INTO user VALUES ('%.mydomain.com', 'myusername',->PASSWORD('mypassword'),...);mysql>FLUSH PRIVILEGES;
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

