MySQL-Datenbank - Berechtigungskontrolle und Protokollverwaltung

MySQL-Datenbank - Berechtigungskontrolle und Protokollverwaltung

1. MySQL-Benutzerverwaltung und Berechtigungsverwaltung

1. DCL (Data Control Language Database Control Language)

• Vorgänge wie Datenbankautorisierung und Rollensteuerung

• Benutzerberechtigung GRANT, die Benutzern Zugriffsrechte gewährt

• REVOKE hebt die Autorisierung auf und macht die Autorisierung rückgängig

2. MySQL-Berechtigungstabelle

MySQL-Berechtigungen werden von der Berechtigungstabelle verwaltet, die unterteilt ist in:

2.1、mysql.user

• Benutzerfelder: Host, Benutzer, Passwort

• Berechtigungsfeld: _priv nachfolgendes Feld

• Sicherheitsfeld: ssl x509-Feld

• Ressourcenkontrollfelder: Felder beginnend mit max_

2.2、mysql.db

• Benutzerfelder: Host, Benutzer, Passwort

• Berechtigungsfelder: die restlichen Felder, die auf _priv enden

2.3, mysql.tables_priv, mysql.columns_priv, procs_priv

• Berechtigungstabellen für Tabellen, Spalten, Stored Procedures

2.4 Anordnung der Berechtigungsstufen

• mysql.user #Globale Autorisierung

• mysql.db #Autorisierung auf Datenbankebene

• Sonstige # Autorisierung auf Tabellenebene, Spaltenebene

2.5, Datenbank- und Tabellenformat

Datenbank- und Tabellenformat Bedeutung
Name des Datenspeichers.* alles in der Datenbank
Datenbankname.Tabellenname Geben Sie eine Tabelle in der Datenbank an
Datenbankname. gespeicherte Prozedur Geben Sie die gespeicherte Prozedur in der Datenbank an
*.* Alle Datenbanken

2.6 Benutzer- und IP-Format

Benutzer- und IP-Format Bedeutung
Benutzername@IPAdresse Benutzer können nur unter dieser IP zugreifen
[email protected].% Benutzer können nur in diesem IP-Netzwerksegment zugreifen (Platzhalter % bedeutet beliebig)
Benutzername@%.xxx.com Benutzer können sich nur bei Hosts mit dem Domänennamensuffix .xxx.com anmelden
Nutzername@% Benutzer können unter jeder IP zugreifen (die Standard-IP-Adresse ist %)

3. MySQL-Benutzerverwaltung

3.1 Erstellen Sie einen Benutzer

#create user语句创建
create user '用户名'@'IP地址' identified by '密码';
#例:
create user 'test'@'%' identified by '111';

#grant语句创建
grant select on 数据库和表权限 to '用户名'@'IP地址' identified by "密码";
#例:
grant select on *.* to 'test'@'%' identified by "111";

3.2 Benutzer löschen

#drop user语句删除
drop user '用户名'@'IP地址'
#例:
drop user 'user1'@'localhost'

#delete语句删除
delete from mysql.user where user='用户名' and host='IP地址';
#例:
delete from mysql.user where user='test' and host='%';

3.3 Benutzername und IP-Adresse ändern

rename user '旧用户名'@'IP地址' to '新用户名'@'IP地址';
#例:
rename user 'test'@'localhost' to 'demo'@'localhost';

3.4, Passwort ändern

Hinweis: Nachdem Sie das Kennwort geändert haben, müssen Sie die Berechtigungen aktualisierenflush privileges

①root-Benutzer, um sein Passwort zu ändern

方法一:命令行输入
	mysqladmin -uroot -p原密码 password '新密码'

方法二:数据库中输入
	alter user 'root'@'localhost' identified by '新密码';

方法三:数据库中输入
	set PASSWORD=password('新密码');

②Der Root-Benutzer ändert die Passwörter anderer Benutzer

都在数据库中输入
方法一:
	alter user '用户名'@'IP地址' identified by '新密码';

方法二:
	grant select on *.* to '' '用户名'@'IP地址' identified by '新密码';

