目次
1. 権限テーブルへのアクセス
1 を変更する必要があります。ユーザー zj@localhost を作成し、すべてのデータベースのすべてのテーブルに選択権限を付与します。
2. db テーブル
3. zj@localhost の権限を変更して、t2 データベース上のすべてのテーブルの権限のみを選択します。
2. アカウント管理
1. アカウントを作成します
(1) すべてのデータベースに対するすべての権限を実行できる権限を持つユーザー zj を作成します。ローカル接続からのみ実行できます。
(2) (1)に基づいて、zj
(3) (2)に基づいて、パスワードを「123」
(4) 任意の IP から接続できる新しいユーザー zj2 を作成します。権限は、t2 データベース内のすべてのテーブルに対して選択、更新、挿入、削除の操作を実行することです。初期パスワードは「123」です。
(5) 授予 super、process、file 权限给用户 zj3@%
(6) 只授予登录权限给 zj4@localhost
2. 查看账号权限
3. 更改账号权限
示例:
(1) zj4@localhost 目前只有登录权限
(2) 赋予 zj4@localhost 所有数据库上的所有表的 select 权限
(3) 继续给 zj4@localhost 赋予 select 和 insert 权限,和已有的 select 权限进行合并
4. 修改账号密码
(1) 可以用 mysqladmin 命令在命令行指定密码。
(2) 执行 set password 语句。
(3) 可以在全局级别使用 grant usage 语句(在“.”)来指定某个账户的密码而不影响账户当前的权限。
5. 删除账号
6. 账号资源限制
などの通常の権限はデータベース操作に使用されます。
主にアカウントの作成、権限の変更、アカウントの削除が含まれます。
grant 構文を使用して作成します。例:
パスワードが暗号化された文字列の塊になっていることがわかります。
(4) 创建新用户 zj2,可以从任何 IP 连接,权限为对 t2 数据库里的所有表进行 select 、update、insert 和 delete 操作,初始密码为“123”
你可能感兴趣的
ホームページ データベース mysql チュートリアル MySQL はどのように権限管理を実行しますか?

MySQL はどのように権限管理を実行しますか?

Feb 26, 2019 am 11:00 AM
mysql 権限制御

この記事の内容は、MySQL がアクセス許可管理をどのように実行するかを紹介することです。困っている友人は参考にしていただければ幸いです。

MySQL の権限テーブルは、データベースの起動時にメモリにロードされ、ユーザーが ID 認証に合格すると、メモリ内の対応する権限にアクセスします。このようにして、ユーザーはデータベース内の権限範囲を設定できます。 . 内部のさまざまな操作。 [ビデオチュートリアルの推奨: MySQL チュートリアル]

1. 権限テーブルへのアクセス

権限アクセスの 2 つのプロセスで、システムは「mysql」を使用します。データベース内の重要な権限テーブル (MySQL のインストール時に作成され、データベース名は「mysql」) は user、host、db です。

これら 3 つのテーブルの中で最も重要なものは user テーブルで、次に db テーブルはほとんどの場合使用されません。

user の列は主に、ユーザー列、権限列、セキュリティ列、リソース制御列の 4 つの部分に分かれています。

通常、最もよく使用される列はユーザ​​ー列と権限列で、このうち権限列は通常権限と管理権限に分かれています。 select_privsuper_priv などの通常の権限はデータベース操作に使用されます。

ユーザーが接続すると、権限テーブルのアクセスプロセスには次の 2 つのプロセスがあります。

  • まず、ユーザー テーブルのホスト、ユーザー、パスワードの 3 つから開始します。フィールドは、接続された IP、ユーザー名、およびパスワードがテーブルに存在するかどうかを判断するために使用されます。存在する場合は認証が通過し、存在しない場合は接続が拒否されます。

  • ID 認証に合格すると、データベース権限は、user -> db -> tables_priv -> の順序で取得されます。

これらの権限テーブルでは、権限の範囲が順番に減少し、グローバル権限がローカル権限をカバーします。上記の第 1 段階は理解しやすいですが、例を使用して第 2 段階を詳しく説明します。
テストを容易にするために、変数 sql_mode

