Mysql でユーザーを作成する 3 つの方法

共通ユーザーを作成する

MySQL は、CREATE USER ステートメントを使用してユーザーを作成すること、GRANT ステートメントを使用してユーザーを作成することをサポートしています。ユーザーは、mysql データベースの下のユーザー データ テーブルを操作して作成することもできます。

  1. CREATE USER ステートメントを使用してユーザーを作成する

CREATE USER ステートメントを実行すると、MySQL は新しく作成されたユーザー データ レコードをユーザー データ テーブルに挿入します。構文形式は次のとおりです。


CREATE USER [IF NOT EXISTS]
    user [auth_option] [, user [auth_option]] ...
    DEFAULT ROLE role [, role ] ...
    [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
    [WITH resource_option [resource_option] ...]
    [password_option | lock_option] ...
user:
    (see Section 6.2.4, “Specifying Account Names”)
auth_option: {
    IDENTIFIED BY 'auth_string'
  | IDENTIFIED BY RANDOM PASSWORD
  | IDENTIFIED WITH auth_plugin
  | IDENTIFIED WITH auth_plugin BY 'auth_string'
  | IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD
  | IDENTIFIED WITH auth_plugin AS 'auth_string'
}
tls_option: {
   SSL
 | X509
 | CIPHER 'cipher'
 | ISSUER 'issuer'
 | SUBJECT 'subject'
}
resource_option: {
    MAX_QUERIES_PER_HOUR count
  | MAX_UPDATES_PER_HOUR count
  | MAX_CONNECTIONS_PER_HOUR count
  | MAX_USER_CONNECTIONS count
}
password_option: {
    PASSWORD EXPIRE [DEFAULT | NEVER | INTERVAL N DAY]
  | PASSWORD HISTORY {DEFAULT | N}
  | PASSWORD REUSE INTERVAL {DEFAULT | N DAY}
  | PASSWORD REQUIRE CURRENT [DEFAULT | OPTIONAL]
  | FAILED_LOGIN_ATTEMPTS N
  | PASSWORD_LOCK_TIME {N | UNBOUNDED}
}
lock_option: {
    ACCOUNT LOCK
  | ACCOUNT UNLOCK
}

その中で、いくつかのパラメータは次のように説明されています。

·user: 新しく作成されたユーザーの名前。

· IDENTIFIED BY: ユーザーのパスワードを設定します。

· IDENTIFIED WITH: ユーザーの認証プラグインを指定します。

· auth_plugin: 認証プラグインの名前。

注: MySQL コマンド ラインで CREATE USER ステートメントを使用してユーザーを作成する場合、現在 MySQL にログインしているユーザーは、mysql データベースの CREATE USER 権限または INSERT (挿入) 権限を持っている必要があります。

(1) ユーザー名が zhaoyanfei、ホスト名が localhost の MySQL ユーザーを作成します。


mysql> CREATE USER 'zhaoyanfei'@'localhost';
Query OK, 0 rows affected

SQL ステートメントが正常に実行され、ユーザー名が binghe のユーザー レコードがチェックされます。


mysql> SELECT host,user,authentication_string FROM mysql.user WHERE user = 'zhaoyanfei';
+-----------+------------+-----------------------+
| host      | user       | authentication_string |
+-----------+------------+-----------------------+
| localhost | zhaoyanfei |                       |
+-----------+------------+-----------------------+
1 row in set

結果は、zhaoyanfei という名前のユーザーとホスト localhost が正常に作成されたことを示しています.このユーザーは、MySQL サービスが配置されているローカルサーバー上の MySQL サービスにのみ接続できます.

新しく作成した zhaoyanfei ユーザーを使用して MySQL サービスに接続すると、パスワードを入力せずに接続できます。

現在のユーザーが持つデータベース権限を表示します。


mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.01 sec)

結果は、現在のユーザーが information_schema データベースにのみアクセスできることを示しています。

(2) MySQL がユーザーを作成すると、特定の IP セグメント内で MySQL サービスに接続するユーザーをサポートします。たとえば、zhaoyanfei という名前のユーザーを作成すると、192.168.31 の IP 範囲内で MySQL サービスに接続できます。