③Gewöhnliche Benutzer ändern ihre eigenen Passwörter

数据库中输入:
	set password=password('新密码')

3.5. Root-Passwort abrufen

Wenn ich eines Tages das Root-Passwort vergessen habe, wie kann ich das Root-Passwort abrufen?

♩ Ändern Sie die MySQL-Konfigurationsdatei /etc/my.cnf

#在[mysqld]下面加上skip-grant-tables
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
…………
#设置免密登陆
skip-grant-tables

♪ Starten Sie MySQL neu

[root@localhost ~]# systemctl restart mysqld

♫ Passwort ändern

#终端输入mysql直接登录mysql数据库
[root@localhost ~]# mysql
#切换到mysql系统库
mysql> use mysql;

#设置root密码
mysql> update user set authentication_string=password('新密码') where user='root';

♬ Kommentieren Sie im ersten Schritt die passwortfreie Anmeldung aus

[root@localhost ~]# vim /etc/my.cnf
[mysqld]
…………
#skip-grant-tables

Starten Sie abschließend den mysqld-Dienst neu.

3.6 Richtlinie zur Kennwortkomplexität

♪ Installieren Sie das Passwort-Plugin

MySQL hat standardmäßig Einstellungen für die Passwortkomplexität aktiviert, und der Name des Plugins ist validate_password

#安装插件
mysql> install plugin validate_password soname 'validate_password.so';

♪ Installieren und ändern Sie Konfigurationsdateien

#修改配置文件
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
…………
plugin-load=validate_password.so	#安装插件
validate_password_policy=0(或1或2)	#可自行配置规则
validate_password=FORCE_PLUS_PERMANENT
#重启mysql生效
[root@localhost ~]# systemctl restart mysqld

♫ Melden Sie sich bei der Datenbank an, um die Regeln anzuzeigen

mysql> show variables like 'validate%';

Feldbedeutung:

1.validate_password_policy

Stellt die Passwortrichtlinie dar. Die konfigurierbaren Werte lauten wie folgt:

——0 oder LOW muss nur mit der Passwortlänge übereinstimmen (angegeben durch den Parameter validate_password_length).

——1 oder MEDIUM erfüllt die LOW-Richtlinie, und mindestens 1 Zahl, Kleinbuchstaben, Großbuchstaben und Sonderzeichen sind erforderlich.

——2 oder STRONG erfüllt die MEDIUM-Richtlinie, und das Passwort kann nicht in der Wörterbuchdatei gespeichert werden.

2.validate_password_dictionary_file

Die zum Konfigurieren des Passworts verwendete Wörterbuchdatei. Wenn validate_password_policy auf STRONG gesetzt ist, kann die Passwortwörterbuchdatei konfiguriert werden. Die Passwörter in der Wörterbuchdatei dürfen nicht verwendet werden.

3.validate_password_length

Wird verwendet, um die Mindestlänge des Passworts festzulegen, der Standardwert ist 8, das Minimum ist 0

4.validate_password_mixed_case_count

Wenn validate_password_policy auf MEDIUM oder STRONG gesetzt ist, ist die Anzahl der Klein- und Großbuchstaben im Passwort mindestens, der Standardwert ist 1 und das Minimum 0; der Standardwert ist mindestens ein Klein- und ein Großbuchstabe.

5.validate_password_number_count

Wenn validate_password_policy auf MEDIUM oder STRONG eingestellt ist, ist die Mindestanzahl von Ziffern im Passwort standardmäßig 1 und das Minimum 0.

6.validate_password_special_char_count

Wenn validate_password_policy auf MEDIUM oder STRONG eingestellt ist, ist die Mindestanzahl von Sonderzeichen im Passwort 1 und das Minimum 0.

4. Rechteverwaltung

4.1 Recyclinggenehmigungen

Da Sie der Datenbank Berechtigungen hinzufügen können, können Sie die Berechtigungen zurückfordern. Der Befehl lautet:

revoke 权限 on 数据库.数据表 from '用户名'@'IP地址'