// sql_mode 默认值中有 NO_AUTO_CREATE_USER (防止GRANT自动创建新用户,除非还指定了密码)
SET SESSION sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
ログイン後にコピー
ログイン後にコピー

1 を変更する必要があります。ユーザー zj@localhost を作成し、すべてのデータベースのすべてのテーブルに選択権限を付与します。

MySQL [mysql]> grant select on *.* to zj@localhost;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

MySQL [mysql]> select * from user where user="zj" and host='localhost' \G;
*************************** 1. row ***************************
                  Host: localhost
                  User: zj
           Select_priv: Y
           Insert_priv: N
           Update_priv: N
           Delete_priv: N
           Create_priv: N
             Drop_priv: N
           Reload_priv: N
...
ログイン後にコピー
ログイン後にコピー

2. db テーブル

MySQL [mysql]> select * from db where user='zj' \G ;
Empty set (0.00 sec)
ログイン後にコピー
ログイン後にコピー

を確認すると、user テーブルの select_priv 列が「Y」であることがわかりますが、db テーブルにはレコードがありません。すべてのデータベースに対する同じ権限は、db テーブルに記録する必要はなく、user テーブルの select_priv を "Y" に変更するだけで済みます。つまり、ユーザー テーブル内のすべての権限は、すべてのデータベースに対する権限を表します。

3. zj@localhost の権限を変更して、t2 データベース上のすべてのテーブルの権限のみを選択します。

MySQL [mysql]> revoke select on *.* from zj@localhost;
Query OK, 0 rows affected, 1 warning (0.02 sec)

MySQL [mysql]> grant select on t2.* to zj@localhost;
Query OK, 0 rows affected, 1 warning (0.04 sec)

MySQL [mysql]> select * from user where user='zj' \G;
*************************** 1. row ***************************
                  Host: localhost
                  User: zj
           Select_priv: N
           Insert_priv: N
           Update_priv: N
           Delete_priv: N
           Create_priv: N
             Drop_priv: N
           Reload_priv: N
...

MySQL [mysql]> select * from db where user='zj' \G;
*************************** 1. row ***************************
                 Host: localhost
                   Db: t2
                 User: zj
          Select_priv: Y
          Insert_priv: N
          Update_priv: N
          Delete_priv: N
          Create_priv: N
            Drop_priv: N
           Grant_priv: N
ログイン後にコピー
ログイン後にコピー

このとき、userテーブルのselect_privが「N」に変更され、dbテーブルにdb t2のレコードが追加されていることが分かりました。つまり、特定の権限がデータベースの一部にのみ付与されている場合、user テーブルの対応する権限列は「N」のままで、特定のデータベース権限が db テーブルに書き込まれます。テーブルとカラムの権限メカニズムは db の権限メカニズムと似ています。

上記の例からわかるように、ユーザーが権限認証に合格し、権限が割り当てられると、権限は user -> db -> columns_priv の順に割り当てられます。つまり、テーブル ユーザーの対応する権限が「Y」の場合、すべてのデータベースに対するこのユーザーの権限が「Y」になり、db、tables_priv、および columns_priv がチェックされなくなります。が「N」の場合、このユーザーの権限はユーザーに対応するデータベースでチェックされ、データベース内の対応する権限が「N」の場合はデータベース内の「Y」の権限を取得します。 tables_priv、columns_privの権限を順に取得し、すべて「N」の場合は権限なしと判断します。

2. アカウント管理

主にアカウントの作成、権限の変更、アカウントの削除が含まれます。

1. アカウントを作成します

grant 構文を使用して作成します。例:

(1) すべてのデータベースに対するすべての権限を実行できる権限を持つユーザー zj を作成します。ローカル接続からのみ実行できます。
MySQL [mysql]> grant all privileges on *.* to zj@localhost;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

MySQL [mysql]> select * from user where user="zj" and host="localhost" \G;
*************************** 1. row ***************************
                  Host: localhost
                  User: zj
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y
         Shutdown_priv: Y
ログイン後にコピー
ログイン後にコピー

ユーザー テーブルでは、grant_priv 権限を除くすべての権限が「Y」であることがわかります。

(2) (1)に基づいて、zj
MySQL [(none)]> grant all privileges on *.* to zj@localhost with grant option;
Query OK, 0 rows affected, 1 warning (0.01 sec)