mysql> CREATE USER 'zhaoyanfei'@'192.168.31.%';
Query OK, 0 rows affected (0.00 sec)

SQL ステートメントが正常に実行され、zhaoyanfei という名前のユーザーのデータ レコードが表示されます。


mysql> SELECT
    -> host, user, authentication_string
    -> FROM mysql.user
    -> WHERE user = 'zhaoyanfei';
+---------------+--------+-----------------------+
| host          | user   | authentication_string |
+---------------+--------+-----------------------+
| 192.168.31.% | zhaoyanfei |                       |
| localhost     | zhoayanfei |                       |
+---------------+--------+-----------------------+
2 rows in set (0.00 sec)

結果は、この時点で mysql データベースの下のユーザー データ テーブルに zhaoyanfei という名前のユーザーの 2 つのデータ レコードがあり、ホスト名はそれぞれ 192.168.31.% と localhost であることを示しています。ホスト名は 192.168.31 です。% は、MySQL サービスが 192.168.31 の IP 範囲内で接続できることを示します。

注: MySQL に接続する方法とそのデータベース権限は、MySQL サービスが配置されているローカル サーバー上の MySQL に接続する方法とそのデータベース権限と同じであるため、ここでは繰り返しません。

(3) MySQL ユーザーの作成時にユーザー名の部分のみを指定した場合、ホスト名の部分はデフォルトで % になります。これは、すべてのホストが現在のユーザー名を使用して MySQL サービスに接続できることを意味します。


mysql> CREATE USER 'zhaoyanfei';
Query OK, 0 rows affected (0.00 sec)

SQL ステートメントが正常に実行され、作成されたユーザー情報が表示されます。


mysql> SELECT
    -> host, user, authentication_string
    -> FROM mysql.user
    -> WHERE user = 'zhaoyanfei';
+---------------+--------+-----------------------+
| host          | user   | authentication_string |
+---------------+--------+-----------------------+
| %             | zhaoyanfei |                       |
| 192.168.31.% | zhaoyanfei |                       |
| localhost     | zhaoyanfei |                       |
+---------------+--------+-----------------------+
3 rows in set (0.00 sec)

結果は、ユーザー名 zhaoyanfei で作成されたデータ レコードに、ホスト名 % の追加のデータ レコードがあることを示しています。

(4) MySQL ユーザーの作成時に、ユーザーの接続パスワードを指定できます。


mysql> CREATE USER 'zhaoyanfei'@'localhost' IDENTIFIED BY '@zhaoyanfei123456';
Query OK, 0 rows affected (0.10 sec)

SQL ステートメントが正常に実行され、作成されたユーザー情報が表示されます。


mysql> SELECT
    -> host, user, authentication_string
    -> FROM mysql.user
    -> WHERE user = 'zhaoyanfei'; 
+---------------+--------+-------------------------------------------+
| host          | user   | authentication_string                     |
+---------------+--------+-------------------------------------------+
| %             | zhaoyanfei |                                           |
| 192.168.31.% | zhaoyanfei |                                           |
| localhost     | zhaoyanfei | *027B07B8E65F17AD1283D290B33909F1B8D0E5BB |
+---------------+--------+-------------------------------------------+
3 rows in set (0.00 sec)

ホスト名が localhost のユーザーのパスワードがあることがわかりました。MySQL サービスに接続するとき、MySQL は組み込みの認証メカニズムを内部で使用します。正しく接続するには、パスワード @zhaoyanfei123456 を入力する必要があります。


[root@binghe150 ~]# mysql -ubinghe -hlocalhost -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 19
Server version: 8.0.18 binghe edition
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

(5) パスワードの暗号文がわかっている場合、MySQL は暗号文を使用してユーザーのパスワードを設定することをサポートします。まず、MySQL コマンド ラインでパスワードの暗号文を取得します。バージョン 8.0 でこのステートメントを実行すると、エラーが報告されます。

1064 - SQL 構文にエラーがあります。1 行目の '('@zhaoyanfei123456')' 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。