• Die widerrufene Berechtigung muss vorhanden sein, sonst tritt ein Fehler auf;

• Gesamter Server - mit grant allundevoke all;

• Gesamte Datenbank - verwendenon datebases.*;

• spezifische Tabellen - verwendenon datebase.table;

4.2 Berechtigungen aktualisieren

mysql> flush privileges;

flush privilegesDer Kern des Befehls besteht darin, die Benutzerinformationen/Berechtigungseinstellungen in den aktuellen Benutzer- und Berechtigungstabellen aus der mysql-Bibliothek (der integrierten Bibliothek der MySQL-Datenbank) in den Speicher zu extrahieren.

Nachdem die MySQL-Benutzerdaten und -Berechtigungen geändert wurden und die Suche direkt ohne Neustart des MySQL-Dienstes wirksam werden soll, müssen Sie diesen Befehl ausführen.

4.3 Berechtigungen anzeigen

show grants for '用户名'@'IP地址';
#可以不指定用户,则显示当前用户权限。
show grants;

4.4 Autorisierung und Passworteinstellung

#授权及设置密码
grant 权限1[,权限2,权限3...] no 数据库.数据表 to '用户名'@'IP地址';
grant 权限1[,权限2,权限3...] no 数据库.数据表 to '用户名'@'IP地址' identified by '密码';

Mehrfachberechtigungen können vereinfacht und durch Kommas getrennt werden. Die Gewährung erfordert explizite Informationen: die zu erteilende Berechtigung, die Datenbank oder Tabelle, der die Berechtigung erteilt wird, der Benutzername.

Genehmigung Betriebsebene der Berechtigung Berechtigungsbeschreibung
schaffen Bibliothek, Tabelle oder Index Bibliotheks-, Tabellen- oder Indexberechtigung erstellen
fallen Bibliothek oder Tisch Löschen Sie Bibliotheks- oder Tabellenberechtigungen
Option gewähren Bibliothek, Tabelle oder gespeichertes Programm Berechtigungsoption Berechtigung erteilen
Verweise Bibliothek oder Tisch Ob die Berechtigung zum Erstellen von Fremdschlüsseln zugelassen werden soll
ändern auftauchen Änderungen an Tabellen, z. B. Berechtigungen zum Hinzufügen von Feldern, Indizes usw.
löschen auftauchen Berechtigung zum Löschen von Daten
Index auftauchen Indexberechtigungen
Einfügung auftauchen Berechtigung einfügen
auswählen auftauchen Berechtigungen abfragen
aktualisieren auftauchen Berechtigungen aktualisieren
Ansicht erstellen Aussicht Ansichtsberechtigungen erstellen
Ansicht zeigen Aussicht Berechtigungen anzeigen
Routine ändern gespeicherte Prozedur Berechtigungen für gespeicherte Prozeduren ändern
Routine schaffen gespeicherte Prozedur Erstellen Sie Berechtigungen für gespeicherte Prozeduren
ausführen gespeicherte Prozedur Ausführen der Berechtigung für gespeicherte Prozeduren
Datei Dateizugriff auf dem Serverhost Dateizugriffsberechtigungen
temporäre Tabelle erstellen Serververwaltung Berechtigung für temporäre Tabelle erstellen
Tabellen sperren Serververwaltung Tabellenberechtigungen sperren
Benutzer erstellen Serververwaltung Erstellen Sie Benutzerberechtigungen
neu laden Serververwaltung Berechtigung zum Ausführen von Befehlen wie Flush-Hosts, Flush-Logs, Flush-Privilegien, Flush-Status, Flush-Tables, Flush-Threads, Refresh und Reload
Prozess Serververwaltung Prozessberechtigungen anzeigen
Replikationsclient Serververwaltung Ermöglicht das Ausführen von Show Master Status, Show Slave Status, Show Binary Logs-Befehlen
Replikationssklave Serververwaltung Erlauben Sie dem Slave-Host, sich über diesen Benutzer mit dem Master zu verbinden, um eine Master-Slave-Replikationsbeziehung herzustellen
Datenbanken zeigen Serververwaltung Datenbankberechtigungen anzeigen
stilllegen Serververwaltung Deaktivieren Sie die Datenbankberechtigungen
super Serververwaltung Berechtigung zum Beenden des Threads ausführen
Autoritätsverteilung mögliche Set-Berechtigungen
Tabellenberechtigungen Auswählen','Einfügen','Aktualisieren','Löschen','Erstellen','Löschen','Erteilen','Referenzen','Index','Ändern'
Spaltenberechtigungen 'Auswählen', 'Einfügen', 'Aktualisieren', 'Referenzen'
Berechtigungen verarbeiten Ausführen', 'Routine ändern', 'Erteilen'

