Detaillierte Erläuterung der MYSQL8-Benutzerberechtigungskonfiguration

        Das Systemleistungsproblem des Geräts erfordert ein Upgrade von Mysql5 auf Mysql8, und einige Funktionen von Mysql8 müssen verwendet werden, um die Systemleistung zu verbessern.

        Ich habe einige Probleme beim Konfigurieren, Lernen und Aufzeichnen der Benutzerberechtigungen festgestellt.

Inhaltsverzeichnis

1. Umwelt

2. MySQL8-Benutzerberechtigungen

2.1 Berechtigungen zur Kontoverwaltung

2.1.1 Verbindung zur Datenbank herstellen

2.1.2 Konfiguration der Kontoberechtigungen

2.2 Passwortverwaltung

2.3 Konfiguration des Sperrkontos (einschließlich Beispiele)

3. Einschränkungen der MySQL8-Benutzerressourcen


1. Umwelt

# 下载镜像
$ 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-Benutzerberechtigungen

        Vor MySQL8 verwendete die Autorisierungstabelle MyISAM und war nicht transaktional, während in MySQL8 die Autorisierungstabelle die InnoDB-Speicher-Engine verwendete und transaktional war. Überprüfen Sie die Speicher-Engine der Tabelle, indem Sie die Anweisung anzeigen, mit der die Tabelle erstellt wird (Befehl: show create table user;), wie unten gezeigt:

        Der Server liest beim Start den Inhalt der Autorisierungstabelle in den Speicher. Wenn Sie Berechtigungen ändern, müssen Sie sie über den Befehl FLUSH PRIVILEGES um die Berechtigungen wirksam zu machen. .

        In mysql8 gibt es die folgenden berechtigungsbezogenen Tabellen:

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

        Dieser Artikel richtet sich nur an allgemeine Entwickler zum Konfigurieren von Benutzerberechtigungsinformationen, um den Anforderungen der Entwicklung und Bereitstellung allgemeiner Systeme gerecht zu werden. Er betrifft im Wesentlichen nur die Benutzertabelle.        

2.1 Berechtigungen zur Kontoverwaltung

2.1.1 Verbindung zur Datenbank herstellen

  • kurzer Befehl
docker exec -it mysql3307 bash    // 回车
mysql -uroot -p //回车再输入密码

    Wie nachfolgend dargestellt:

  • langer Befehl
docker exec -it mysql3307 bash    // 回车
mysql --user=root --password    // 回车,再输入密码

    Wie nachfolgend dargestellt: 

2.1.2 Konfiguration der Kontoberechtigungen

  • Konten erstellen und löschen
CREATE USER 和 DROP USER 创建和删除帐户;
  • Berechtigungen zuweisen und Berechtigungen widerrufen
GRANT 和 REVOKE 分配权限和撤销权限;

Beispiel:

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';                             // 删除账号

    Hinweis: Die Benutzerberechtigungskonfiguration für den Zugriff durch andere Maschinenbenutzer muss nur den Localhost ändern. Wenn Sie beispielsweise Localhost in % ändern, bedeutet dies, dass es sich um ein beliebiges Maschinennetzwerk handelt, und wenn Sie Localhost in 192.168.2 % ändern, bedeutet dies, dass die Benutzerberechtigungen der IP-Verbindungsdatenbank zugewiesen sind von 192.168.2.

2.2 Passwortverwaltung

  • Kennwort ändern
ALTER USER 'username'@'%' IDENTIFIED BY 'password';//修改密码
  • Legen Sie die Ablaufzeit des Passworts fest
ALTER USER 'username'@'%' PASSWORD EXPIRE;                 //设置立即过期
ALTER USER 'username'@'%' PASSWORD EXPIRE INTERVAL 30 DAY; //设置30天过期
ALTER USER 'username'@'%' PASSWORD EXPIRE NEVER;           //禁用密码过期
  •  Verwenden Sie keine Passwörter der letzten 3 oder älter als 30 Tage

        Ändern Sie die Datei my.cnf, mysql8.0.28 ist /etc/my.cnf:

[mysqld]
password_history=3
password_reuse_interval=30

2.3 Konfiguration des Sperrkontos (einschließlich Beispiele)

# 连续登录失败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;

Beispiel:

# 登陆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#

        Nach der dritten fehlgeschlagenen Eingabe wird die Meldung „Konto ist für 1 Tag(e) gesperrt (1 Tag(e) verbleibend)“ angezeigt. Das Konto wurde für 1 Tag gesperrt.

# 输入正确的用户名密码登陆看是否成功
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.

        Wichtig.

  • Freischalten
ALTER USER 'test'@'localhost' IDENTIFIED BY 'test123' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 0;

        Einstellung 0: steht für Entriegelung.

3. Einschränkungen der MySQL8-Benutzerressourcen

        ​​​​Setzen Sie die globale Systemvariable max_user_connections auf einen Wert ungleich Null, um die Anzahl der gleichzeitig hergestellten Verbindungen zu begrenzen. Es gibt jedoch keine Begrenzung für die Abfrage- und Aktualisierungsvorgänge, die ausgeführt werden können, nachdem der Client verbunden ist. Jede Anweisung, die ein Client ausgeben kann, wird auf das Abfragelimit angerechnet, und nur Änderungen an Datenbanktabellen zählen auf das Aktualisierungslimit.

  • MAX_QUERIES_PER_HOUR: Die Anzahl der Abfragen, die der Client pro Stunde stellen kann;
  • MAX_UPDATES_PER_HOUR: Die Anzahl der Updates, die der Client pro Stunde ausgeben kann;
  • MAX_CONNECTIONS_PER_HOUR: Die Häufigkeit, mit der der Client pro Stunde eine Verbindung zum Server herstellen kann.
  • MAX_USER_CONNECTIONS: Die Anzahl der Server, mit denen sich der Client gleichzeitig verbinden kann usw.

Beispiel für Einschränkungen durch das Anlegen von Benutzerkonten:

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 。

Beispiel für Einschränkungen durch Ändern und Löschen von Konten:

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

Supongo que te gusta

Origin blog.csdn.net/imwucx/article/details/134804312
Recomendado
Clasificación