MYSQL8のユーザー権限設定の詳しい説明

        ユニットのシステム パフォーマンスの問題により、Mysql5 を Mysql8 にアップグレードする必要があり、システム パフォーマンスを向上させるには Mysql8 の一部の機能を使用する必要があります。

        ユーザーの権限を設定し、学習し、記録するプロセスでいくつかの問題を発見しました。

目次

1. 環境

2. MySQL8 ユーザー権限

2.1 アカウント管理権限

2.1.1 データベースに接続する

2.1.2 アカウント権限の設定

2.2 パスワード管理

2.3 ロックアカウントの設定 (例を含む)

3. MySQL8 ユーザーリソースの制限


1. 環境

# 下载镜像
$ docker pull mysql:8.0.28

# 创建容器并运行
$ docker run -itd --name mysql8 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_ROOT_HOST='%' mysql

2. MySQL8 ユーザー権限

        MySQL8 より前は、認可テーブルは MyISAM を使用し、非トランザクションでしたが、MySQL8 では、認可テーブルは InnoDB ストレージ エンジンを使用し、トランザクションでした。以下に示すように、テーブルを作成するステートメント (コマンド: show create table user;) を表示して、テーブルのストレージ エンジンを確認します。

        サーバーは起動時に認証テーブルの内容をメモリに読み取ります。権限を変更する場合は、コマンド FLUSH PRIVILEGES 権限を有効にします。

        mysql8 には次の権限関連のテーブルがあります。

user:用户帐户、静态全局权限表;
global_grants:动态全局权限表;
db:数据库级的权限表;
tables_priv:存储表级权限;
columns_priv: 存储列级权限;
procs_priv: 存储过程和函数权限表;
proxies_priv: 代理用户权限表;
default_roles:默认用户角色表;
role_edges:记录角色与用户的授权关系表;
password_history: 密码更改历史表。

        この記事は、一般の開発者が一般的なシステムの開発および展開のニーズに合わせてユーザー権限情報を設定するためのものであり、基本的にユーザー テーブルのみが関係します。        

2.1 アカウント管理権限

2.1.1 データベースに接続する

  • 短いコマンド
docker exec -it mysql3307 bash    // 回车
mysql -uroot -p //回车再输入密码

    以下に示すように:

  • 長いコマンド
docker exec -it mysql3307 bash    // 回车
mysql --user=root --password    // 回车,再输入密码

    以下に示すように: 

2.1.2 アカウント権限の設定

  • アカウントの作成と削除
CREATE USER 和 DROP USER 创建和删除帐户;
  • 権限の割り当てと権限の取り消し
GRANT 和 REVOKE 分配权限和撤销权限;

例:

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';  // 创建局域网络账号
GRANT ALL ON *.* TO 'username'@'localhost' WITH GRANT OPTION; // 分配权限
REVOKE ALL ON *.* FROM 'username'@'localhost';                // 撤销权限
SHOW GRANTS FOR 'username'@'localhost';                       // 查看权限
DROP USER 'username'@'localhost';                             // 删除账号

    注: 他のマシン ユーザーによるアクセスのためのユーザー権限の設定は、localhost を変更するだけで済みます。たとえば、localhost を % に変更すると、任意のマシン ネットワークを意味し、localhost を 192.168.2.% に変更すると、IP 接続データベースに割り当てられたユーザー権限を意味します。 192.168.2の。

2.2 パスワード管理

  • パスワードを変更する
ALTER USER 'username'@'%' IDENTIFIED BY 'password';//修改密码
  • パスワードの有効期限を設定する
ALTER USER 'username'@'%' PASSWORD EXPIRE;                 //设置立即过期
ALTER USER 'username'@'%' PASSWORD EXPIRE INTERVAL 30 DAY; //设置30天过期
ALTER USER 'username'@'%' PASSWORD EXPIRE NEVER;           //禁用密码过期
  •  過去 3 日または 30 日以上前のパスワードを再利用しないでください。

        ファイル my.cnf を変更します。mysql8.0.28 は /etc/my.cnf です。