2. MySQL-Protokollverwaltung

1.Mysql-Fehlerprotokoll

Die Rolle des Fehlerprotokolls: Zeichnen Sie den Status, Fehler und Warnungen während des Start- und Arbeitsprozesses von MySQL auf.

Fehlerprotokoll einrichten :

#配置错误日志,修改配置文件,并重启MySQL
[root@localhost ~]# vim /etc/my.cnf
log_error=/mnt/mysql.log #这里的路径和文件名称可以随便定义
[root@localhost ~]# systemctl restart mysqld

Sehen Sie sich das Fehlerprotokoll an :

mysql> select @@log_error;
+-----------------+
| @@log_error 	  |
+-----------------+
| /mnt/mysql.log  |
+-----------------+
1 row in set (0.00 sec)

Hinweis: Konzentrieren Sie sich beim Anzeigen des Fehlerprotokolls auf den Kontext von [ERROR].

2. MySQL-Binärprotokoll

Die Rolle des Binärlogs: Notwendiges Log für die Datenwiederherstellung; Log abhängig von der Master-Slave-Replikation

Binäre Protokolleinstellungen :

#修改配置文件
[root@localhost ~]# vim /etc/my.cnf
server_id=1
log_bin=/mnt/binlog/mysql-bin
#server_id是mysql5.7版本之后开二进制日志的必加参数
#log_bin= 打开二进制功能
#/mnt/binlog 为指定存放路径
#mysql-bin 为文件名前缀

#创建目录并授权
[root@localhost ~]# mkdir -p /mnt/binlog/
[root@localhost ~]# chown -R mysql.mysql /mnt/binlog/*
[root@localhost ~]# systemctl restart mysqld

配置说明:

mysql-bin 是在配置文件配置的前缀。

000001 MySQL每次重启,重新生成新的。

二进制日志的内容

除了查询类的语句,都会记录,即所有数据库变更类的语句

①记录语句的种类

• DDL(数据定义语言):create、drop

• DCL(数据控制语言):grant、revoke

• DML(数据操作语言):insert、update、delete

②不同语句的记录格式说明

• DDL、DCL直接以语句(statement)方式记录

• DML语句有三种模式:SBR、RBR、MBR

模式说明:

• statement——>SBR:做什么记录什么,即SQL语句

• row——>RBR:记录数据行的变化

• mixed——>MBR:自动判断记录模式

• SBR和RBR的区别

区别项 SBR RBR
记录内容 SQL语句 记录数据行的变化
可读性 较强
日志量
日志记录准确性 数据误差 没有误差
#修改二进制日志工作模式
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
binlog_format='MIXED'
#查看二进制日志是否开启
mysql> show variables like '%binlog%';

2.1二进制日志三种模式的区别

2.1.1、ROW:基于行的复制

优点:所有的语句都可以复制,不记录执行的sql语句的上下文相关的信息,仅需要记录那一条记录被修改成什么了。

缺点:binlog大了很多,复杂的回滚时binlog中会包含大量的数据;主服务器上执行update语句时,所有发生变化的记录都会写到binlog中;比如有这样一条update语句update product set owner_member_id='d'where owner_member_id-'a'执行之后,日志中记录的不是这条update语句所对应的事件(mysql是以事件的形式来记录bin-log日志),而是这条语句所更新的每一条记录的变化情况,这样就记录成很多条记录被更新的很多事件。自然bin-log日志的量会很大。