mysql> SELECT password('@zhaoyanfei123456');
+-------------------------------------------+
| password('@zhaoyanfei123456')                   |
+-------------------------------------------+
| *027B07B8E65F17AD1283D290B33909F1B8D0E5BB |
+-------------------------------------------+
1 row in set, 1 warning (0.00 sec)

次に、MySQL ユーザーを作成します。その中で、ホスト名は 192.168.31.223、ユーザー名は zhaoyanfei です。


mysql> CREATE USER 'zhaoyanfei'@'192.168.31.223' IDENTIFIED BY PASSWORD '*027B07B8E65F17AD1283D290B33909F1B8D0E5BB';
Query OK, 0 rows affected (0.10 sec)

SQL ステートメントが正常に実行されました.MySQL サービスに正しく接続するには、パスワード @zhaoyanfei123456 を入力する必要があります.


(6) MySQL は、ユーザー作成時にユーザーのプラグイン認証方式の設定をサポートしていますが、このとき IDENTIFIED WITH ステートメントを使用する必要があります。


mysql> CREATE USER 'zhaoyanfei'@'localhost'
    -> IDENTIFIED WITH mysql_native_password BY '@zhaoyanfei123456';
Query OK, 0 rows affected (0.00 sec)

SQL ステートメントが正常に実行されました.MySQL サービスに接続するには、パスワード @zhaoyanfei123456 を入力して正しく接続する必要があります.

  1. GRANT ステートメントを使用してユーザーを作成する

CREATE USER ステートメントを使用してユーザーを作成すると、mysql データベースの下のユーザー データ テーブルにレコードが追加されるだけで、ユーザーは承認されません。GRANT ステートメントを使用してユーザーを作成すると、ユーザーを追加できるだけでなく、対応する権限をユーザーに付与することもできます。構文形式は次のとおりです。


