MySQL數(shù)據(jù)庫(kù)必知必會(huì)之安全管理
權(quán)限表
MySQL 服務(wù)器通過(guò)權(quán)限表來(lái)控制用戶對(duì)數(shù)據(jù)庫(kù)的訪問(wèn),由 mysql_install_db 腳本初始化,MySQL 會(huì)根據(jù)這些權(quán)限表的內(nèi)容為每個(gè)用戶賦予相應(yīng)的權(quán)限
1. user 表
user 表是 MySQL 最重要的一個(gè)權(quán)限表,有 49 個(gè)字段,這些字段可以分成四類:
- 范圍列:包括 Host、User,分別表示主機(jī)名、用戶名,Host 指明允許訪問(wèn)的 IP 或主機(jī)范圍,User 指明允許訪問(wèn)的用戶名
- 權(quán)限列:權(quán)限列字段描述用戶在全局范圍內(nèi)允許進(jìn)行的操作,該列的字段值類型為 ENUM,只能取 Y 和 N
- 安全列:安全列有 12 個(gè)字段,其中兩個(gè)和 ssl 相關(guān)、兩個(gè)和 x509 相關(guān)、其他八個(gè)是授權(quán)插件和密碼相關(guān)
- 資源控制列:用于限制用戶使用的資源,一個(gè)小時(shí)內(nèi)用戶查詢或連接數(shù)量超過(guò)資源控制限制將被鎖定,知道下一個(gè)小時(shí)才可以再次執(zhí)行
2. db 表
db 表存儲(chǔ)用戶對(duì)某個(gè)數(shù)據(jù)庫(kù)的操作權(quán)限,決定用戶能從哪個(gè)主機(jī)存取哪個(gè)數(shù)據(jù)庫(kù),大致可以分為兩類字段:
- 用戶列:用戶列有三個(gè)字段,分別是 Host、Db 和 User,分別表示主機(jī)名、數(shù)據(jù)庫(kù)名和用戶名
- 權(quán)限列:決定用戶是否具有創(chuàng)建和修改存儲(chǔ)過(guò)程的權(quán)限
3. tables_priv 表
tables_priv 表用來(lái)對(duì)表設(shè)置操作權(quán)限,有八個(gè)字段:
- Host、Db、User 和 Table_name 四個(gè)字段分別表示主機(jī)名、數(shù)據(jù)庫(kù)名、用戶名和表名
- Grantor 表示修改記錄的用戶
- Timestamp 表示修改該記錄的時(shí)間
- Table_priv 表示對(duì)象操作權(quán)限。包括 Select、Insert、Delete 等
- Column_priv 表示對(duì)表中的列的操作權(quán)限,包括 Select、Insert、Update 和 References
4. columns_priv 表
columns_priv 表用來(lái)對(duì)表的某一列設(shè)置權(quán)限,字段 Column_name 用來(lái)指定對(duì)哪些數(shù)據(jù)列具有操作權(quán)限
賬戶管理
1. 新建普通用戶
在 MySQL8 以前可以使用 GRANT 語(yǔ)句新建用戶,MySQL8 以后需要先創(chuàng)建用戶才能執(zhí)行 GRANT 語(yǔ)句
CREATE USER user[IDENTIFIED BY 'password'][,user[IDENTIFIED BY 'password']]...
user 參數(shù)表示新建用戶的賬戶,由用戶(User)和主機(jī)名(Host)構(gòu)成,形式如 Justin@localhost,IDENTIFIED BY 關(guān)鍵字用來(lái)設(shè)置用戶的密碼,password 參數(shù)表示用戶密碼,可以同時(shí)創(chuàng)建多個(gè)用戶,新用戶可以沒(méi)有初始密碼
2. 刪除普通用戶
DROP USER user[,user]...
user 參數(shù)表示新建用戶的賬戶,由用戶(User)和主機(jī)名(Host)構(gòu)成,可以同時(shí)刪除多個(gè)用戶
也可以使用 DELETE 語(yǔ)句直接將用戶信息從 mysql.user 表刪除,前提是擁有對(duì) mysql.user 表的刪除權(quán)限
DELETE FROM mysql.user WHERE Host='hostname' AND User='username';
3. Root 用戶修改自己的密碼
root 用戶可以使用 ALTER 命令修改密碼
ALTER USER USER() IDENTIFIED BY 'new_password'
也可以使用 SET 語(yǔ)句修改密碼
SET PASSWORD='new_password'
4. Root 用戶修改普通用戶的密碼
root 用戶可以使用 ALTER 命令修改普通用戶的密碼
ALTER USER user [IDENTIFIED BY 'new_password'][,user [IDENTIFIED BY 'new_password']]...
也可以使用 SET 語(yǔ)句修改普通用戶的密碼
SET PASSWORD FOR 'username'@'hostname'='new_password'
普通用戶也可對(duì)自己的密碼進(jìn)行管理,方式與 Root 用戶相同
密碼管理
1. 密碼過(guò)期策略
數(shù)據(jù)庫(kù)管理員可以手動(dòng)設(shè)置賬號(hào)密碼過(guò)期,也可以建立一個(gè)自動(dòng)密碼過(guò)期策略。過(guò)期策略可以是全局的,也可以為每個(gè)賬號(hào)設(shè)置單獨(dú)的過(guò)期策略
手動(dòng)設(shè)置賬號(hào)密碼過(guò)期:
ALTER USER user PASSWORD EXPIRE
密碼過(guò)期策略基于最后修改密碼的時(shí)間自動(dòng)將密碼設(shè)置為過(guò)期,MySQL 使用 default_password_lifetime 系統(tǒng)變量建立全局密碼過(guò)期策略,默認(rèn)值為 0 表示不使用自動(dòng)過(guò)期策略。它允許的值是正整數(shù) N,表示密碼必須每隔 N 天進(jìn)行修改。該值可在服務(wù)器的配置文件設(shè)置,也可以使用 SQL 語(yǔ)句設(shè)置,使用 SQL 語(yǔ)句方式如下:
SET PERSIST default_password_lifetime=180
每個(gè)賬號(hào)既可沿用全局密碼過(guò)期策略,也可單獨(dú)設(shè)置策略
# 設(shè)置賬號(hào)密碼90天過(guò)期 CREATE USER 'Justin@localhost' PASSWORD EXPIRE INTERVAL 90 DAY; ALTER USER 'Justin@localhost' PASSWORD EXPIRE INTERVAL 90 DAY; # 設(shè)置賬號(hào)密碼永不過(guò)期 CREATE USER 'Justin@localhost' PASSWORD EXPIRE NEVER; ALTER USER 'Justin@localhost' PASSWORD EXPIRE NEVER; # 沿用全局密碼過(guò)期策略 CREATE USER 'Justin@localhost' PASSWORD EXPIRE DEFAULT;
2. 密碼重用策略
MySQL 限制使用已用過(guò)的密碼,重用限制策略基于密碼更改時(shí)間和使用時(shí)間,可以是全局的,也可以為每個(gè)賬號(hào)設(shè)置單獨(dú)的策略
MySQL 基于以下規(guī)則來(lái)限制密碼重用:
- 如果賬戶密碼限制基于密碼更改的數(shù)量,那么新密碼不能從最近限制的密碼數(shù)量中選擇,例如,如果密碼更改的最小值為3,那么新密碼不能與最近3個(gè)密碼中任何一個(gè)相同
- 如果賬戶密碼限制基于時(shí)間,那么新密碼不能從規(guī)定時(shí)間內(nèi)選擇,例如,如果重用周期為60天,那么新密碼不能從最近60天內(nèi)使用的密碼中選擇
可以在配置文件設(shè)置密碼重用策略,也可以使用 SQL 語(yǔ)句
# 密碼重用數(shù)量 SET PERSIST password_history=6; # 密碼重用周期 SET PERSIST password_reuse_interval=365;
每個(gè)賬號(hào)既可沿用全局密碼重用策略,也可單獨(dú)設(shè)置策略
# 不能使用最近5個(gè)密碼 CREATE USER 'Justin@localhost' PASSWORD PASSWORD HISTORY 5; ALTER USER 'Justin@localhost' PASSWORD PASSWORD HISTORY 5; # 不能使用最近365天內(nèi)的密碼 CREATE USER 'Justin@localhost' PASSWORD REUSE INTERVAL 365 DAY; ALTER USER 'Justin@localhost' PASSWORD REUSE INTERVAL 365 DAY;
角色
在 MySQL 中,角色是權(quán)限的集合,可以為角色添加或移除權(quán)限。用戶可以被賦予角色,同時(shí)也被賦予角色包含的權(quán)限
1. 創(chuàng)建角色并授權(quán)
創(chuàng)建角色語(yǔ)句如下:
CREATE ROLE 'role_name'[@'host_name'][,'role_name'[@'host_name']]...
為角色授權(quán)語(yǔ)句如下:
GRANT privileges ON table_name TO 'role_name'[@'host_name'];
privileges 代表權(quán)限的名稱,多個(gè)權(quán)限以逗號(hào)1隔開(kāi),可以使用 SHOW 語(yǔ)句查詢權(quán)限名稱
SHOW PRIVILEGES\G;
2. 給用戶添加角色
GTANT role[,role2,...] TO user[,user2,...];
role 代表角色,user 代表用戶,添加之后如果角色處于未激活狀態(tài),需要先將用戶對(duì)應(yīng)的角色激活
SET ROLE DEFAULT
3. 編輯角色或權(quán)限
撤銷用戶角色的 SQL 語(yǔ)句如下:
REVOKE role FROM user;
撤銷角色權(quán)限的 SQL 語(yǔ)句如下:
REVOKE privileges ON tablename FROM 'rolename';
4. 刪除角色
DROP ROLE role[,role2]...
總結(jié)
到此這篇關(guān)于MySQL數(shù)據(jù)庫(kù)必知必會(huì)之安全管理的文章就介紹到這了,更多相關(guān)MySQL安全管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL查詢倒數(shù)第二條記錄實(shí)現(xiàn)方法
這篇文章主要介紹了MySQL查詢倒數(shù)第二條記錄實(shí)現(xiàn)方法,本文直接給出代碼實(shí)例,重要部分已經(jīng)加紅提示,需要的朋友可以參考下2015-05-05配置Mysql主從服務(wù)實(shí)現(xiàn)實(shí)例
這篇文章主要介紹了配置Mysql主從服務(wù)實(shí)現(xiàn)實(shí)例的相關(guān)資料,需要的朋友可以參考下2017-05-05淺談Using filesort和Using temporary 為什么這么慢
本文主要介紹了Using filesort和Using temporary為什么這么慢,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02MySQL學(xué)習(xí)之?dāng)?shù)據(jù)庫(kù)備份詳解
本篇文章主要介紹了MySQL中的 數(shù)據(jù)庫(kù)備份詳解,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家多多進(jìn)步,早日升職加薪2021-09-09Mysql 5.7.19 winx64 ZIP Archive 安裝及使用過(guò)程問(wèn)題小結(jié)
本篇文章給大家介紹了mysql 5.7.19 winx64 ZIP Archive 安裝及使用過(guò)程問(wèn)題小結(jié),需要的朋友可以參考下2017-07-0710個(gè)MySQL性能調(diào)優(yōu)的方法
本文介紹了10個(gè)MySQL性能調(diào)優(yōu)的方法,每個(gè)方法的講解都很細(xì)致,非常實(shí)用,,需要的朋友可以參考下2015-07-07MySQL降權(quán)運(yùn)行之MySQL以Guests帳戶啟動(dòng)設(shè)置方法
我們?cè)趙indows服務(wù)器中使用mysql數(shù)據(jù)的時(shí)候,mysql默認(rèn)都是以system權(quán)限運(yùn)行,如果出現(xiàn)了安全問(wèn)題,黑客就可以通過(guò)mysql提權(quán)新建用戶什么的,所以mysql低權(quán)限運(yùn)行非常必要2014-07-07