用淘寶評(píng)論做網(wǎng)站個(gè)人博客網(wǎng)頁(yè)制作
數(shù)據(jù)庫(kù)用戶
在關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)中,數(shù)據(jù)庫(kù)用戶(USER)是指具有特定權(quán)限和訪問權(quán)限的登錄賬戶。每個(gè)用戶都有自己的用戶名和密碼,以便系統(tǒng)可以通過認(rèn)證來識(shí)別他們的身份。數(shù)據(jù)庫(kù)用戶可以登錄數(shù)據(jù)庫(kù),在其中執(zhí)行各種類型的操作,如創(chuàng)建表格、插入、更新和刪除數(shù)據(jù)、執(zhí)行查詢等。
數(shù)據(jù)庫(kù)用戶可以分為多個(gè)級(jí)別,如超級(jí)用戶、普通用戶、只讀用戶等,他們各自具有不同的權(quán)限和訪問權(quán)限。超級(jí)用戶具有完全控制數(shù)據(jù)庫(kù)的權(quán)限,包括創(chuàng)建和刪除數(shù)據(jù)庫(kù)、用戶、表格等,而只讀用戶只能查看數(shù)據(jù)庫(kù)中的數(shù)據(jù),無法對(duì)其進(jìn)行任何修改操作。
用戶權(quán)限
MySQL 的 USER
權(quán)限級(jí)別:
-
全局性管理權(quán)限:作用于整個(gè) MySQL 實(shí)例級(jí)別
-
數(shù)據(jù)庫(kù)級(jí)別:作用于指定的某個(gè)數(shù)據(jù)庫(kù)上或者所有數(shù)據(jù)庫(kù)上
-
數(shù)據(jù)庫(kù)對(duì)象級(jí)別權(quán)限:作用于指定的數(shù)據(jù)庫(kù)對(duì)象上(表或者視圖)
MySQL 的 USER
權(quán)限:
Mysql數(shù)據(jù)庫(kù)用戶權(quán)限存儲(chǔ)在 MySQL 庫(kù)的 user
, db
, tables_priv
, columns_priv
, procs_priv
這幾個(gè)系統(tǒng)表中,MySQL實(shí)例啟動(dòng)后就加載到內(nèi)存中:
-
user
:存放用戶賬戶信息以及全局級(jí)別(所有數(shù)據(jù)庫(kù))權(quán)限,(存放了那些用戶可以訪問那些數(shù)據(jù)庫(kù)的權(quán)限) -
db
:數(shù)據(jù)庫(kù)級(jí)別權(quán)限,決定了來自哪些主機(jī)的哪些用戶可以訪問此數(shù)據(jù)庫(kù) -
tables_priv
:存放表級(jí)別的權(quán)限,決定了來自哪些主機(jī)的哪些用戶可以訪問數(shù)據(jù)庫(kù)的那張表 -
columns_priv
:存放列級(jí)別的權(quán)限,決定了來自哪些主機(jī)的哪些用戶可以訪問數(shù)據(jù)庫(kù)表的字段 -
procs_priv
:存放存儲(chǔ)過程和函數(shù)級(jí)別的權(quán)限
root 用戶
root 用戶是具有最高權(quán)限的用戶,擁有 MySQL 中的所有權(quán)限。作為 root 用戶,可以執(zhí)行任何操作,包括創(chuàng)建用戶、授予權(quán)限、修改數(shù)據(jù)庫(kù)結(jié)構(gòu)等。
然而,出于安全考慮,使用 root 用戶進(jìn)行日常任務(wù)是不推薦的,應(yīng)該創(chuàng)建一個(gè)具有適當(dāng)權(quán)限的普通用戶來執(zhí)行常規(guī)操作。通過這種方式,可以限制特權(quán)的濫用和減少潛在的安全風(fēng)險(xiǎn)。
創(chuàng)建用戶
使用 CREATE USER
語句創(chuàng)建 MySQL 用戶
CREATE USER 'username'@'host' IDENTIFIED BY 'password'
username
:要?jiǎng)?chuàng)建的用戶名,host
:用戶允許登錄的主機(jī)名或 IP 地址,password
:用戶的密碼。
CREATE USER 'user' IDENTIFIED BY '123456';-- 所有ip都可用賬號(hào)
CREATE USER 'user'@'%' IDENTIFIED BY '123456';-- 本地可用賬號(hào)
CREATE USER 'user'@'localhost' IDENTIFIED BY '123456';-- 指定 IP 可用賬號(hào)
CREATE USER 'user'@'192.138.17.2' IDENTIFIED BY '123456';-- 指定網(wǎng)段可用賬號(hào)
CREATE USER 'user'@'192.138.17.%' IDENTIFIED BY '123456';
SQL 創(chuàng)建用戶
CREATE USER <username> [WITH][DBA|RESOURCE|CONNECT];
只有系統(tǒng)的超級(jí)用戶才有權(quán)創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù)用戶。
CREATE USER
命令中如果沒有指定創(chuàng)建的新用戶的權(quán)限,默認(rèn)該用戶擁有 CONNECT 權(quán)限。
-
擁有
CONNECT
權(quán)限的用戶不能創(chuàng)建新用戶,不能創(chuàng)建模式,也不能創(chuàng)建基本表,只能登錄數(shù)據(jù)庫(kù)。由數(shù)據(jù)庫(kù)管理員或其他用戶授予他應(yīng)有的權(quán)限,根據(jù)獲得的授權(quán)情況他可以對(duì)數(shù)據(jù)庫(kù)對(duì)象進(jìn)行權(quán)限范圍內(nèi)的操作。 -
擁有
RESOURCE
權(quán)限的用戶能創(chuàng)建基本表和視圖,成為所創(chuàng)建對(duì)象的屬主,但不能創(chuàng)建模式 SCHEMA(數(shù)據(jù)庫(kù)),不能創(chuàng)建新的用戶。數(shù)據(jù)庫(kù)對(duì)象的屬主可以使用 GRANT 語句把該對(duì)象上的存取權(quán)限授予其他用戶。 -
擁有
DBA
權(quán)限的用戶是系統(tǒng)中的超級(jí)用戶,可以創(chuàng)建新的用戶、創(chuàng)建模式、創(chuàng)建基本表和視圖等;DBA 擁有對(duì)所有數(shù)據(jù)庫(kù)對(duì)象的存取權(quán)限,還可以把這些權(quán)限授予一般用戶。
修改用戶信息
修改用戶名
使用 RENAME USER
語句修改用戶名:
RENAME USER 'username' TO 'newname';
設(shè)置用戶密碼
MySQL 數(shù)據(jù)庫(kù)一般在創(chuàng)建用戶時(shí)就給用戶設(shè)置了密碼,如果在用戶創(chuàng)建完成后想修改密碼,可通過相應(yīng)的命令來完成。
- 修改其他用戶密碼(當(dāng)前用戶要有權(quán)限),一般在 root 用戶下操作
使用 MySQL 語句
ALTER USER 'username'@'host' IDENTIFIED BY 'newPassword';SET PASSWORD FOR 'username'@'host'=PASSWORD('newpassword');GRANT USER ON permission
TO 'username'@'host' IDENTIFIED BY 'newPassword';
在系統(tǒng)命令行下修改:
mysqladmin –u uername –h host password "newpassword"
- 修改當(dāng)前用戶密碼
SET PASSWORD FOR 'username' = PASSWORD('new_password');ALTER USER user() IDENTIFIED BY 'new_password';
用戶的鎖定與解鎖
在創(chuàng)建用戶時(shí)或用戶創(chuàng)建后可以將用戶鎖定,用戶被鎖定后,此用戶無法完成登錄:
-- 在創(chuàng)建用戶時(shí)鎖定用戶
CREATE USER 'username'@'host' IDENTIFIED 'password'
ACCOUNT LOCK;
-- 用戶創(chuàng)建后,鎖定用戶
ALTER USER 'username'@'host' ACCOUNT LOCK;
-- 解鎖用戶
ALTER USER 'username'@'host' ACCOUNT LOCK;
密碼過期策略
自 MySQL 5.7.4 版本開始,MySQL 引入了默認(rèn)密碼過期策略,用于增強(qiáng)安全保護(hù)機(jī)制。
默認(rèn)過期策略要求新創(chuàng)建的 MySQL 用戶在第一次登錄時(shí)強(qiáng)制更改其初始密碼,以避免安全漏洞。
當(dāng)創(chuàng)建新用戶時(shí),MySQL 會(huì)為其分配一個(gè)默認(rèn)密碼,并將用戶設(shè)置為需要修改密碼。一旦用戶登錄 MySQL 服務(wù)器,就會(huì)提示用戶修改其初始密碼。如果用戶在規(guī)定時(shí)間內(nèi)(default_password_lifetime
變量定義的時(shí)間,默認(rèn)為 360 天)沒有更改密碼,系統(tǒng)將拒絕該用戶的登錄請(qǐng)求。
設(shè)置密碼過期策略
Mysql 數(shù)據(jù)庫(kù)用戶同系統(tǒng)用戶一樣,可以設(shè)置密碼過期策略,密碼的過期天數(shù)可以在配置文件里面設(shè)置,也可以通過命令設(shè)置。
配置文件中設(shè)置
選項(xiàng):default_password_lifetime="過期天數(shù)"
:如果設(shè)置為0,則密碼永不過期。
通過 MySQL 命令設(shè)置
通過命令為每個(gè)用戶設(shè)置密碼的過期天數(shù)則會(huì)覆蓋系統(tǒng)配置文件中的設(shè)置。
-- 設(shè)置過期天數(shù)
ALTER USER 'username'@'localhost' PASSWORD
EXPIRE INTERVAL number day;
-- 設(shè)置密碼不過期
ALTER USER 'username'@'localhost' PASSWORD
EXPIRE never;
-- 默認(rèn)過期策略
ALTER USER 'username'@'localhost' PASSWORD
EXPIRE DEFAULT;
-- 手動(dòng)強(qiáng)制密碼過期
ALTER USER 'username'@'localhost' PASSWORD EXPIRE;
自定義密碼過期策略
如果存在自定義密碼策略,則 MySQL 會(huì)使用自定義策略,而不是默認(rèn)密碼過期策略。如果需要禁用默認(rèn)密碼過期策略,可以使用以下命令:
SET GLOBAL default_password_lifetime = 0;
禁用默認(rèn)密碼過期策略,并允許在創(chuàng)建或更改用戶時(shí)將其密碼永久化。
查看默認(rèn)密碼過期策略下用戶的狀態(tài)
要查看默認(rèn)密碼過期策略下用戶的狀態(tài),可以使用以下命令:
SELECT User, Host, plugin, authentication_string, password_expired FROM mysql.user;
User
和Host
代表用戶名和主機(jī)名authentication_string
代表用戶的加密密碼plugin
代表用戶的身份驗(yàn)證插件password_expired
字段表示用戶是否需要更改密碼。
MySQL 數(shù)據(jù)庫(kù)用戶資源限制
通過修改 MySQL 數(shù)據(jù)庫(kù)資源限制可以限制用戶在某個(gè)時(shí)間段內(nèi)連接 MySQL 數(shù)據(jù)庫(kù)的時(shí)間、執(zhí)行語句的次數(shù)等。
- 設(shè)置參數(shù):
-
MAX_CONNECTIONS_PER_HOUR
:一個(gè)用戶在一個(gè)小時(shí)內(nèi)可以連接 MySQL 的時(shí)間 -
MAX_USER_CONNECTIONS
:一個(gè)用戶可以在同一時(shí)間連接 MySQL 實(shí)例的數(shù)量 -
MAX_EXECUTION_TIME
:限制單個(gè)查詢執(zhí)行的最大時(shí)間。 -
MAX_QUERIES_PER_HOUR
:查詢速率限制,一個(gè)用戶在一個(gè)小時(shí)內(nèi)可以執(zhí)行查詢的次數(shù)(基本包含所有語句) -
MAX_UPDATES_PER_HOUR
:一個(gè)用戶在一個(gè)小時(shí)內(nèi)可以執(zhí)行修改的次數(shù)(僅包含修改數(shù)據(jù)庫(kù)或表的語句) -
MAX_ALLOWED_PACKET
:限制單個(gè)數(shù)據(jù)包傳輸?shù)淖畲蟠笮?/p> -
QUERY_CACHE_SIZE
:限制查詢緩存的最大大小 -
MAX_CONNECT_ERRORS
:限制在指定時(shí)間內(nèi)允許的連接失敗次數(shù)
- 設(shè)置 MySQL 數(shù)據(jù)庫(kù)用戶資源限制
設(shè)置 MySQL 數(shù)據(jù)庫(kù)用戶資源限制時(shí)可以在創(chuàng)建用戶時(shí)設(shè)置,也可以在用戶創(chuàng)建完成后通過命令設(shè)置:
-- 創(chuàng)建用戶時(shí)進(jìn)行資源控制
CREATE USER 'username'@'localhost' INDENTIFIED BY '123456'
WITH
MAX_QURIES_PER_HOUR 20
MAX_CONNECTIONS_PER_HOUR 5
MAX_USER_CONNECTIONS 1;
-- 對(duì)已存在的用戶進(jìn)行資源控制
ALTER USER 'username'@localhost
MAX_UPDATES_PER_HOUR 10
MAX_CONNECTIONS_PER_HOUR 5
MAX_USER_CONNECTIONS 1;