1.CREATE USER
CREATE USER user [IDENTIFIED BY [PASSWORD] 'password']
[, user [IDENTIFIED BY [PASSWORD] 'password']] ...
CREATE USER は、新しい MySQL アカウントを作成するために使用されます。 CREATE USER を使用するには、mysql データベースに対するグローバル CREATE USER 権限、または INSERT 権限が必要です。アカウントごとに、CREATE USER は権限なしで mysql.user テーブルに新しいレコードを作成します。アカウントがすでに存在する場合、エラーが発生します。
オプションの IDENTIFIED BY 句を使用して、アカウントにパスワードを与えます。ユーザー値とパスワードは、GRANT ステートメントと同じ方法で指定されます。特に、パスワードをプレーン テキストで指定する場合は、PASSWORD キーワードを無視してください。 PASSWORD() 関数によって返されるハッシュ値としてパスワードを指定するには、キーワード PASSWORD を含めます。
2. GRANT ステートメントを使用する
最良の方法は、より正確でエラーが少ない GRANT ステートメントを使用することです。 GRANT は MySQL 3.22.11 以降で提供されており、その主な目的はアカウントを認証することですが、新しいアカウントの作成とそれらのアカウントの認証を同時に行うこともできます。注: mysql が no_auto_create_user で実行されている場合、新しいユーザーのパスワードを入力する必要があります。入力しないとユーザーを作成できません。
次の例は、MySQL クライアント プログラムを使用して新しいユーザーをセットアップする方法を示しています。
まず、MySQL プログラムを使用して MySQL root ユーザーとしてサーバーに接続します:
shell> MySQL --user=root MySQL
root アカウントのパスワードを指定する場合は、この MySQL コマンドに -- も指定する必要がありますこのセクションの他のコマンドは、パスワードまたは -p オプションです。
root としてサーバーに接続した後、新しいアカウントを追加できます。次のステートメントは GRANT を使用して 4 つの新しいアカウントを設定します:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
-> IDENTIFIED BY 'some_pass' WITH GRANT OPTION
mysql> *.* 'monty'@'%'
-> 許可オプション付き 'some_pass' で識別されました;
mysql> 'admin'@'localhost' へ;
mysql> ***。どちらのアカウントも、あらゆる操作を実行できる完全な権限を持つスーパーユーザー アカウントです。アカウント ('monty'@'localhost') は、ローカル マシンから接続する場合にのみ使用されます。別のアカウント ('monty'@'%') を使用して、他のホストから接続できます。両方の monty アカウントが任意のホストから monty に接続できる必要があることに注意してください。 localhost アカウントがない場合、monty がこのマシンから接続すると、mysql_install_db によって作成された localhost の匿名ユーザー アカウントが優先されます。その結果、monty は匿名ユーザーとして扱われます。その理由は、匿名ユーザー アカウントの Host 列の値が 'monty'@'%' アカウントよりも具体的であるため、ユーザー テーブルの並べ替え順序で上位にランクされるためです。 (ユーザーテーブルのソートについては、mysql マニュアルを参照してください)。
· アカウントのユーザー名は admin ですが、パスワードはありません。このアカウントは、このマシンからの接続にのみ使用されます。 RELOAD および PROCESS 管理権限が付与されます。これらの権限により、管理ユーザーは mysqladmin reload、mysqladmin reload、mysqladmin flash-xxx コマンドに加えて、mysqladmin processlist を実行することができます。データベースへのアクセス許可が与えられていません。このような権限は、GRANT ステートメントを通じて追加できます。
· アカウントにはダミーのユーザー名があり、パスワードはありません。このアカウントは、このマシンからの接続にのみ使用されます。許可が与えられていません。 GRANT ステートメントで USAGE 権限を使用すると、権限を付与せずにアカウントを作成できます。すべてのグローバル権限を「N」に設定できます。後でこのアカウントに特定の権限を付与することを想定しています。
3. MySQL 認可テーブルを直接操作する
GRANT に加えて、INSERT ステートメントを直接使用して同じアカウントを作成し、FLUSH PRIVILEGES を使用してサーバーに認可テーブルをリロードするように指示することもできます。
shell> --user=root mysql
mysql> INSERT INTO user
-> 'Y','Y',' Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
mysql> ; ユーザーに挿入します
-> 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> ユーザー (ホスト,ユーザー,パスワード) に挿入します
-> VALUES('localhost','dummy','');
mysql> FLUSH PRIVILEGES;
INSERT でアカウントを作成するときに FLUSH PRIVILEGES を使用する理由は、サーバーに認可テーブルを再読み込みするように指示するためです。そうしないと、サーバーが再起動されるまで変更が認識されません。 GRANT を使用すると、FLUSH PRIVILEGES を使用する必要がなくなります。
パスワードを暗号化するには、INSERT とともに PASSWORD() 関数を使用します。 GRANT ステートメントはパスワードを暗号化するため、PASSWORD() は必要ありません。
「Y」値はアカウント権限を有効にします。管理者アカウントの場合は、より読みやすい INSERT 拡張構文 (SET を使用) を使用することもできます。
ダミーアカウントの INSERT ステートメントでは、user テーブルの Host、User、および Password 列のみが指定された値として記録されます。権限列はいずれも明示的に設定されていないため、MySQL はそれらすべてにデフォルト値「N」を割り当てます。これは GRANT USAGE の操作に相当します。
スーパー ユーザー アカウントを設定するには、権限列を「Y」に設定してユーザー テーブル エントリを作成するだけでよいことに注意してください。ユーザー テーブルの権限はグローバル権限であるため、他の権限テーブルにエントリは必要ありません。
4. アカウントと承認を作成するために付与を適用する例をいくつか示します。次の例では、3 つのアカウントを作成し、専用のデータベースへのアクセスを許可します。各アカウントのユーザー名はカスタムであり、パスワードは不明瞭です。
GRANT でアカウントを作成するには、次のステートメントを使用します:
shell> MySQL --user=root MySQL
shell> mysql --user=root mysql
mysql> > 銀行口座.*
-> 'custom'@'localhost'
-> 'obscure';
mysql> で SELECT、INSERT、UPDATE、CREATE、DROP を実行します。 - & gt; to'custom'@'SERVER.DAIN'I- & gt; 'obscure' で識別します。
これら 3 つのアカウントは次の用途に使用できます。ただし、アクセスできるのは 1 つのアカウントだけです。このマシンから。
· 2 番目のアカウントは経費データベースにアクセスできますが、ホストのwhitehouse.gov からのみアクセスできます。
· 3 番目のアカウントは顧客データベースにアクセスできますが、ホストの server.domain からのみアクセスできます。
GRANT を使用せずにカスタム アカウントを設定するには、INSERT ステートメントを使用して認可テーブルを直接変更します。
shell> INSERT INTO user (Host,User,Password) 'localhost', 'custom',PASSWORD('obscure'));
mysql> ユーザー (ホスト,ユーザー,パスワード) に挿入します
-> VALUES('whitehouse.gov','custom',PASSWORD('obscure' ));
mysql> ユーザー (ホスト,ユーザー,パスワード) に挿入します
-> VALUES('server.domain','custom',PASSWORD('obscure'));
mysql> データベースに挿入します
-> (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
-> Update_priv,Delete_priv,Create_priv,Drop_priv)
-> ,'カスタム' ,
-> 'Y','Y','Y','Y','Y','Y');
mysql> FLUSH PRIVILEGES;
最初の 3 つの INSERT ステートメントはユーザー テーブルにエントリを追加し、ユーザーが指定されたパスワードを使用してさまざまなホストからカスタム接続できるようにしますが、グローバル アクセス許可は付与されません (すべてのアクセス許可はデフォルト値「N」に設定されます) )。次の 3 つの INSERT ステートメントはユーザー テーブルにエントリを追加し、銀行口座、経費、顧客データベースのアクセス許可をカスタムに付与しますが、これらのアクセス許可は適切なホストからのみアクセスできます。通常、認可テーブルを直接変更する場合は、FLUSH PRIVILEGES を使用して認可テーブルをリロードし、権限の変更を有効にするようにサーバーに指示する必要があります。
特定のドメイン (mydomain.com など) 内のすべてのマシンからのアクセスをユーザーに許可する場合は、アカウント名のホスト部分にワイルドカード文字「%」を含む GRANT ステートメントを使用できます。 GRANT ...
- -> ON *.*
-> TO 'myname'@'%.mydomain.com' -> IDENTIFIED BY 'mypass';
認可テーブルを直接変更してこれを実現します。
mysql> INSERT INTO user (Host,User,Password,...)
-> VALUES('%.mydomain.com','myname',PASSWORD('mypass'),...);
mysql> FLUSH PRIVILEGES;
5 .アカウントを作成する他の方法は、MySQL アカウント管理機能を使用するサードパーティ プログラムを使用することです。 phpMyAdmin はプログラムです。
MySQL からユーザー アカウントを削除する
アカウントを削除するには、DROP USER ステートメントを使用する必要があります。