java實現萬年曆功能
今日內容概述
1.MySQL許可權表
2.MySQL建立使用者
3.MySQL修改使用者
4.MySQL刪除使用者
5.MySQL授權
6.MySQL檢視,刪除使用者許可權
7.修改使用者密碼
今日內容詳細
MySQL 是一個多使用者資料庫,具有功能強大的訪問控制系統,可以為不同使用者指定不同許可權。我們之前使用的是 root 使用者,該使用者是超級管理員,擁有所有許可權,包括建立使用者、刪除使用者和修改使用者密碼等管理許可權。為了實際專案的需要,可以建立擁有不同許可權的普通使用者。
1.MySQL許可權表
我們在安裝完MySQL時,會自動建立一個名為mysql的資料庫,mysql 資料庫中儲存的都是使用者許可權表。使用者登入以後,MySQL會根據這些許可權表的內容為每個使用者賦予相應的許可權。 user表是 MySQL 中最重要的一個許可權表,用來記錄允許連線到伺服器的賬號資訊。需要注意的是,在 user 表裡啟用的所有許可權都是全域性級的,適用於所有資料庫。user 表中的欄位大致可以分為 4 類,分別是使用者列、許可權列、安全列和資源控制列。
1.1使用者列
使用者列儲存了使用者連線 MySQL 資料庫時需要輸入的資訊。需要注意的是 MySQL 5.7 版本不再使用 Password 來作為密碼的欄位,而改成了 authentication_string。
使用者登入時,如果這 3 個欄位同時匹配,MySQL 資料庫系統才會允許其登入。建立新使用者時,也是設定這 3 個欄位的值。修改使用者密碼時,實際就是修改 user 表的 authentication_string 欄位的值。因此,這 3 個欄位決定了使用者能否登入。
欄位名 | 欄位型別 | 是否為空 | 預設值 | 說明 |
---|---|---|---|---|
Host | char(60) | NO | 無 | 主機名 |
User | char(32) | NO | 無 | 使用者名稱 |
authentication_string | text | YES | 無 | 密碼 |
1.2許可權列
許可權列的欄位決定了使用者的許可權,用來描述在全域性範圍內允許對資料和資料庫進行的操作。
許可權大致分為兩大類,分別是高階管理許可權和普通許可權:
- 高階管理許可權主要對資料庫進行管理,例如關閉服務的許可權、超級許可權和載入使用者等;
- 普通許可權主要操作資料庫,例如查詢許可權、修改許可權等。
user 表的許可權列包括 Select_priv、Insert_ priv 等以 priv 結尾的欄位,這些欄位值的資料型別為 ENUM,可取的值只有 Y 和 N:Y 表示該使用者有對應的許可權,N 表示該使用者沒有對應的許可權。從安全形度考慮,這些欄位的預設值都為 N。
欄位名 | 欄位型別 | 是否為空 | 預設值 | 說明 |
---|---|---|---|---|
Select_priv | enum('N','Y') | NO | N | 是否可以通過SELECT 命令查詢資料 |
Insert_priv | enum('N','Y') | NO | N | 是否可以通過 INSERT 命令插入資料 |
Update_priv | enum('N','Y') | NO | N | 是否可以通過UPDATE 命令修改現有資料 |
Delete_priv | enum('N','Y') | NO | N | 是否可以通過DELETE 命令刪除現有資料 |
Create_priv | enum('N','Y') | NO | N | 是否可以建立新的資料庫和表 |
Drop_priv | enum('N','Y') | NO | N | 是否可以刪除現有資料庫和表 |
Reload_priv | enum('N','Y') | NO | N | 是否可以執行重新整理和重新載入MySQL所用的各種內部快取的特定命令,包括日誌、許可權、主機、查詢和表 |
Shutdown_priv | enum('N','Y') | NO | N | 是否可以關閉MySQL伺服器。將此許可權提供給root賬戶之外的任何使用者時,都應當非常謹慎 |
Process_priv | enum('N','Y') | NO | N | 是否可以通過SHOW PROCESSLIST命令檢視其他使用者的程序 |
File_priv | enum('N','Y') | NO | N | 是否可以執行SELECT INTO OUTFILE和LOAD DATA INFILE命令 |
Grant_priv | enum('N','Y') | NO | N | 是否可以將自己的許可權再授予其他使用者 |
References_priv | enum('N','Y') | NO | N | 是否可以建立外來鍵約束 |
Index_priv | enum('N','Y') | NO | N | 是否可以對索引進行增刪查 |
Alter_priv | enum('N','Y') | NO | N | 是否可以重新命名和修改表結構 |
Show_db_priv | enum('N','Y') | NO | N | 是否可以檢視伺服器上所有資料庫的名字,包括使用者擁有足夠訪問許可權的資料庫 |
Super_priv | enum('N','Y') | NO | N | 是否可以執行某些強大的管理功能,例如通過KILL命令刪除使用者程序;使用SET GLOBAL命令修改全域性MySQL變數,執行關於複製和日誌的各種命令。(超級許可權) |
Create_tmp_table_priv | enum('N','Y') | NO | N | 是否可以建立臨時表 |
Lock_tables_priv | enum('N','Y') | NO | N | 是否可以使用LOCK TABLES命令阻止對錶的訪問/修改 |
Execute_priv | enum('N','Y') | NO | N | 是否可以執行儲存過程 |
Repl_slave_priv | enum('N','Y') | NO | N | 是否可以讀取用於維護複製資料庫環境的二進位制日誌檔案 |
Repl_client_priv | enum('N','Y') | NO | N | 是否可以確定複製從伺服器和主伺服器的位置 |
Create_view_priv | enum('N','Y') | NO | N | 是否可以建立檢視 |
Show_view_priv | enum('N','Y') | NO | N | 是否可以檢視檢視 |
Create_routine_priv | enum('N','Y') | NO | N | 是否可以更改或放棄儲存過程和函式 |
Alter_routine_priv | enum('N','Y') | NO | N | 是否可以修改或刪除儲存函式及函式 |
Create_user_priv | enum('N','Y') | NO | N | 是否可以執行CREATE USER命令,這個命令用於建立新的MySQL賬戶 |
Event_priv | enum('N','Y') | NO | N | 是否可以建立、修改和刪除事件 |
Trigger_priv | enum('N','Y') | NO | N | 是否可以建立和刪除觸發器 |
Create_tablespace_priv | enum('N','Y') | NO | N | 是否可以建立表空間 |
1.3安全列
安全列主要用來判斷使用者能否登入成功
需要注意的是:即使 password_expired 為“Y”,即密碼以及過期,使用者也可以使用密碼登入MySQL,但是不允許做任何操作。系統會要求你修改密碼。
欄位名 | 欄位型別 | 是否為空 | 預設值 | 說明 |
---|---|---|---|---|
ssl_type | enum('','ANY','X509','SPECIFIED') | NO | 支援ssl標準加密安全欄位 | |
ssl_cipher | blob | NO | 支援ssl標準加密安全欄位 | |
x509_issuer | blob | NO | 支援x509標準欄位 | |
x509_subject | blob | NO | 支援x509標準欄位 | |
plugin | char(64) | NO | mysql_native_password | 引入plugins以進行使用者連線時的密碼驗證,plugin建立外部/代理使用者 |
password_expired | enum('N','Y') | NO | N | 密碼是否過期 (N 未過期,y 已過期) |
password_last_changed | timestamp | YES | 記錄密碼最近修改的時間 | |
password_lifetime | smallint(5) unsigned | YES | 設定密碼的有效時間,單位為天數 | |
account_locked | enum('N','Y') | NO | N | 使用者是否被鎖定(Y 鎖定,N 未鎖定) |
1.4資源控制列
資源控制列的欄位用來限制使用者使用的資源
當這些欄位的預設值為0時,表示沒有限制,一個小時內使用者查詢或者連線數量超過資源控制限制,使用者將被鎖定,直到下一個小時才可以在此執行對應的操作。可以使用 GRANT 語句更新這些欄位的值。
欄位名 | 欄位型別 | 是否為空 | 預設值 | 說明 |
---|---|---|---|---|
max_questions | int(11) unsigned | NO | 0 | 規定每小時允許執行查詢的操作次數 |
max_updates | int(11) unsigned | NO | 0 | 規定每小時允許執行更新的操作次數 |
max_connections | int(11) unsigned | NO | 0 | 規定每小時允許執行的連線操作次數 |
max_user_connections | int(11) unsigned | NO | 0 | 規定允許同時建立的連線次數 |
2.MySQL建立使用者
MySQL 在安裝時,會預設建立一個名為 root 的使用者,該使用者擁有超級許可權,可以控制整個 MySQL 伺服器。
在對 MySQL 的日常管理和操作中,為了避免有人惡意使用 root 使用者控制資料庫,我們通常建立一些具有適當許可權的使用者,儘可能地不用或少用 root 使用者登入系統,以此來確保資料的安全訪問。
MySQL 提供了以下 3 種方法建立使用者。
使用 CREATE USER 語句建立使用者
在 mysql.user 表中新增使用者
使用 GRANT 語句建立使用者
2.1 使用 CREATE USER 語句建立使用者
可以使用 CREATE USER 語句來建立 MySQL 使用者,並設定相應的密碼。其基本語法格式如下:
CREATE USER <使用者> [ IDENTIFIED BY [ PASSWORD ] 'password' ] [ ,使用者 [ IDENTIFIED BY [ PASSWORD ] 'password' ]]
# 使用者:格式為 user_name'@'host_name
# IDENTIFIED BY子句 用於指定使用者的密碼,不設密碼可以不寫
# PASSWORD 'password':PASSWORD 表示使用雜湊值設定密碼,該引數可選。
案例:
mysql> create user 'jerry'@'localhost' identified by '123';
Query OK, 0 rows affected (0.00 sec)
2.2 使用 INSERT 語句新建使用者
可以使用 INSERT 語句將使用者的資訊新增到 mysql.user 表中,但必須擁有對 mysql.user 表的 INSERT 許可權。通常 INSERT 語句只新增 Host、User 和 authentication_string 這 3 個欄位的值
案例:
mysql> insert into mysql.user(host, user, authentication_string, ssl_cipher, x509_issuer, x509_subject) values ('localhost', 'jerry01', PASSWORD('1'), '', '', '');
Query OK, 1 row affected, 1 warning (0.01 sec)
# 使用insert建立的使用者需要重新整理許可權後才能登入
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
2.3使用GRANT語句新建使用者
雖然 CREATE USER 和 INSERT INTO 語句都可以建立普通使用者,但是這兩種方式不便授予使用者許可權。於是 MySQL 提供了 GRANT 語句。
語法:
GRANT priv_type ON database.table TO user [IDENTIFIED BY [PASSWORD] 'password']
其中:
● priv_type 引數表示新使用者的許可權
● database.table 引數表示新使用者的許可權範圍,即只能在指定的資料庫和表上使用自己的許可權
● user 引數指定新使用者的賬號,由使用者名稱和主機名構成
● IDENTIFIED BY 關鍵字用來設定密碼
● password 引數表示新使用者的密碼
案例:
grant select on *.* to 'jerry02'@'localhost' identified by '123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
# 也需要重新整理許可權
3.MySQL修改使用者
在 MySQL 中,我們可以使用 RENAME USER 語句修改一個或多個已經存在的使用者賬號。
語法格式如下:
RENAME USER <舊使用者> TO <新使用者>
其中:
● <舊使用者>:系統中已經存在的 MySQL 使用者賬號。
● <新使用者>:新的 MySQL 使用者賬號。
案例:
mysql> rename user 'jerry01'@'localhost' to 'jerryli'@'%';
Query OK, 0 rows affected (0.00 sec)
4.MySQL刪除使用者
在 MySQL 資料庫中,可以使用 DROP USER 語句刪除使用者,也可以直接在 mysql.user 表中刪除使用者以及相關許可權。
4.1 使用 DROP USER 語句刪除普通使用者
語法:
DROP USER <使用者1> [ , <使用者2> ]…
案例:
mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| jerryli | % |
| lty | % |
| root | % |
| jerry | localhost |
| jerry02 | localhost |
| lty07 | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
| test01 | localhost |
| test02 | localhost |
| test03 | localhost |
| test07 | localhost |
+---------------+-----------+
13 rows in set (0.00 sec)
mysql> drop user 'test01'@'localhost','test07'@'localhost';
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host from mysql.user;
+---------------+-----------+
| user | host |
+---------------+-----------+
| jerryli | % |
| lty | % |
| root | % |
| jerry | localhost |
| jerry02 | localhost |
| lty07 | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
| test02 | localhost |
| test03 | localhost |
+---------------+-----------+
11 rows in set (0.00 sec)
4.2 使用DELETE語句刪除普通使用者
可以使用 DELETE 語句直接刪除 mysql.user 表中相應的使用者資訊,但必須擁有 mysql.user 表的 DELETE 許可權。
語法:
DELETE FROM mysql.user WHERE Host='hostname' AND User='username';
Host 和 User 這兩個欄位都是 mysql.user 表的主鍵。因此,需要兩個欄位的值才能確定一條記錄。
案例:
案例:
mysql> delete from mysql.user where host='localhost' and user='test03';
Query OK, 1 row affected (0.00 sec)
5.MySQL授權
在 MySQL 中,可以通過檢視 mysql.user 表中的資料記錄來檢視相應的使用者許可權,也可以使用 SHOW GRANTS 語句查詢使用者的許可權。
語法:
SHOW GRANTS FOR 'username'@'hostname';
案例:
mysql> show grants for 'jerry'@'localhost';
+-------------------------------------------+
| Grants for jerry@localhost |
+-------------------------------------------+
| GRANT USAGE ON *.* TO 'jerry'@'localhost' |
+-------------------------------------------+
1 row in set (0.00 sec)
mysql> show grants for 'root'@'localhost';
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
6.MySQL檢視,刪除使用者許可權
授權就是為某個使用者賦予某些許可權。例如,可以為新建的使用者賦予查詢所有資料庫和表的許可權。MySQL 提供了 GRANT 語句來為使用者設定許可權。
# 在實際工作中,我們可能需要為開發人員建立使用者並授予適當的許可權讓他們自己玩。
在 MySQL 中,擁有 GRANT 許可權的使用者才可以執行 GRANT 語句,其語法格式如下:
GRANT priv_type [(column_list)] ON database.table TO user [IDENTIFIED BY [PASSWORD] 'password'] [, user[IDENTIFIED BY [PASSWORD] 'password']] ... [WITH with_option [with_option]...]
其中:
● priv_type 引數表示許可權型別;
● columns_list 引數表示許可權作用於哪些列上,省略該引數時,表示作用於整個表;
● database.table 用於指定許可權的級別;
● user 引數表示使用者賬戶,由使用者名稱和主機名構成,格式是“'username'@'hostname'”;
● IDENTIFIED BY 引數用來為使用者設定密碼;
● password 引數是使用者的新密碼。
WITH 關鍵字後面帶有一個或多個 with_option 引數。這個引數有 5 個選項,詳細介紹如下:
● GRANT OPTION:被授權的使用者可以將這些許可權賦予給別的使用者;
● MAX_QUERIES_PER_HOUR count:設定每個小時可以允許執行 count 次查詢;
● MAX_UPDATES_PER_HOUR count:設定每個小時可以允許執行 count 次更新;
● MAX_CONNECTIONS_PER_HOUR count:設定每小時可以建立 count 個連線;
● MAX_USER_CONNECTIONS count:設定單個使用者可以同時具有的 count 個連線。
MySQL 中可以授予的許可權有如下幾組:
● 列許可權,和表中的一個具體列相關。例如,可以使用 UPDATE 語句更新表 students 中 name 列的值的許可權。
● 表許可權,和一個具體表中的所有資料相關。例如,可以使用 SELECT 語句查詢表 students 的所有資料的許可權。
● 資料庫許可權,和一個具體的資料庫中的所有表相關。例如,可以在已有的資料庫 mytest 中建立新表的許可權。
● 使用者許可權,和 MySQL 中所有的資料庫相關。例如,可以刪除已有的資料庫或者建立一個新的資料庫的許可權。
對應地,在 GRANT 語句中可用於指定許可權級別的值有以下幾類格式:
● *:表示當前資料庫中的所有表。
● *.*:表示所有資料庫中的所有表。
● db_name.*:表示某個資料庫中的所有表,db_name 指定資料庫名。
● db_name.tbl_name:表示某個資料庫中的某個表或檢視,db_name 指定資料庫名,tbl_name 指定表名或檢視名。
6.1 許可權型別
許可權名稱 | 對應user表中的欄位 | 說明 |
---|---|---|
SELECT | Select_priv | 表示授予使用者可以使用 SELECT 語句訪問特定資料庫中所有表和檢視的許可權。 |
INSERT | Insert_priv | 表示授予使用者可以使用 INSERT 語句向特定資料庫中所有表新增資料行的許可權。 |
DELETE | Delete_priv | 表示授予使用者可以使用 DELETE 語句刪除特定資料庫中所有表的資料行的許可權。 |
UPDATE | Update_priv | 表示授予使用者可以使用 UPDATE 語句更新特定資料庫中所有資料表的值的許可權。 |
REFERENCES | References_priv | 表示授予使用者可以建立指向特定的資料庫中的表外來鍵的許可權。 |
CREATE | Create_priv | 表示授權使用者可以使用 CREATE TABLE 語句在特定資料庫中建立新表的許可權。 |
ALTER | Alter_priv | 表示授予使用者可以使用 ALTER TABLE 語句修改特定資料庫中所有資料表的許可權。 |
SHOW VIEW | Show_view_priv | 表示授予使用者可以檢視特定資料庫中已有檢視的檢視定義的許可權。 |
CREATE ROUTINE | Create_routine_priv | 表示授予使用者可以為特定的資料庫建立儲存過程和儲存函式的許可權。 |
ALTER ROUTINE | Alter_routine_priv | 表示授予使用者可以更新和刪除資料庫中已有的儲存過程和儲存函式的許可權。 |
INDEX | Index_priv | 表示授予使用者可以在特定資料庫中的所有資料表上定義和刪除索引的許可權。 |
DROP | Drop_priv | 表示授予使用者可以刪除特定資料庫中所有表和檢視的許可權。 |
CREATE TEMPORARY TABLES | Create_tmp_table_priv | 表示授予使用者可以在特定資料庫中建立臨時表的許可權。 |
CREATE VIEW | Create_view_priv | 表示授予使用者可以在特定資料庫中建立新的檢視的許可權。 |
EXECUTE ROUTINE | Execute_priv | 表示授予使用者可以呼叫特定資料庫的儲存過程和儲存函式的許可權。 |
LOCK TABLES | Lock_tables_priv | 表示授予使用者可以鎖定特定資料庫的已有資料表的許可權。 |
ALL 或 ALL PRIVILEGES 或 SUPER | Super_priv | 表示以上所有許可權/超級許可權 |
6.2 使用者授權
使用 GRANT 語句建立一個新的使用者 test7,密碼為 test7。使用者 testUser 對所有的資料有查詢、插入許可權,並授予 GRANT 許可權。SQL 語句和執行過程如下。
案例:
mysql> grant select,insert on *.* to 'jerryli'@'%' identified by '123';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for 'jerryli'@'%';
+----------------------------------------------+
| Grants for jerryli@% |
+----------------------------------------------+
| GRANT SELECT, INSERT ON *.* TO 'jerryli'@'%' |
+----------------------------------------------+
1 row in set (0.00 sec)
# grant, revoke 使用者許可權後,該使用者只有重新連線 MySQL 資料庫,許可權才能生效
# 一般給開發建立使用者許可權,建議不給delete許可權
grant select,update,delete,insert on *.* to egon@'10.0.0.%'' identified by '123';
# 開發圖方便想要root使用者,這玩意,誰給誰背鍋,自己斟酌,可以考慮讓部門老大來給,你自己千萬不要給!!!
6.3刪除使用者許可權
# 刪除某些特定使用者的許可權
語法:
REVOKE priv_type [(column_list)]... ON database.table FROM user [, user]...
其中:
● priv_type 引數表示許可權的型別
● column_list 引數表示許可權作用於哪些列上,沒有該引數時作用於整個表上
● user 引數由使用者名稱和主機名構成,格式為'username'@'hostname'
# 刪除特定使用者的所有許可權
語法:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
需要注意的是:
● REVOKE 語法和 GRANT 語句的語法格式相似,但具有相反的效果。
● 要使用 REVOKE 語句,必須擁有 MySQL 資料庫的全域性 CREATE USER 許可權或 UPDATE 許可權。
案例:
mysql> revoke insert on *.* from 'jerryli'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for 'jerryli'@'%';
+--------------------------------------+
| Grants for jerryli@% |
+--------------------------------------+
| GRANT SELECT ON *.* TO 'jerryli'@'%' |
+--------------------------------------+
1 row in set (0.00 sec)
7.修改使用者密碼
7.1MySQL登入和退出
啟動 MySQL 服務後,可以使用以下命令來登入。
mysql -h hostname|hostlP -p port -u username -p DatabaseName -e "SQL語句"
-- 退出
exit
quit
\q
其中:
● -h:指定連線 MySQL 伺服器的地址。可以用兩種方式表示,hostname 為主機名,hostIP 為主機 IP 地址。
● -P:指定連線 MySQL 伺服器的埠號,port 為連線的埠號。MySQL 的預設埠號是 3306,因此如果不指定該引數,預設使用 3306 連線 MySQL 伺服器。
● -u:指定連線 MySQL 伺服器的使用者名稱,username 為使用者名稱。
● -p:提示輸入密碼,即提示 Enter password。
● DatabaseName:指定連線到 MySQL 伺服器後,登入到哪一個資料庫中。如果沒有指定,預設為 mysql 資料庫。
● -e:指定需要執行的 SQL 語句,登入 MySQL 伺服器後執行這個 SQL 語句,然後退出 MySQL 伺服器。
7.2修改使用者密碼
# 使用SET語句修改普通使用者的密碼
在 MySQL 中,只有 root 使用者可以通過更新 MySQL 資料庫來更改密碼。使用 root 使用者登入到 MySQL 伺服器後,可以使用 SET 語句來修改普通使用者密碼。
案例:
mysql> set password for 'jerry'@'localhost' = password ('123456');
Query OK, 0 rows affected, 1 warning (0.00 sec)
# 使用UPDATE語句修改普通使用者的密碼
使用 root 使用者登入 MySQL 伺服器後,可以使用 UPDATE 語句修改 MySQL 資料庫的 user 表的 authentication_string 欄位,從而修改普通使用者的密碼。
案例:
update mysql.user set authentication_string = PASSWORD("123456") where User = "test07" and Host = "localhost";
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
# 使用mysqladmin命令在命令列修改root密碼
root使用者可以使用 mysqladmin 命令來修改密碼
mysqladmin -u username -h hostname -p password "newpwd"
語法引數說明如下:
● usermame 指需要修改密碼的使用者名稱稱,在這裡指定為 root 使用者;
● hostname 指需要修改密碼的使用者主機名,該引數可以不寫,預設是 localhost;
● password 為關鍵字,而不是指舊密碼;
● newpwd 為新設定的密碼,必須用雙引號括起來。如果使用單引號會引發錯誤,可能會造成修改後的密碼不是你想要的。
案例:
mysqladmin -uroot -p123456 password 555666
# 使用 GRANT 語句修改普通使用者密碼
除了前面介紹的方法,還可以在全域性級別使用 GRANT USAGE 語句指定某個賬戶的密碼而不影響賬戶當前的許可權。需要注意的是,使用 GRANT 語句修改密碼,必須擁有 GRANT 許可權。一般情況下最好使用該方法來指定或修改密碼。
# 修改MySQL資料庫的user表
因為所有賬戶資訊都儲存在 user 表中,因此可以直接通過修改 user 表來改變 root 使用者的密碼
案例:
update mysql.user set authentication_string = PASSWORD ("123456") WHERE User = "root" and Host="localhost";
重新整理許可權:
FLUSH PRIVILEGES;
# root密碼忘記了,如何重置?
上面的修改密碼的方式都建立在知曉密碼的情況下,若我們忘記了密碼該怎麼辦?
我們可以通過跳過授權表的方式
vim /etc/my.cnf
在[mysqld]下新增一條指令:
skip_grant_tables
儲存退出即可
mysql -uroot # 就可以不用輸入密碼了
進入mysql命令列後我們使用之前的幾種方法修改密碼即可
UPDATE mysql.user set authentication_string = PASSWORD ("123456") WHERE User = "root" and Host="localhost";
修改完密碼後記得將配置檔案中跳過授權表的語句刪除,重啟mysql即可。