MySQL [mysql]> select * from user where user="zj" and host='localhost' \G ;
*************************** 1. row ***************************
                  Host: localhost
                  User: zj
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y
         Shutdown_priv: Y
          Process_priv: Y
             File_priv: Y
            Grant_priv: Y
...
ログイン後にコピー
ログイン後にコピー
(3) (2)に基づいて、パスワードを「123」
MySQL [mysql]> grant all  privileges on *.* to zj@localhost identified by '123' with grant option;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

MySQL [mysql]> select * from user where user="zj" and host="localhost" \G ;
*************************** 1. row ***************************
                  Host: localhost
                  User: zj
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y
......  
 authentication_string: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257
      password_expired: N
 password_last_changed: 2017-09-25 20:29:42
     password_lifetime: NULL
ログイン後にコピー
ログイン後にコピー

パスワードが暗号化された文字列の塊になっていることがわかります。

(4) 任意の IP から接続できる新しいユーザー zj2 を作成します。権限は、t2 データベース内のすべてのテーブルに対して選択、更新、挿入、削除の操作を実行することです。初期パスワードは「123」です。
MySQL [mysql]> grant select ,insert, update,delete on t2.* to 'zj2'@'%' identified by '123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

MySQL [mysql]> select * from user where user='zj2' and host="%" \G;
*************************** 1. row ***************************
                  Host: %
                  User: zj2
           Select_priv: N
           Insert_priv: N
           Update_priv: N
           Delete_priv: N
           Create_priv: N
             Drop_priv: N
......
 authentication_string: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257
      password_expired: N
 password_last_changed: 2017-09-25 20:37:49
     password_lifetime: NULL

MySQL [mysql]> select * from db where user="zj2" and host='%' \G;
*************************** 1. row ***************************
                 Host: %
                   Db: t2
                 User: zj2
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: N
            Drop_priv: N
......
ログイン後にコピー
ログイン後にコピー

user テーブルの権限はすべて「N」、db テーブルに追加されたレコードの権限はすべて「Y」です。一般に、過剰な権限を付与せず、適切な権限のみをユーザーに付与します。

この例の IP 制限は、すべての IP が接続できるため、「*」に設定されています。mysql データベースでは、ユーザー テーブルのホスト フィールドによって制御されます。割り当ての種類。

  • Host 値にはホスト名または IP 番号を指定するか、「localhost」はローカル ホストを示します。

  • ホスト列の値にはワイルドカード文字「%」と「_」を使用できます。

  • ホスト値「%」は任意のホスト名と一致します。 、空の Host 値は「%」に相当し、その意味は like 演算子のパターン マッチング操作と同じです。

注意: mysql 数据库的 user 表中 host 的值为 “*” 或者空,表示所有外部 IP 都可以连接,但是不包括本地服务器 localhost,因此,如果要包括本地服务器,必须单独为 localhost 赋予权限。

(5) 授予 super、process、file 权限给用户 zj3@%
MySQL [mysql]> grant super,process,file on *.* to 'zj3'@'%';
Query OK, 0 rows affected, 1 warning (0.00 sec)
ログイン後にコピー
ログイン後にコピー

因为这几个权限都是属于管理权限,因此不能够指定某个数据库,on 后面必须跟 “.”,下面语法将提示错误

MySQL [mysql]> grant super,process,file on t2.* to 'zj3'@'%';
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
ログイン後にコピー
ログイン後にコピー
(6) 只授予登录权限给 zj4@localhost
MySQL [mysql]> grant usage on *.* to 'zj4'@'localhost';
Query OK, 0 rows affected, 2 warnings (0.01 sec)

MySQL [mysql]> exit
Bye

zj@bogon:~$ mysql -uzj4 -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 78
Server version: 5.7.18-log Source distribution

Copyright (c) 2000, 2017, 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 [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.02 sec)
ログイン後にコピー
ログイン後にコピー

usage 权限只能用于数据库登录,不能执行任何操作

2. 查看账号权限

账号创建好后,可以通过如下命令查看权限:

show grants for user@host;
ログイン後にコピー
ログイン後にコピー

示例:

MySQL [(none)]> show grants for zj@localhost;
+-------------------------------------------------------------------+
| Grants for zj@localhost                                           |
+-------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'zj'@'localhost' WITH GRANT OPTION |
+-------------------------------------------------------------------+
1 row in set (0.01 sec)
ログイン後にコピー
ログイン後にコピー

3. 更改账号权限

可以进行权限的新增和回收。和创建账号一样,权限变更也有两种方法:使用 grant(新增) 和 revoke (回收) 语句,或者更改权限表。

示例:
(1) zj4@localhost 目前只有登录权限
MySQL [(none)]> show grants for zj4@localhost;
+-----------------------------------------+
| Grants for zj4@localhost                |
+-----------------------------------------+
| GRANT USAGE ON *.* TO 'zj4'@'localhost' |
+-----------------------------------------+
1 row in set (0.00 sec)
ログイン後にコピー
ログイン後にコピー
(2) 赋予 zj4@localhost 所有数据库上的所有表的 select 权限
MySQL [(none)]> grant select on *.* to 'zj4'@'localhost';
Query OK, 0 rows affected, 1 warning (0.00 sec)

MySQL [(none)]> show grants for zj4@localhost;
+------------------------------------------+
| Grants for zj4@localhost                 |
+------------------------------------------+
| GRANT SELECT ON *.* TO 'zj4'@'localhost' |
+------------------------------------------+
1 row in set (0.00 sec)
ログイン後にコピー
ログイン後にコピー
(3) 继续给 zj4@localhost 赋予 select 和 insert 权限,和已有的 select 权限进行合并
MySQL [(none)]> show grants for 'zj4'@'localhost';
+--------------------------------------------------+
| Grants for zj4@localhost                         |
+--------------------------------------------------+
| GRANT SELECT, INSERT ON *.* TO 'zj4'@'localhost' |
+--------------------------------------------------+
1 row in set (0.00 sec)
ログイン後にコピー
ログイン後にコピー

revoke 语句可以回收已经赋予的权限,对于上面的例子,这里决定要收回 zj4@localhost 上的 insert 和 select 权限:

MySQL [(none)]> revoke select,insert on *.* from zj4@localhost;
Query OK, 0 rows affected, 1 warning (0.00 sec)

MySQL [(none)]> show grants for zj4@localhost;
+-----------------------------------------+
| Grants for zj4@localhost                |
+-----------------------------------------+
| GRANT USAGE ON *.* TO 'zj4'@'localhost' |
+-----------------------------------------+
1 row in set (0.00 sec)
ログイン後にコピー
ログイン後にコピー

usage 权限不能被回收,也就是说,revoke 用户并不能删除用户。

4. 修改账号密码

(1) 可以用 mysqladmin 命令在命令行指定密码。
shell> mysqladmin -u user_name -h host_name password "123456"
ログイン後にコピー
ログイン後にコピー
(2) 执行 set password 语句。
mysql> set password for 'username'@'%' = password('pwd');
ログイン後にコピー
ログイン後にコピー

如果是更改自己的密码,可以省略 for 语句

mysql> set password=password('pwd');
ログイン後にコピー
ログイン後にコピー
(3) 可以在全局级别使用 grant usage 语句(在“.”)来指定某个账户的密码而不影响账户当前的权限。
mysql> grant usage on *.* to 'username'@'%' identified by 'pwd';
ログイン後にコピー
ログイン後にコピー

5. 删除账号

要彻底的删除账号,可以使用 drop user :

drop user zj@localhost;
ログイン後にコピー
ログイン後にコピー

6. 账号资源限制

创建 MySQL 账号时,还有一类选项称为账号资源限制,这类选项的作用是限制每个账号实际具有的资源限制,这里的“资源”主要包括:

  • max_queries_per_hour count : 单个账号每小时执行的查询次数

  • max_upodates_per_hour count : 单个账号每小时执行的更新次数

  • max_connections_per_hour count : 单个账号每小时连接服务器的次数

  • max_user_connections count : 单个账号并发连接服务器的次数