[mysqld]
password_history=3
password_reuse_interval=30

2.3 ロックアカウントの設定 (例を含む)

# 连续登录失败3次则锁定1天,天数可取值:0-32767,设置 0 则代表解锁
CREATE USER 'test'@'localhost' IDENTIFIED BY 'test123' FAILED_LOGIN_ATTEMPTS 7 PASSWORD_LOCK_TIME 1;

# 连续登录失败3次则永久锁定
ALTER USER 'try8'@'localhost' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME UNBOUNDED;

例:

# 登陆MYSQL
PS C:\Users\Administrator> docker exec -it mysql8 bash
bash-4.4# mysql -uroot -p
Enter password:                                    # 此外输入密码完成登陆
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.2.0 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
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>
# 登陆连续登陆失败3次锁一天的用户test
mysql> CREATE USER 'test'@'localhost' IDENTIFIED BY 'test123' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1;
Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
# 打开另一终端,用正确密码测试是否登陆成功
PS C:\Users\Administrator> docker exec -it mysql8 bash
bash-4.4# mysql -utest -ptest123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.2.0 MySQL Community Server - GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
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>                                # 进到这里说明登陆成功
mysql> exit
Bye
# 测试登陆3次失败
bash-4.4# mysql -utest -ptest12345
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'test'@'localhost' (using password: YES)
bash-4.4# mysql -utest -ptest12345
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'test'@'localhost' (using password: YES)
bash-4.4# mysql -utest -ptest12345
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 3955 (HY000): Access denied for user 'test'@'localhost'. Account is blocked for 1 day(s) (1 day(s) remaining) due to 3 consecutive failed logins.
bash-4.4#

        3回目の入力に失敗すると、「アカウントは1日間ブロックされています(残り1日)」というメッセージが表示され、アカウントが1日間ロックされています。

# 输入正确的用户名密码登陆看是否成功
bash-4.4# mysql -utest -ptest123
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 3955 (HY000): Access denied for user 'test'@'localhost'. Account is blocked for 1 day(s) (1 day(s) remaining) due to 3 consecutive failed logins.

        重要。

  • ロックを解除する
ALTER USER 'test'@'localhost' IDENTIFIED BY 'test123' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 0;

        設定 0: ロック解除を表します。

3. MySQL8 ユーザーリソースの制限

        同時に確立される接続の数を制限するには、グローバル システム変数 max_user_connections をゼロ以外の値に設定します。ただし、クライアントの接続後に実行できるクエリおよび更新操作には制限がありません。クライアントが発行できるステートメントはすべてクエリ制限にカウントされ、データベース テーブルへの変更のみが更新制限にカウントされます。

  • MAX_QUERIES_PER_HOUR: クライアントが 1 時間あたりに発行できるクエリの数。
  • MAX_UPDATES_PER_HOUR: クライアントが 1 時間あたりに発行できる更新の数。
  • MAX_CONNECTIONS_PER_HOUR: クライアントが 1 時間あたりにサーバーに接続できる回数。
  • MAX_USER_CONNECTIONS: クライアントが同時に接続できるサーバーの数など。

ユーザーアカウント作成による制限の例:

CREATE USER 'test'@'localhost' IDENTIFIED BY 'test123'
  WITH MAX_QUERIES_PER_HOUR 10000 
  MAX_UPDATES_PER_HOUR 10000 
  MAX_CONNECTIONS_PER_HOUR 10000 
  MAX_USER_CONNECTIONS 10000 ; # 客户端每小时的查询数、更新数、连接服务器的次数和数量为10000 。

アカウントの変更と削除による制限の例:

ALTER USER 'test'@'localhost' WITH MAX_QUERIES_PER_HOUR 10000; //修改限制
ALTER USER 'test'@'localhost' WITH MAX_CONNECTIONS_PER_HOUR 0; //设置0,为删除限制

おすすめ

転載: blog.csdn.net/imwucx/article/details/134804312