MySQLアカウントは,次の2つの方法で作成できます。
アカウントを作成するためのステートメント (
创建用户
や格兰特
など)を使用する。これらのステートメントを発行すると,サーバーによって付与テーブルへの適切な変更が行われます。插入
、更新
、删除
などのステートメントを使用して,MySQL付与テーブルを直接操作する。
アカウント作成のステートメントを使用する方が、付与テーブルを直接操作するよりも簡潔で、エラーの発生率も低いため、推奨される方法です。创建用户
および格兰特
については、セクション13.7.1”アカウント管理ステートメント”で説明されています。
アカウントを作成するためのもう1つのオプションは,GUIツールMySQL工作台を使用する方法です。またはMySQLアカウント管理の機能を提供する使用可能な複数のサードパーティープログラムのいずれかを使用します。数据库管理
は、このようなプログラムの 1.つです。
次の例では、mysqlクライアントプログラムを使用して、新しいアカウントを設定する方法を示します。これらの例は、セクション2.10.2「最初の MySQL数据库アカウントのセキュリティー設定」で説明するデフォルトに従って,権限が設定されていることが前提となっています。つまり,変更を行うには,MySQL根
ユーザーとして MySQL数据库サーバーに接続する必要があり、根
アカウントはmysql
データベースに対する插入
権限および重新加载
管理権限を持っている必要があります。
該当する例で注記したように,特定の制約が有効になるようにサーバーのSQLモードが設定されている場合は,一部のステートメントに失敗します。特に,厳密モード(严格事务表
、严格\u所有\u表
、および没有自动创建用户
) では、サーバーが一部のステートメントを受け入れることが回避されます。このような場合のために、回避策を示します。SQL语句モードおよびそれによる付与テーブルの操作への影響についての詳細は、セクション5.1.7”サーバーSQLモード”およびセクション13.7.1.4 GRANT構文”を参照してください。
まず、mysqlプログラムを使用して,MySQL根
ユーザーとしてサーバーに接続します。
mysql——user=root
根
アカウントにパスワードを割り当てた場合は,このmysqlコマンドと,このセクションで後述するコマンドの両方に,--密码
または-第
オプションを指定する必要もあります。
根
としてサーバーに接続したあとは,新しいアカウントを追加できます。次のステートメントは,格兰特
を使用して4つの新しいアカウントを設定します。
mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';mysql>授予所有权限。* TO 'monty'@'localhost' -> WITH GRANT OPTION;mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';mysql>授予所有权限。* TO 'monty'@'%' -> WITH GRANT OPTION;mysql> CREATE USER 'admin'@'localhost';mysql> GRANT RELOAD,PROCESS ON *. **“admin”@“localhost”;mysql> CREATE USER 'dummy'@'localhost';
これらのステートメントで作成されたアカウントには、次のプロパティーがあります。
アカウントのうち 2.つは、ユーザー名が
蒙蒂
,パスワードが一些通行证
です。どちらのアカウントも,すべてを実行するための完全な権限を持っているスーパーユーザーアカウントです。'monty'@'localhost'
アカウントは、ローカルホストから接続する際にのみ使用できます。“蒙蒂”@“%”
アカウントでは、ホスト部分に'%'
ワイルドカードが使用されているため,これを使用すれば任意のホストから接続できます。蒙蒂
として任意の場所から接続できるようにするには、蒙蒂
に両方のアカウントが必要です。本地服务器
アカウントがない場合は,蒙蒂
がローカルホストから接続する際に、mysql_install_dbで作成された本地服务器
の匿名ユーザーアカウントが優先されます。その結果、蒙蒂
は匿名ユーザーとして処理されます。その理由は,匿名ユーザーアカウントが“蒙蒂”@“%”
アカウントよりも固有の主持人
カラム値を持っているため、用户
テーブルのソート順でより早く表示されるためです。(用户
テーブルのソートについては、セクション6.2.4”アクセス制御,ステージ1:接続の検証”で説明されています。)“admin”@“localhost”
アカウントにはパスワードがありません。このアカウントは、管理
がローカルホストから接続する際にのみ使用できます。これには,重新加载
および过程
の管理者権限が付与されます。これらの権限を持つ管理
ユーザーは,mysqladmin重新加载、mysqladmin刷新、mysqladmin刷新-xxx号
コマンド,およびmysqladmin processlistを実行できます。任意のデータベースにアクセスするための権限は付与されません。その他の格兰特
ステートメントを発行すれば、あとでこのような権限を追加できることがあります。'dummy'@'localhost'
アカウントにはパスワードがありません。このアカウントは、ローカルホストから接続する際にのみ使用できます。権限は付与されません。あとでアカウントに特定の権限を付与することを前提としています。
没有自动创建用户
SQL语句モードが有効になっている場合は、パスワードなしでアカウントを作成するステートメントに失敗します。これに対処するには、空でないパスワードを指定する确认的
句を使用します。
アカウントに対する権限をチェックするには、显示拨款
を使用します。
mysql>显示'admin'@'localhost';+--------------------------------------------------------+|资助admin@localhost|+------------------------------------------------------------------+|将*.*上的进程重新加载到“admin”@“localhost”|+-----------------------------------------------------+
创建用户
および格兰特
の代わりとして,直接插入
ステートメントを発行してから、冲洗的特权
を使用して付与テーブルを再ロードするようにサーバーに指示することで、同じアカウントを作成できます。
shell>mysql--user=root mysql mysql>INSERT INTO user->VALUES('localhost','monty',PASSWORD('some\u pass'),->'Y','Y','Y','Y','Y','Y','Y','Y','Y');mysql>INSERT-INTO-user->VALUES('%'、'monty'、'PASSWORD'、'>'Y'、'Y'、'Y'、'Y'、'Y'、'Y'、'Y'、'Y'、'Y'、'Y'、'Y'、'>'Y'、'Y'、'Y'、'Y'、'Y'、'Y'、'Y'、'Y'、'Y'、'Y'、'Y'、'Y'、'Y'、'Y'、'Y'、'Y'、'、'>'、'、'、'、'、'、'、'、'、'0,0,0);mysql>INSERT INTO user SET Host='localhost',user='admin',->Reload_priv='Y',Process_priv='Y';mysql>INSERT INTO user(Host,user,Password)->值('localhost','dummy','');mysql>刷新权限;
插入
を使用してアカウントを作成する場合は、冲洗的特权
を使用して、付与テーブルを再ロードするようにサーバーに指示する必要があります。そうしなければ、サーバーを再起動するまで変更が認識されません。创建用户
では,冲洗的特权
が必要ありません。
插入
で密码()
関数を使用する理由は,パスワードを暗号化するためです。创建用户
ステートメントでは自動的にパスワードが暗号化されるため、密码()
は必要ありません。
'是'
値を指定すると,アカウントに対する権限が有効になります。MySQLのバージョンによっては,最初の2つの插入
ステートメントに異なる数の'是'
値を使用する必要がある場合もあります。管理
アカウントに対する插入
ステートメントでは、集
を使用することで,さらに読み取り可能になるように拡張された插入
構文が採用されています。
笨蛋
アカウントに対する插入
ステートメントでは、用户
テーブル行内の主持人
、用户
、および密码
カラムにのみ,値が割り当てられます。権限カラムは明示的に設定されないため,MySQLによってすべてのカラムに,デフォルト値の“N”
が割り当てられます。これは、创建用户
の動作と同等です。
厳密な SQL语句モードが有効になっている場合は、デフォルト値を持たないすべてのカラムに値を指定する必要があります。この場合、插入
ステートメントは、明示的にssl_cipher
、x509_issuer
、およびx509主题
カラムに値を指定する必要があります。
スーパーユーザーアカウントを設定するために必要な操作は,すべての権限カラムが'是'
に設定された用户
テーブル行を挿入することだけです。用户
テーブルの権限はグローバルであるため,その他の付与テーブルのいずれにもエントリは必要ありません。
次の例では3つのアカウントを作成し,それらに特定のデータベースへのアクセス権を付与します。それぞれのユーザー名は习俗
で,パスワードは晦涩难懂的
です。
创建用户
および格兰特
を使用してアカウントを作成するには,次のステートメントを使用します。
CREATE user 'custom'@'localhost' IDENTIFIED BY 'obscure'; / /创建用户GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON account。* -> TO 'custom'@'localhost';mysql> CREATE USER 'custom'@'host47.example.com' IDENTIFIED BY 'obscure';GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON expense。* -> TO 'custom'@'host47.example.com';CREATE USER 'custom'@'server. mysql>由'obscure'标识的领域;GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP -> ON customer。* -> TO 'custom'@'server.domain';
3つのアカウントは,次のように使用できます。
1.番目のアカウントは、
银行帐户
データベースにアクセスできますが,ローカルホストからに限定されます。2番目のアカウントは,
费用
データベースにアクセスできますが、host47.example.com
ホストからに限定されます。3.番目のアカウントは、
顾客
データベースにアクセスできますが、服务器.domain
ホストからに限定されます。
格兰特
を使用せずに习俗
アカウントを設定するには、次のように插入
ステートメントを使用して、付与テーブルを直接変更します。
INSERT INTO user (Host, user,Password) -> VALUES('localhost','自定义',Password ('obscure'));mysql> INSERT INTO user (Host, user,Password) -> VALUES('host47.example.com','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');mysql> INSERT INTO db -> (Host, db,User,Select_priv,Insert_priv, -> Update_priv,Delete_priv,Create_priv,Drop_priv) -> VALUES('host47.example.com','expenses','custom', -> '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. conf ', ' mysql . conf ')域”、“客户”,“自定义”- >“Y”、“Y”、“Y”、“Y”、“Y”、“Y”);mysql >冲洗特权;
最初の 3.つの插入
ステートメントは、付与されたパスワードを使用してさまざまなホストから接続することをユーザー习俗
に許可する用户
テーブルエントリを追加しますが,グローバルな権限は付与しません(すべての権限はデフォルト値の“N”
に設定されます)。次の 3.つの插入
ステートメントは、银行帐户
、费用
、および顾客
データベースに対する権限を习俗
に付与するが、適切なホストからのアクセス時に限定されるdb
テーブルエントリを追加します。通常どおりに付与テーブルを直接変更する場合は、権限の変更が有効になるように、冲洗的特权
を使用して再ロードするようにサーバーに指示する必要があります。
特定のドメイン (mydomain.com
など) 内のすべてのマシンからのアクセス権を持つユーザーを作成する際には、アカウント名のホスト部分に「%
」ワイルドカード文字を使用できます。
mysql>创建用户“myname”@“%.mydomain.com”,由“mypass”标识;
付与テーブルを直接変更することで同じ処理を行うには、次のように実行します。
mysql>插入用户(主机、用户、密码…)->值('%.mydomain.com','myname',Password('mypass'),…);mysql>刷新权限;