権限制御

  • # 1.5K 読み取り                                                             読むのに 38 分かかります                                                                                                               


                                                                                       

                                                                                                                                                                                                                                                                                                                                                                                      MySQL の権限テーブルは、データベースの起動時にメモリにロードされ、ユーザーが ID 認証に合格すると、メモリ内の対応する権限にアクセスします。このユーザーは、データベースに対する権限の範囲内でさまざまな操作を実行できます。 1. 権限テーブルへのアクセス権限アクセスの 2 つのプロセスでは、システムは「mysql」データベース (MySQL のインストール時に作成され、データベース名は「mysql」) を使用します。 )、最も重要な 3 つの権限テーブルは、user、host、db です。

    user の列は主に、ユーザー列、権限列、セキュリティ列、リソース制御列の 4 つの部分に分かれています。


    通常、最もよく使用される列はユーザ​​ー列と権限列で、このうち権限列は通常権限と管理権限に分かれています。

    select_priv

    super_priv

    などの通常の権限はデータベース操作に使用されます。

    ユーザーが接続すると、権限テーブルのアクセスプロセスには次の 2 つのプロセスがあります。

    まず、ユーザー テーブルのホスト、ユーザー、パスワードの 3 つから開始します。フィールドは、接続された IP、ユーザー名、およびパスワードがテーブルに存在するかどうかを判断するために使用されます。存在する場合は認証が通過し、存在しない場合は接続が拒否されます。

    ID 認証に合格すると、データベース権限は、user -> db -> tables_priv -> の順序で取得されます。

    これらの権限テーブルでは、権限の範囲が順番に減少し、グローバル権限がローカル権限をカバーします。上記の第 1 段階は理解しやすいですが、例を使用して第 2 段階を詳しく説明します。

      テストを容易にするために、変数 sql_mode
    • // sql_mode 默认值中有 NO_AUTO_CREATE_USER (防止GRANT自动创建新用户,除非还指定了密码)
      SET SESSION sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
      ログイン後にコピー
      ログイン後にコピー
      1 を変更する必要があります。ユーザー zj@localhost を作成し、すべてのデータベースのすべてのテーブルに選択権限を付与します。
    MySQL [mysql]> grant select on *.* to zj@localhost;
    Query OK, 0 rows affected, 2 warnings (0.00 sec)
    
    MySQL [mysql]> select * from user where user="zj" and host='localhost' \G;
    *************************** 1. row ***************************
                      Host: localhost
                      User: zj
               Select_priv: Y
               Insert_priv: N
               Update_priv: N
               Delete_priv: N
               Create_priv: N
                 Drop_priv: N
               Reload_priv: N
    ...
    ログイン後にコピー
    ログイン後にコピー
  • 2. db テーブル

    MySQL [mysql]> select * from db where user='zj' \G ;
    Empty set (0.00 sec)
    ログイン後にコピー
    ログイン後にコピー
    を確認すると、user テーブルの select_priv 列が「Y」であることがわかりますが、db テーブルにはレコードがありません。すべてのデータベースに対する同じ権限は、db テーブルに記録する必要はなく、user テーブルの select_priv を "Y" に変更するだけで済みます。つまり、ユーザー テーブル内のすべての権限は、すべてのデータベースに対する権限を表します。
3. zj@localhost の権限を変更して、t2 データベース上のすべてのテーブルの権限のみを選択します。

MySQL [mysql]> revoke select on *.* from zj@localhost;
Query OK, 0 rows affected, 1 warning (0.02 sec)

MySQL [mysql]> grant select on t2.* to zj@localhost;
Query OK, 0 rows affected, 1 warning (0.04 sec)

MySQL [mysql]> select * from user where user='zj' \G;
*************************** 1. row ***************************
                  Host: localhost
                  User: zj
           Select_priv: N
           Insert_priv: N
           Update_priv: N
           Delete_priv: N
           Create_priv: N
             Drop_priv: N
           Reload_priv: N
...

MySQL [mysql]> select * from db where user='zj' \G;
*************************** 1. row ***************************
                 Host: localhost
                   Db: t2
                 User: zj
          Select_priv: Y
          Insert_priv: N
          Update_priv: N
          Delete_priv: N
          Create_priv: N
            Drop_priv: N
           Grant_priv: N
ログイン後にコピー
ログイン後にコピー