2.1.2、Statement:基于sql语句的复制

优点:不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能。

缺点:由于它是记录的执行语句,所以为了让这些语句在slave端也能正确执行,那么他还必须记录每条语句在执行的时候的一些相关信息,也就是上下文信息,以保证所有语句在slave端被执行的时候能够得到和在master端执行时候相同的结果。另外就是,由于mysql现在发展比较快,很多的新功能加入,使mysql的复制遇到了不小的挑战,自然复制的时候涉及到越复杂的内容,bug也就越容易出现。在statement level下,目前已经发现的就有不少情况会造成mysql的复制问题,主要是修改数据的时候使用了某些特定的函数或者功能的时候会出现,比如sleep()在有些版本就不能正确复制。

2.1.3、mixed模式:row与statement结合

实际上就是前两种模式的结合,在mixed模式下,mysql会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在statement和row之间选一种。新版本中的statement level还是和以前一样,仅仅记录执行的语句。而新版本的mysql中对row level模式被做了优化,并不是所有的修改都会以row level来记录,像遇到表结构变更的时侯就会以statement模式来记录,如果sgl语句确实就是update或者delete等修改数据的语句,那么还是会记录所有行的变更。

2.2二进制日志事件

2.2.1、二进制日志事件简介

• 二进制日志内容以事件(binlog events)为最小记录单元。

• 对于DDL和DCL,一个语句就是一个事件。

• 对于DML(标准的事务语句),只记录已提交的事务的DML语句

begin	;		事件1
a				事件2
b				事件3
commit	;		事件4
2.2.2、事件的构成(为了截取日志)
[root@localhost data]# mysqlbinlog mysql-bin.000001
#at219					事件开始的位置(position)
end_log_pos 319			事件结束的位置(position)
#220811 14:28:12		事件发生的时间
create database aaaaa	事件内容
2.2.3、二进制日志的基础查看
#查看二进制日志的配置信息
mysql> show variables like '%log_bin%';

字段说明:

• log_bin开启二进制日志的开关

• log_bin_basename位置

• sql_log_bin临时开启或关闭二进制日志的小开关

#查看二进制日志的基本信息
mysql> show binary logs;
#查看当前正在使用的二进制日志
mysql> show master status;(常用)

2.3二进制日志内容的查看和截取

#二进制文件不能用vim查看,要用mysqlbinlog命令查看
[root@localhost data]# mysqlbinlog 路径/mysql-bin.000001
#mysql中查看当前记录事务的二进制文件
mysql> show master status;
#查看该文件中的具体事务
mysql> show binlog events in '二进制文件名'

日志截取语法:

• --start-position 开始截取pod点

• --stop-position 结束截取pod点

#截取日志并另存为一个用来恢复的文件
[root@localhost data]# mysqlbinlog --start-position=xxx --stop-position 路径/mysql-bin.00000x > 路径/自定义名字.sql
#恢复
mysql> source 路径/自定义名字.sql

mysql> begin;		#开始事务
mysql> commit;		#提交事务

2.4基于gtid的二进制日志管理

gtid(Global Transaction ID)简介

• 全局唯一的事务编号。

• 幂等性。

• Gtid包括两部分:Server_uuid和Tx_id。

gtid配置

#查看gtid
mysql> show variables like '%gtid%';
+----------------------------------+-----------+
| Variable_name                    | Value     |
+----------------------------------+-----------+
| binlog_gtid_simple_recovery      | ON        |
| enforce_gtid_consistency         | OFF       |
| gtid_executed_compression_period | 1000      |
| gtid_mode                        | OFF       |
| gtid_next                        | AUTOMATIC |
| gtid_owned                       |           |
| gtid_purged                      |           |
| session_track_gtids              | OFF       |
+----------------------------------+-----------+
8 rows in set (0.01 sec)
#修改配置
[root@localhost data]# vim /etc/my.cnf
[msyqld]
gtid_mode=on					#开启gtid
enforce_gtid_consistency=true	#强制GTID一致性
log_slave_updates=1				#主从复制中从库记求bin1og,并统一GTID信息
#重启数据库生效
[root@localhost data]# systemcat restart mysqld
#此时查看gtid就开启了
mysql> show variables like '%gtid%';
+----------------------------------+-----------+
| Variable_name                    | Value     |
+----------------------------------+-----------+
| binlog_gtid_simple_recovery      | ON        |
| enforce_gtid_consistency         | ON       |
| gtid_executed_compression_period | 1000      |
| gtid_mode                        | ON        |
| gtid_next                        | AUTOMATIC |
| gtid_owned                       |           |
| gtid_purged                      |           |
| session_track_gtids              | OFF       |
+----------------------------------+-----------+
8 rows in set (0.01 sec)

