在MySQL 8.0版本中,存放密碼的表有所變化。這篇文章將介紹MySQL 8.0存放密碼的表是如何改變的,以及這些改變的意義。
在MySQL 8.0之前,存放密碼的表是user表。在user表中,密碼是以PLAINTEXT的形式儲存的。這種儲存方式有著嚴重的安全威脅,因為一旦這張表被黑客入侵,所有的密碼信息就會完全暴露。 MySQL 8.0開始改變了這種不安全的存儲方式。
CREATE TABLE mysql.user ( Host CHAR(60) COLLATE utf8mb4_bin NOT NULL DEFAULT '', User CHAR(80) COLLATE utf8mb4_bin NOT NULL DEFAULT '', authentication_string TEXT COLLATE utf8mb4_bin DEFAULT NULL, ... PRIMARY KEY (Host, User), ... ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
在MySQL 8.0中,存放密碼的表變成了mysql.user表,并修改了儲存密碼的方式。現在,密碼被以HASHED的形式儲存在authentication_string字段中。這個字段是TEXT類型,之所以使用TEXT類型,是因為密碼會經過加密,長度也會隨著加密算法的不同而改變。
mysql>CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword'; Query OK, 0 rows affected (0.04 sec) mysql>SELECT authentication_string FROM mysql.user WHERE User='myuser'; +------------------------------------------------------------------------+ | authentication_string | +------------------------------------------------------------------------+ | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | +------------------------------------------------------------------------+ 1 row in set (0.00 sec)
這些改變帶來的好處是,當黑客入侵mysql數據庫時,他們將無法獲取明文密碼。這樣,就可以避免類似于Equifax數據泄露事件的發生。此外,這種密碼儲存方式還簡化了密碼管理的任務。例如,當需要重置密碼時,僅需要將authentication_string字段設定為HASHED的新密碼即可。
總之,MySQL 8.0中存放密碼的表已經從user表轉變為mysql.user表,并以HASHED形式儲存密碼。這種方式避免了安全威脅,同時也簡化了密碼管理的任務。這一改變是MySQL的一個重要進步,有望為MySQL數據庫的用戶提供更高的安全性保障。