このとき、userテーブルのselect_privが「N」に変更され、dbテーブルにdb t2のレコードが追加されていることが分かりました。つまり、特定の権限がデータベースの一部にのみ付与されている場合、user テーブルの対応する権限列は「N」のままで、特定のデータベース権限が db テーブルに書き込まれます。テーブルとカラムの権限メカニズムは db の権限メカニズムと似ています。 上記の例からわかるように、ユーザーが権限認証に合格し、権限が割り当てられると、権限は user -> db -> columns_priv の順に割り当てられます。つまり、テーブル ユーザーの対応する権限が「Y」の場合、すべてのデータベースに対するこのユーザーの権限が「Y」になり、db、tables_priv、および columns_priv がチェックされなくなります。が「N」の場合、このユーザーの権限はユーザーに対応するデータベースでチェックされ、データベース内の対応する権限が「N」の場合はデータベース内の「Y」の権限を取得します。 tables_priv、columns_privの権限を順に取得し、すべて「N」の場合は権限なしと判断します。

2. アカウント管理

主にアカウントの作成、権限の変更、アカウントの削除が含まれます。

1. アカウントを作成します

grant 構文を使用して作成します。例:

(1) すべてのデータベースに対するすべての権限を実行できる権限を持つユーザー zj を作成します。ローカル接続からのみ実行できます。

MySQL [mysql]> grant all privileges on *.* to zj@localhost;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

MySQL [mysql]> select * from user where user="zj" and host="localhost" \G;
*************************** 1. row ***************************
                  Host: localhost
                  User: zj
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y
         Shutdown_priv: Y
ログイン後にコピー
ログイン後にコピー

ユーザー テーブルでは、grant_priv 権限を除くすべての権限が「Y」であることがわかります。

(2) (1)に基づいて、zj

MySQL [(none)]> grant all privileges on *.* to zj@localhost with grant option;
Query OK, 0 rows affected, 1 warning (0.01 sec)

MySQL [mysql]> select * from user where user="zj" and host='localhost' \G ;
*************************** 1. row ***************************
                  Host: localhost
                  User: zj
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y
         Shutdown_priv: Y
          Process_priv: Y
             File_priv: Y
            Grant_priv: Y
...
ログイン後にコピー
ログイン後にコピー

(3) (2)に基づいて、パスワードを「123」

MySQL [mysql]> grant all  privileges on *.* to zj@localhost identified by '123' with grant option;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

MySQL [mysql]> select * from user where user="zj" and host="localhost" \G ;
*************************** 1. row ***************************
                  Host: localhost
                  User: zj
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y
......  
 authentication_string: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257
      password_expired: N
 password_last_changed: 2017-09-25 20:29:42
     password_lifetime: NULL
ログイン後にコピー
ログイン後にコピー

パスワードが暗号化された文字列の塊になっていることがわかります。

(4) 创建新用户 zj2,可以从任何 IP 连接,权限为对 t2 数据库里的所有表进行 select 、update、insert 和 delete 操作,初始密码为“123”
MySQL [mysql]> grant select ,insert, update,delete on t2.* to 'zj2'@'%' identified by '123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

MySQL [mysql]> select * from user where user='zj2' and host="%" \G;
*************************** 1. row ***************************
                  Host: %
                  User: zj2
           Select_priv: N
           Insert_priv: N
           Update_priv: N
           Delete_priv: N
           Create_priv: N
             Drop_priv: N
......
 authentication_string: *23AE809DDACAF96AF0FD78ED04B6A265E05AA257
      password_expired: N
 password_last_changed: 2017-09-25 20:37:49
     password_lifetime: NULL

MySQL [mysql]> select * from db where user="zj2" and host='%' \G;
*************************** 1. row ***************************
                 Host: %
                   Db: t2
                 User: zj2
          Select_priv: Y
          Insert_priv: Y
          Update_priv: Y
          Delete_priv: Y
          Create_priv: N
            Drop_priv: N
......
ログイン後にコピー
ログイン後にコピー

user 表中的权限都是“N”,db 表中增加的记录权限则都是“Y”。一般的,只授予用户适当的权限,而不会授予过多的权限。