基于gtid截取日志

• 对于DDL和DCL 一个操作就是一个GTID

• 对于DML 一个完整的事务就是一个GTID

--include-gtids=包含
--exclude-gtids=排除
--skip-gtids=跳过
#如截取1-3号事务
[root@localhost data]# mysqlbinlog --include-gtids='827ddb16-4ec8-11ea-b734-000c293df1f0:1-3'/usr/lcoal/mysql/data/mysql-bin.000003 > /usr/lcoal/mysql/data/gtid.sql
#截取1-10号事务,跳过6号事务
[root@localhost data]# mysqlbinlog --include-gtids='827ddb16-4ec8-1lea-b734-000c293df1f0:1-10 --exc1ude-gtids:='545fd699-be48-11e9-8f0a-000c2980e248:6' /usr/lcoal/mysql/data/mysql-bin.000003>/usr/lcoal/mysql/data/gtid.sql

3.Mysql慢日志

慢日志简介

• 记录运行较慢的语句记录slowlog中。

• 功能是铺助优化的工具日志。

• 应激性的慢可以通过show processlisti进行监控。

• 一段时间的慢可以进行slow记录、统计。

慢日志配置

#查看慢日志是否开启
mysql> show variables like '%slow_query%';
+---------------------+------------------------------------------+
| Variable_name       | Value                                    |
+---------------------+------------------------------------------+
| slow_query_log      | OFF                                      |
| slow_query_log_file | /usr/local/mysql/data/localhost-slow.log |
+---------------------+------------------------------------------+
2 rows in set (0.01 sec)
#此时慢日志是关闭的
#重连或者新开一个会话才能看到修改值
#查看阈值(达到多长时间才能记录慢日志)
mysql> select @@long_query_time;
+-------------------+
| @@long_query_time |
+-------------------+
|         10.000000 |
+-------------------+
1 row in set (0.00 sec)
#设置阈值为3秒
mysql> set global long_query_time=3;
#修改配置文件,开启慢日志
[root@localhost data]#vim /etc/my.cnf
[mysqld]
slow_query_log=1
slow_query_log_file=/usr/local/mysql/data/qfedu-slow.log
1ong-query_time=3  #默认配置10秒
log_queries_not_using_indexes=1
#重启数据库生效

慢日志分析工具

#得到返回记录集最多的10个SQL
mysqldumpslow -s r -t 10 /usr/local/mysql/data/test-slow.log
#得到访问次数最多的10个SQL
mysqldumpslow -s c -t 10 /usr/local/mysql/data/test-slow.log
#得到按照时间排序的前10条里面含有左连接的查询语句
mysqldumpslow -s t -t 10 -g "LEFT JOIN"
/usr/local/mysql/data/test-s1ow.1og
#结合|more使用,防止爆屏情况
mysqldumpslow -s r -t 10/usr/local/mysql/data/test-slow.log | more
#选项含义
s:表示按何种方式排序
c:访问次数
l:锁定时间
r:返回记录
t:查询时间
al:平均锁定时间
ar:平均返回记录数
at:平均查询时间
t:返回前面多少条的数据
g:后边搭配一个正则匹配模式,大小写不敏感
--help查看帮助

END

Supongo que te gusta

Origin blog.csdn.net/tu464932199/article/details/126396805
Recomendado
Clasificación