GRANT
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    TO user [auth_option] [, user [auth_option]] ...
    [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
    [WITH {GRANT OPTION | resource_option} ...]
GRANT PROXY ON user
    TO user [, user] ...
    [WITH GRANT OPTION]
object_type: {
    TABLE
  | FUNCTION
  | PROCEDURE
}
priv_level: {
    *
  | *.*
  | db_name.*
  | db_name.tbl_name
  | tbl_name
  | db_name.routine_name
}
user:
    (see Section 6.2.4, “Specifying Account Names”)
auth_option: {
    IDENTIFIED BY 'auth_string'
  | IDENTIFIED WITH auth_plugin
  | IDENTIFIED WITH auth_plugin BY 'auth_string'
  | IDENTIFIED WITH auth_plugin AS 'auth_string'
  | IDENTIFIED BY PASSWORD 'auth_string'
}
tls_option: {
    SSL
  | X509
  | CIPHER 'cipher'
  | ISSUER 'issuer'
  | SUBJECT 'subject'
}
resource_option: {
  | MAX_QUERIES_PER_HOUR count
  | MAX_UPDATES_PER_HOUR count
  | MAX_CONNECTIONS_PER_HOUR count
  | MAX_USER_CONNECTIONS count
}

その中で、いくつかのパラメータは次のように説明されています。

·priv_type: ユーザーに付与された権限の種類を示します。

· db_name: ユーザーに権限が付与されているデータベースを示します。

·tbl_name: ユーザーに権限が付与されるデータ テーブルを示します。

· IDENTIFIED BY: ユーザーにパスワードが設定されていることを示します。

· WITH {GRANT OPTION | resource_option}: ユーザーの GRANT パーミッションまたはリソース オプションを設定します。

MAX_QUERIES_PER_HOUR count: 1 時間あたり count 個のクエリを実行します。

MAX_UPDATES_PER_HOUR count: 1 時間あたり count 個の更新を実行します。

MAX_CONNECTIONS_PER_HOUR count: 1 時間あたり count 接続を実行します。

· MAX_USER_CONNECTIONS カウント: 各ユーザーは同時にカウント接続を確立できます。

(1) ユーザー名が binghe、パスワードが @binghe123456 のユーザーを作成し、そのユーザーにすべてのデータ テーブルに対するクエリ権限を付与します。


mysql> GRANT SELECT ON *.* TO 'zhaoyanfei'@'localhost'
    -> IDENTIFIED BY '@zhaoyanfei123456';
Query OK, 0 rows affected, 1 warning (0.12 sec)

SQL ステートメントが正常に実行され、この時点で、zhaoyanfei という名前のユーザーは、すべてのデータ テーブルに対するクエリ権限を持っています。

(2) ユーザー名が zhaoyanfei_database でパスワードが @zhaoyanfei123456 のユーザーを作成し、商品データベースを照会および変更する権限をユーザーに付与します。


mysql> GRANT SELECT, UPDATE ON goods.* TO 'zhaoyanfei_database'@'localhost'
    -> IDENTIFIED BY '@zhaoyanfei123456';
Query OK, 0 rows affected, 1 warning (0.10 sec)

結果は、SQL ステートメントが正常に実行されたことを示しており、この時点で、zhaoyanfei_database という名前のユーザーは、商品データベースを照会および変更する権限を持っています。

(3) ユーザー名が zhaoyanfei_table でパスワードが @zhaoyanfei123456 のユーザーを作成し、そのユーザーに商品データベースの下の t_goods データ テーブルを挿入、削除、変更、およびクエリする権限を付与します。


mysql> GRANT INSERT, DELETE, UPDATE, SELECT
    -> ON goods.t_goods TO 'zhaoyanfei_table'@'localhost'
    -> IDENTIFIED BY '@zhaoyanfei123456';
Query OK, 0 rows affected, 1 warning (0.02 sec)

結果は、SQL ステートメントが正常に実行されたことを示しています。この時点で、zhaoyanfei_table という名前のユーザーは、商品データベースの下にある t_goods データ テーブルを追加、削除、変更、および確認する権限を持っています。

(4) zhaoyanfei という名前のユーザーを作成し、IP 範囲が 192.168.31 のホストを指定して、MySQL サービスに接続できるようにします。


mysql> GRANT SELECT ON *.* TO 'zhaoyanfei'@'192.168.31.%'
    -> IDENTIFIED BY '@zhaoyanfei123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

(5) zhaoyanfei という名前のユーザーを作成し、すべてのホストが MySQL サービスに接続できるように指定します。


mysql> GRANT SELECT ON *.* TO 'zhaoyanfei'@'%'
    -> IDENTIFIED BY '@zhaoyanfei123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)

  1. ユーザーデータテーブルを操作してユーザーを作成する

MySQL はユーザー情報を mysql データベースの下のユーザー データ テーブルに保存するため、ユーザー データ テーブルを直接操作して MySQL の新しいユーザーを作成できます。

たとえば、mysql データベースのユーザー データ テーブルにユーザー情報を挿入するには、ホスト名は localhost、ユーザー名は zhaoyanfei_insert、パスワードは @zhaoyanfei123456 です。


mysql> INSERT INTO mysql.user
    -> (Host, User, authentication_string, ssl_cipher, x509_issuer, x509_subject)
    -> VALUES
    -> ('localhost', 'zhaoyanfei_insert', password('@zhaoyanfei123456'), '', '', '');
Query OK, 1 row affected, 1 warning (0.00 sec)

結果は、SQL ステートメントが正常に実行されたことを示しています。次に、zhaoyanfei_insert というユーザー名を持つユーザーを確認します。


mysql> SELECT host, user, authentication_string FROM mysql.user WHERE user = 'zhaoyanfei_insert';
+-----------+---------------+-------------------------------------------+
| host      | user          | authentication_string                     |
+-----------+---------------+-------------------------------------------+
| localhost | zhaoyanfei_insert | *0DEB06AA6E096EB2F26EACEE157143ADB9481B5B |
+-----------+---------------+-------------------------------------------+
1 row in set (0.00 sec)

結果は、データがユーザー データ テーブルに正常に挿入されたことを示しています。ユーザー zhaoyanfei_insert として MySQL にログインします。


[root@binghe151 ~]# mysql -uzhaoyanfei_insert -hlocalhost
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 34
Server version: 5.7.24 MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

結果は、ユーザー zhaoyanfei_insert が MySQL に正常にログインしたことを示しています。

おすすめ

転載: blog.csdn.net/weixin_36754290/article/details/129425147