本例中的 IP 限制为所有 IP 都可以连接,因此设置为 “*”,mysql 数据库中是通过 user 表的 host 字段来进行控制,host 可以是以下类型的赋值。

  • Host 值可以是主机名或IP号,或 “localhost” 指出本地主机。

  • 可以在 Host 列值使用通配符字符 “%” 和 “_”

  • Host 值 “%” 匹配任何主机名,空 Host 值等价于 “%”,它们的含义与 like 操作符的模式匹配操作相同。

注意: mysql 数据库的 user 表中 host 的值为 “*” 或者空,表示所有外部 IP 都可以连接,但是不包括本地服务器 localhost,因此,如果要包括本地服务器,必须单独为 localhost 赋予权限。

(5) 授予 super、process、file 权限给用户 zj3@%
MySQL [mysql]> grant super,process,file on *.* to 'zj3'@'%';
Query OK, 0 rows affected, 1 warning (0.00 sec)
ログイン後にコピー
ログイン後にコピー

因为这几个权限都是属于管理权限,因此不能够指定某个数据库,on 后面必须跟 “.”,下面语法将提示错误

MySQL [mysql]> grant super,process,file on t2.* to 'zj3'@'%';
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
ログイン後にコピー
ログイン後にコピー
(6) 只授予登录权限给 zj4@localhost
MySQL [mysql]> grant usage on *.* to 'zj4'@'localhost';
Query OK, 0 rows affected, 2 warnings (0.01 sec)

MySQL [mysql]> exit
Bye

zj@bogon:~$ mysql -uzj4 -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 78
Server version: 5.7.18-log Source distribution

Copyright (c) 2000, 2017, 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 [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.02 sec)
ログイン後にコピー
ログイン後にコピー

usage 权限只能用于数据库登录,不能执行任何操作

2. 查看账号权限

账号创建好后,可以通过如下命令查看权限:

show grants for user@host;
ログイン後にコピー
ログイン後にコピー

示例:

MySQL [(none)]> show grants for zj@localhost;
+-------------------------------------------------------------------+
| Grants for zj@localhost                                           |
+-------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'zj'@'localhost' WITH GRANT OPTION |
+-------------------------------------------------------------------+
1 row in set (0.01 sec)
ログイン後にコピー
ログイン後にコピー

3. 更改账号权限

可以进行权限的新增和回收。和创建账号一样,权限变更也有两种方法:使用 grant(新增) 和 revoke (回收) 语句,或者更改权限表。

示例:
(1) zj4@localhost 目前只有登录权限
MySQL [(none)]> show grants for zj4@localhost;
+-----------------------------------------+
| Grants for zj4@localhost                |
+-----------------------------------------+
| GRANT USAGE ON *.* TO 'zj4'@'localhost' |
+-----------------------------------------+
1 row in set (0.00 sec)
ログイン後にコピー
ログイン後にコピー
(2) 赋予 zj4@localhost 所有数据库上的所有表的 select 权限
MySQL [(none)]> grant select on *.* to 'zj4'@'localhost';
Query OK, 0 rows affected, 1 warning (0.00 sec)

MySQL [(none)]> show grants for zj4@localhost;
+------------------------------------------+
| Grants for zj4@localhost                 |
+------------------------------------------+
| GRANT SELECT ON *.* TO 'zj4'@'localhost' |
+------------------------------------------+
1 row in set (0.00 sec)
ログイン後にコピー
ログイン後にコピー
(3) 继续给 zj4@localhost 赋予 select 和 insert 权限,和已有的 select 权限进行合并
MySQL [(none)]> show grants for 'zj4'@'localhost';
+--------------------------------------------------+
| Grants for zj4@localhost                         |
+--------------------------------------------------+
| GRANT SELECT, INSERT ON *.* TO 'zj4'@'localhost' |
+--------------------------------------------------+
1 row in set (0.00 sec)
ログイン後にコピー
ログイン後にコピー

revoke 语句可以回收已经赋予的权限,对于上面的例子,这里决定要收回 zj4@localhost 上的 insert 和 select 权限:

MySQL [(none)]> revoke select,insert on *.* from zj4@localhost;
Query OK, 0 rows affected, 1 warning (0.00 sec)

MySQL [(none)]> show grants for zj4@localhost;
+-----------------------------------------+
| Grants for zj4@localhost                |
+-----------------------------------------+
| GRANT USAGE ON *.* TO 'zj4'@'localhost' |
+-----------------------------------------+
1 row in set (0.00 sec)
ログイン後にコピー
ログイン後にコピー

