user表在名為“mysql”的數(shù)據(jù)庫(kù)中。MySQL在安裝時(shí)會(huì)自動(dòng)創(chuàng)建一個(gè)名為“mysql”的數(shù)據(jù)庫(kù),mysql數(shù)據(jù)庫(kù)中存儲(chǔ)的都是用戶(hù)權(quán)限表;而user表是mysql數(shù)據(jù)庫(kù)中最重要的一個(gè)權(quán)限表,用來(lái)記錄允許連接到服務(wù)器的賬號(hào)信息。user表里啟用的所有權(quán)限都是全局級(jí)的,適用于所有數(shù)據(jù)庫(kù)。
程序員必備接口測(cè)試調(diào)試工具:立即使用
Apipost = Postman + Swagger + Mock + Jmeter
Api設(shè)計(jì)、調(diào)試、文檔、自動(dòng)化測(cè)試工具
后端、前端、測(cè)試,同時(shí)在線(xiàn)協(xié)作,內(nèi)容實(shí)時(shí)同步
本教程操作環(huán)境:windows7系統(tǒng)、mysql8版本、Dell G3電腦。
user表在名為“mysql”的數(shù)據(jù)庫(kù)中。
MySQL 在安裝時(shí)會(huì)自動(dòng)創(chuàng)建一個(gè)名為 mysql 的數(shù)據(jù)庫(kù),mysql 數(shù)據(jù)庫(kù)中存儲(chǔ)的都是用戶(hù)權(quán)限表。用戶(hù)登錄以后,MySQL 會(huì)根據(jù)這些權(quán)限表的內(nèi)容為每個(gè)用戶(hù)賦予相應(yīng)的權(quán)限。
user 表是 MySQL 中最重要的一個(gè)權(quán)限表,用來(lái)記錄允許連接到服務(wù)器的賬號(hào)信息。需要注意的是,在 user 表里啟用的所有權(quán)限都是全局級(jí)的,適用于所有數(shù)據(jù)庫(kù)。
user 表中的字段
user 表中的字段大致可以分為 4 類(lèi),分別是用戶(hù)列、權(quán)限列、安全列和資源控制列,下面主要介紹這些字段的含義。
用戶(hù)列
用戶(hù)列存儲(chǔ)了用戶(hù)連接 MySQL 數(shù)據(jù)庫(kù)時(shí)需要輸入的信息。需要注意的是 MySQL 5.7 版本不再使用 Password 來(lái)作為密碼的字段,而改成了 authentication_string。
MySQL 5.7 版本的用戶(hù)列如表 1 所示。
字段名 | 字段類(lèi)型 | 是否為空 | 默認(rèn)值 | 說(shuō)明 |
---|---|---|---|---|
Host | char(60) | NO | 無(wú) | 主機(jī)名 |
User | char(32) | NO | 無(wú) | 用戶(hù)名 |
authentication_string | text | YES | 無(wú) | 密碼 |
用戶(hù)登錄時(shí),如果這 3 個(gè)字段同時(shí)匹配,MySQL 數(shù)據(jù)庫(kù)系統(tǒng)才會(huì)允許其登錄。創(chuàng)建新用戶(hù)時(shí),也是設(shè)置這 3 個(gè)字段的值。修改用戶(hù)密碼時(shí),實(shí)際就是修改 user 表的 authentication_string 字段的值。因此,這 3 個(gè)字段決定了用戶(hù)能否登錄。
權(quán)限列
權(quán)限列的字段決定了用戶(hù)的權(quán)限,用來(lái)描述在全局范圍內(nèi)允許對(duì)數(shù)據(jù)和數(shù)據(jù)庫(kù)進(jìn)行的操作。
權(quán)限大致分為兩大類(lèi),分別是高級(jí)管理權(quán)限和普通權(quán)限:
- 高級(jí)管理權(quán)限主要對(duì)數(shù)據(jù)庫(kù)進(jìn)行管理,例如關(guān)閉服務(wù)的權(quán)限、超級(jí)權(quán)限和加載用戶(hù)等;
- 普通權(quán)限主要操作數(shù)據(jù)庫(kù),例如查詢(xún)權(quán)限、修改權(quán)限等。
user 表的權(quán)限列包括 Select_priv、Insert_ priv 等以 priv 結(jié)尾的字段,這些字段值的數(shù)據(jù)類(lèi)型為 ENUM,可取的值只有 Y 和 N:Y 表示該用戶(hù)有對(duì)應(yīng)的權(quán)限,N 表示該用戶(hù)沒(méi)有對(duì)應(yīng)的權(quán)限。從安全角度考慮,這些字段的默認(rèn)值都為 N。
字段名 | 字段類(lèi)型 | 是否為空 | 默認(rèn)值 | 說(shuō)明 |
---|---|---|---|---|
Select_priv | enum('N','Y') | NO | N | 是否可以通過(guò)SELECT 命令查詢(xún)數(shù)據(jù) |
Insert_priv | enum('N','Y') | NO | N | 是否可以通過(guò) INSERT 命令插入數(shù)據(jù) |
Update_priv | enum('N','Y') | NO | N | 是否可以通過(guò)UPDATE 命令修改現(xiàn)有數(shù)據(jù) |
Delete_priv | enum('N','Y') | NO | N | 是否可以通過(guò)DELETE 命令刪除現(xiàn)有數(shù)據(jù) |
Create_priv | enum('N','Y') | NO | N | 是否可以創(chuàng)建新的數(shù)據(jù)庫(kù)和表 |
Drop_priv | enum('N','Y') | NO | N | 是否可以刪除現(xiàn)有數(shù)據(jù)庫(kù)和表 |
Reload_priv | enum('N','Y') | NO | N | 是否可以執(zhí)行刷新和重新加載MySQL所用的各種內(nèi)部緩存的特定命令,包括日志、權(quán)限、主機(jī)、查詢(xún)和表 |
Shutdown_priv | enum('N','Y') | NO | N | 是否可以關(guān)閉MySQL服務(wù)器。將此權(quán)限提供給root賬戶(hù)之外的任何用戶(hù)時(shí),都應(yīng)當(dāng)非常謹(jǐn)慎 |
Process_priv | enum('N','Y') | NO | N | 是否可以通過(guò)SHOW PROCESSLIST命令查看其他用戶(hù)的進(jìn)程 |
File_priv | enum('N','Y') | NO | N | 是否可以執(zhí)行SELECT INTO OUTFILE和LOAD DATA INFILE命令 |
Grant_priv | enum('N','Y') | NO | N | 是否可以將自己的權(quán)限再授予其他用戶(hù) |
References_priv | enum('N','Y') | NO | N | 是否可以創(chuàng)建外鍵約束 |
Index_priv | enum('N','Y') | NO | N | 是否可以對(duì)索引進(jìn)行增刪查 |
Alter_priv | enum('N','Y') | NO | N | 是否可以重命名和修改表結(jié)構(gòu) |
Show_db_priv | enum('N','Y') | NO | N | 是否可以查看服務(wù)器上所有數(shù)據(jù)庫(kù)的名字,包括用戶(hù)擁有足夠訪(fǎng)問(wèn)權(quán)限的數(shù)據(jù)庫(kù) |
Super_priv | enum('N','Y') | NO | N | 是否可以執(zhí)行某些強(qiáng)大的管理功能,例如通過(guò)KILL命令刪除用戶(hù)進(jìn)程;使用SET GLOBAL命令修改全局MySQL變量,執(zhí)行關(guān)于復(fù)制和日志的各種命令。(超級(jí)權(quán)限) |
Create_tmp_table_priv | enum('N','Y') | NO | N | 是否可以創(chuàng)建臨時(shí)表 |
Lock_tables_priv | enum('N','Y') | NO | N | 是否可以使用LOCK TABLES命令阻止對(duì)表的訪(fǎng)問(wèn)/修改 |
Execute_priv | enum('N','Y') | NO | N | 是否可以執(zhí)行存儲(chǔ)過(guò)程 |
Repl_slave_priv | enum('N','Y') | NO | N | 是否可以讀取用于維護(hù)復(fù)制數(shù)據(jù)庫(kù)環(huán)境的二進(jìn)制日志文件 |
Repl_client_priv | enum('N','Y') | NO | N | 是否可以確定復(fù)制從服務(wù)器和主服務(wù)器的位置 |
Create_view_priv | enum('N','Y') | NO | N | 是否可以創(chuàng)建視圖 |
Show_view_priv | enum('N','Y') | NO | N | 是否可以查看視圖 |
Create_routine_priv | enum('N','Y') | NO | N | 是否可以更改或放棄存儲(chǔ)過(guò)程和函數(shù) |
Alter_routine_priv | enum('N','Y') | NO | N | 是否可以修改或刪除存儲(chǔ)函數(shù)及函數(shù) |
Create_user_priv | enum('N','Y') | NO | N | 是否可以執(zhí)行CREATE USER命令,這個(gè)命令用于創(chuàng)建新的MySQL賬戶(hù) |
Event_priv | enum('N','Y') | NO | N | 是否可以創(chuàng)建、修改和刪除事件 |
Trigger_priv | enum('N','Y') | NO | N | 是否可以創(chuàng)建和刪除觸發(fā)器 |
Create_tablespace_priv | enum('N','Y') | NO | N | 是否可以創(chuàng)建表空間 |
如果要修改權(quán)限,可以使用 GRANT 語(yǔ)句為用戶(hù)賦予一些權(quán)限,也可以通過(guò) UPDATE 語(yǔ)句更新 user 表的方式來(lái)設(shè)置權(quán)限。
安全列
安全列主要用來(lái)判斷用戶(hù)是否能夠登錄成功,user 表中的安全列如表 3 所示:
字段名 | 字段類(lèi)型 | 是否為空 | 默認(rèn)值 | 說(shuō)明 |
---|---|---|---|---|
ssl_type | enum('','ANY','X509','SPECIFIED') | NO | 支持ssl標(biāo)準(zhǔn)加密安全字段 | |
ssl_cipher | blob | NO | 支持ssl標(biāo)準(zhǔn)加密安全字段 | |
x509_issuer | blob | NO | 支持x509標(biāo)準(zhǔn)字段 | |
x509_subject | blob | NO | 支持x509標(biāo)準(zhǔn)字段 | |
plugin | char(64) | NO | mysql_native_password | 引入plugins以進(jìn)行用戶(hù)連接時(shí)的密碼驗(yàn)證,plugin創(chuàng)建外部/代理用戶(hù) |
password_expired | enum('N','Y') | NO | N | 密碼是否過(guò)期 (N 未過(guò)期,y 已過(guò)期) |
password_last_changed | timestamp | YES | 記錄密碼最近修改的時(shí)間 | |
password_lifetime | smallint(5) unsigned | YES | 設(shè)置密碼的有效時(shí)間,單位為天數(shù) | |
account_locked | enum('N','Y') | NO | N | 用戶(hù)是否被鎖定(Y 鎖定,N 未鎖定) |
注意:即使 password_expired 為“Y”,用戶(hù)也可以使用密碼登錄 MySQL,但是不允許做任何操作。
通常標(biāo)準(zhǔn)的發(fā)行版不支持 ssl,讀者可以使用 SHOW VARIABLES LIKE "have_openssl" 語(yǔ)句來(lái)查看是否具有 ssl 功能。如果 have_openssl 的值為 DISABLED,那么則不支持 ssl 加密功能。
資源控制列
資源控制列的字段用來(lái)限制用戶(hù)使用的資源,user 表中的資源控制列如表 4 所示。
字段名 | 字段類(lèi)型 | 是否為空 | 默認(rèn)值 | 說(shuō)明 |
---|---|---|---|---|
max_questions | int(11) unsigned | NO | 0 | 規(guī)定每小時(shí)允許執(zhí)行查詢(xún)的操作次數(shù) |
max_updates | int(11) unsigned | NO | 0 | 規(guī)定每小時(shí)允許執(zhí)行更新的操作次數(shù) |
max_connections | int(11) unsigned | NO | 0 | 規(guī)定每小時(shí)允許執(zhí)行的連接操作次數(shù) |
max_user_connections | int(11) unsigned | NO | 0 | 規(guī)定允許同時(shí)建立的連接次數(shù) |
以上字段的默認(rèn)值為 0,表示沒(méi)有限制。一個(gè)小時(shí)內(nèi)用戶(hù)查詢(xún)或者連接數(shù)量超過(guò)資源控制限制,用戶(hù)將被鎖定,直到下一個(gè)小時(shí)才可以在此執(zhí)行對(duì)應(yīng)的操作??梢允褂?GRANT 語(yǔ)句更新這些字段的值。
怎么訪(fǎng)問(wèn)user表
1、連接到mysql數(shù)據(jù)庫(kù),查看默認(rèn)所有數(shù)據(jù)庫(kù)信息
2、因?yàn)閡ser表存在于mysql數(shù)據(jù)庫(kù)中,可以通過(guò)use命令來(lái)切換數(shù)據(jù)庫(kù)
切換數(shù)據(jù)庫(kù)之后通過(guò)show命令可以查看數(shù)據(jù)庫(kù)中所有的數(shù)據(jù)表,在最后可以看到user數(shù)據(jù)表
通過(guò)desc命令可以查看user表的結(jié)構(gòu)信息,因?yàn)閁ser表所包含的信息比較多所以結(jié)構(gòu)信息也比較多
在默認(rèn)沒(méi)有創(chuàng)建其它用戶(hù)的情況下,只有超級(jí)管理員的信息
【