usage 权限不能被回收,也就是说,revoke 用户并不能删除用户。

4. 修改账号密码

(1) 可以用 mysqladmin 命令在命令行指定密码。
shell> mysqladmin -u user_name -h host_name password "123456"
ログイン後にコピー
ログイン後にコピー
(2) 执行 set password 语句。
mysql> set password for 'username'@'%' = password('pwd');
ログイン後にコピー
ログイン後にコピー

如果是更改自己的密码,可以省略 for 语句

mysql> set password=password('pwd');
ログイン後にコピー
ログイン後にコピー
(3) 可以在全局级别使用 grant usage 语句(在“.”)来指定某个账户的密码而不影响账户当前的权限。
mysql> grant usage on *.* to 'username'@'%' identified by 'pwd';
ログイン後にコピー
ログイン後にコピー

5. 删除账号

要彻底的删除账号,可以使用 drop user :

drop user zj@localhost;
ログイン後にコピー
ログイン後にコピー

6. 账号资源限制

创建 MySQL 账号时,还有一类选项称为账号资源限制,这类选项的作用是限制每个账号实际具有的资源限制,这里的“资源”主要包括:

  • max_queries_per_hour count : 单个账号每小时执行的查询次数

  • max_upodates_per_hour count : 单个账号每小时执行的更新次数

  • max_connections_per_hour count : 单个账号每小时连接服务器的次数

  • max_user_connections count : 单个账号并发连接服务器的次数


  • MySQL はどのように権限管理を実行しますか?



你可能感兴趣的



评论                                                    

默认排序                        时间排序



载入中...

显示更多评论



以上がMySQL はどのように権限管理を実行しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MySQL:簡単な学習のためのシンプルな概念 MySQL:簡単な学習のためのシンプルな概念 Apr 10, 2025 am 09:29 AM

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

phpmyadminを開く方法 phpmyadminを開く方法 Apr 10, 2025 pm 10:51 PM

次の手順でphpmyadminを開くことができます。1。ウェブサイトコントロールパネルにログインします。 2。phpmyadminアイコンを見つけてクリックします。 3。MySQL資格情報を入力します。 4.「ログイン」をクリックします。

MySQL:世界で最も人気のあるデータベースの紹介 MySQL:世界で最も人気のあるデータベースの紹介 Apr 12, 2025 am 12:18 AM

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

なぜMySQLを使用するのですか?利点と利点 なぜMySQLを使用するのですか?利点と利点 Apr 12, 2025 am 12:17 AM

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

単一のスレッドレディスの使用方法 単一のスレッドレディスの使用方法 Apr 10, 2025 pm 07:12 PM

Redisは、単一のスレッドアーキテクチャを使用して、高性能、シンプルさ、一貫性を提供します。 I/Oマルチプレックス、イベントループ、ノンブロッキングI/O、共有メモリを使用して同時性を向上させますが、並行性の制限、単一の障害、および書き込み集約型のワークロードには適していません。

MySQLおよびSQL:開発者にとって不可欠なスキル MySQLおよびSQL:開発者にとって不可欠なスキル Apr 10, 2025 am 09:30 AM

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。

MySQLの場所:データベースとプログラミング MySQLの場所:データベースとプログラミング Apr 13, 2025 am 12:18 AM

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

SQLが行を削除した後にデータを回復する方法 SQLが行を削除した後にデータを回復する方法 Apr 09, 2025 pm 12:21 PM

データベースから直接削除された行を直接回復することは、バックアップまたはトランザクションロールバックメカニズムがない限り、通常不可能です。キーポイント:トランザクションロールバック:トランザクションがデータの回復にコミットする前にロールバックを実行します。バックアップ:データベースの定期的なバックアップを使用して、データをすばやく復元できます。データベーススナップショット:データベースの読み取り専用コピーを作成し、データが誤って削除された後にデータを復元できます。削除ステートメントを使用して注意してください:誤って削除されないように条件を慎重に確認してください。 WHERE句を使用します:削除するデータを明示的に指定します。テスト環境を使用:削除操作を実行する前にテストします。

See all articles