MySQL 安全管理

来源:https://www.cnblogs.com/Yee-Q/archive/2022/05/01/16213136.html
-Advertisement-
Play Games

許可權表 MySQL 伺服器通過許可權表來控制用戶對資料庫的訪問,由 mysql_install_db 腳本初始化,MySQL 會根據這些許可權表的內容為每個用戶賦予相應的許可權 1. user 表 user 表是 MySQL 最重要的一個許可權表,有 49 個欄位,這些欄位可以分成四類: 範圍列:包括 Ho ...



許可權表

MySQL 伺服器通過許可權表來控制用戶對資料庫的訪問,由 mysql_install_db 腳本初始化,MySQL 會根據這些許可權表的內容為每個用戶賦予相應的許可權

1. user 表

user 表是 MySQL 最重要的一個許可權表,有 49 個欄位,這些欄位可以分成四類:

  • 範圍列:包括 Host、User,分別表示主機名、用戶名,Host 指明允許訪問的 IP 或主機範圍,User 指明允許訪問的用戶名
  • 許可權列:許可權列欄位描述用戶在全局範圍內允許進行的操作,該列的欄位值類型為 ENUM,只能取 Y 和 N
  • 安全列:安全列有 12 個欄位,其中兩個和 ssl 相關、兩個和 x509 相關、其他八個是授權插件和密碼相關
  • 資源控制列:用於限制用戶使用的資源,一個小時內用戶查詢或連接數量超過資源控制限制將被鎖定,知道下一個小時才可以再次執行

2. db 表

db 表存儲用戶對某個資料庫的操作許可權,決定用戶能從哪個主機存取哪個資料庫,大致可以分為兩類欄位:

  • 用戶列:用戶列有三個欄位,分別是 Host、Db 和 User,分別表示主機名、資料庫名和用戶名
  • 許可權列:決定用戶是否具有創建和修改存儲過程的許可權

3. tables_priv 表

tables_priv 表用來對錶設置操作許可權,有八個欄位:

  • Host、Db、User 和 Table_name 四個欄位分別表示主機名、資料庫名、用戶名和表名
  • Grantor 表示修改記錄的用戶
  • Timestamp 表示修改該記錄的時間
  • Table_priv 表示對象操作許可權。包括 Select、Insert、Delete 等
  • Column_priv 表示對錶中的列的操作許可權,包括 Select、Insert、Update 和 References

4. columns_priv 表

columns_priv 表用來對錶的某一列設置許可權,欄位 Column_name 用來指定對哪些數據列具有操作許可權


賬戶管理

1. 新建普通用戶

在 MySQL8 以前可以使用 GRANT 語句新建用戶,MySQL8 以後需要先創建用戶才能執行 GRANT 語句

CREATE USER user[IDENTIFIED BY 'password'][,user[IDENTIFIED BY 'password']]...

user 參數表示新建用戶的賬戶,由用戶(User)和主機名(Host)構成,形式如 [email protected],IDENTIFIED BY 關鍵字用來設置用戶的密碼,password 參數表示用戶密碼,可以同時創建多個用戶,新用戶可以沒有初始密碼

2. 刪除普通用戶

DROP USER user[,user]...

user 參數表示新建用戶的賬戶,由用戶(User)和主機名(Host)構成,可以同時刪除多個用戶

也可以使用 DELETE 語句直接將用戶信息從 mysql.user 表刪除,前提是擁有對 mysql.user 表的刪除許可權

DELETE FROM mysql.user WHERE Host='hostname' AND User='username';

3. Root 用戶修改自己的密碼

root 用戶可以使用 ALTER 命令修改密碼

ALTER USER USER() IDENTIFIED BY 'new_password'

也可以使用 SET 語句修改密碼

SET PASSWORD='new_password'

4. Root 用戶修改普通用戶的密碼

root 用戶可以使用 ALTER 命令修改普通用戶的密碼

ALTER USER user [IDENTIFIED BY 'new_password'][,user [IDENTIFIED BY 'new_password']]...

也可以使用 SET 語句修改普通用戶的密碼

SET PASSWORD FOR 'username'@'hostname'='new_password'

普通用戶也可對自己的密碼進行管理,方式與 Root 用戶相同


密碼管理

1. 密碼過期策略

資料庫管理員可以手動設置賬號密碼過期,也可以建立一個自動密碼過期策略。過期策略可以是全局的,也可以為每個賬號設置單獨的過期策略

手動設置賬號密碼過期:

ALTER USER user PASSWORD EXPIRE

密碼過期策略基於最後修改密碼的時間自動將密碼設置為過期,MySQL 使用 default_password_lifetime 系統變數建立全局密碼過期策略,預設值為 0 表示不使用自動過期策略。它允許的值是正整數 N,表示密碼必須每隔 N 天進行修改。該值可在伺服器的配置文件設置,也可以使用 SQL 語句設置,使用 SQL 語句方式如下:

SET PERSIST default_password_lifetime=180

每個賬號既可沿用全局密碼過期策略,也可單獨設置策略

# 設置賬號密碼90天過期
CREATE USER '[email protected]' PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER '[email protected]' PASSWORD EXPIRE INTERVAL 90 DAY;
# 設置賬號密碼永不過期
CREATE USER '[email protected]' PASSWORD EXPIRE NEVER;
ALTER USER '[email protected]' PASSWORD EXPIRE NEVER;
# 沿用全局密碼過期策略
CREATE USER '[email protected]' PASSWORD EXPIRE DEFAULT;

2. 密碼重用策略

MySQL 限制使用已用過的密碼,重用限制策略基於密碼更改時間和使用時間,可以是全局的,也可以為每個賬號設置單獨的策略

MySQL 基於以下規則來限制密碼重用:

  1. 如果賬戶密碼限制基於密碼更改的數量,那麼新密碼不能從最近限制的密碼數量中選擇,例如,如果密碼更改的最小值為3,那麼新密碼不能與最近3個密碼中任何一個相同
  2. 如果賬戶密碼限制基於時間,那麼新密碼不能從規定時間內選擇,例如,如果重用周期為60天,那麼新密碼不能從最近60天內使用的密碼中選擇

可以在配置文件設置密碼重用策略,也可以使用 SQL 語句

# 密碼重用數量
SET PERSIST password_history=6;
# 密碼重用周期
SET PERSIST password_reuse_interval=365;

每個賬號既可沿用全局密碼重用策略,也可單獨設置策略

# 不能使用最近5個密碼
CREATE USER '[email protected]' PASSWORD PASSWORD HISTORY 5;
ALTER USER '[email protected]' PASSWORD PASSWORD HISTORY 5;
# 不能使用最近365天內的密碼
CREATE USER '[email protected]' PASSWORD REUSE INTERVAL 365 DAY;
ALTER USER '[email protected]' PASSWORD REUSE INTERVAL 365 DAY;

角色

在 MySQL 中,角色是許可權的集合,可以為角色添加或移除許可權。用戶可以被賦予角色,同時也被賦予角色包含的許可權

1. 創建角色並授權

創建角色語句如下:

CREATE ROLE 'role_name'[@'host_name'][,'role_name'[@'host_name']]...

為角色授權語句如下:

GRANT privileges ON table_name TO 'role_name'[@'host_name'];

privileges 代表許可權的名稱,多個許可權以逗號1隔開,可以使用 SHOW 語句查詢許可權名稱

SHOW PRIVILEGES\G;

2. 給用戶添加角色

GTANT role[,role2,...] TO user[,user2,...];

role 代表角色,user 代表用戶,添加之後如果角色處於未激活狀態,需要先將用戶對應的角色激活

SET ROLE DEFAULT

3. 編輯角色或許可權

撤銷用戶角色的 SQL 語句如下:

REVOKE role FROM user;

撤銷角色許可權的 SQL 語句如下:

REVOKE privileges ON tablename FROM 'rolename';

4. 刪除角色

DROP ROLE role[,role2]...

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ​ 我們現在還是在學習階段因此我們不用配置那麼多的jdk,配置一個jdk8就夠應付日常的學習了。前面的文章我儘量寫詳細一些照顧剛入坑的朋友。後文還有教大家怎麼使用企業版的idea。 一、開發環境的搭建 1)官網下載:官網鏈接 Java Downloads | Oracle ​ 不過官網要註冊ORAC ...
  • 相信大家對二維碼都不陌生,生活中到處充斥著掃碼登錄的場景,如登錄網頁版微信、支付寶等。最近學習了一下掃碼登錄的原理,感覺蠻有趣的,於是自己實現了一個簡易版掃碼登錄的 Demo,以此記錄一下學習過程。 ...
  • 一個工作了6年的Java程式員,在阿裡二面,被問到“volatile”關鍵字。 然後,就沒有然後了… 同樣,另外一個去美團面試的工作4年的小伙伴,也被“volatile關鍵字“。 然後,也沒有然後了… 這個問題說實話,是有點偏底層,但也的確是併發編程裡面比較重要的一個關鍵字。 下麵,我們來看看普通人 ...
  • 在幾年前windows10系統就註意到,藍牙耳機連接windows電腦後會出現兩個模式,一個是Hands-free AG Audio(即免提模式,以下簡稱Hands-free),一個是stereo(立體聲模式),並且發現只有Hands-free模式才能使用耳機的麥克風,但是音質會差好多,stereo ...
  • 簡介 container_of(ptr, type, member)是內核中的經典函數之一。該函數的作用是:根據結構體中一個成員的地址,找到結構體的地址。這個函數是內核實現面向對象的基礎設施,且最近在學習中經常見到這個函數,於是筆者在內核中查看了該函數的實現,故在此記錄。本文原本是為了展示conta ...
  • CentOS7 安裝MYSQL5.7 [詳細過程] YUM 安裝 1.從mysql官網獲取 yum 倉庫 [[email protected] tmp]# wget 'https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm' 2. ...
  • 導讀: 本次分享的內容為圖深度學習在自然語言處理領域的方法與應用,主要內容和素材都來自於我們Graph4NLP團隊的一篇調研文章:Graph Neural Networks for Natural Language Processing:A Survery,以及我們團隊所開發的Graph4NLP的p ...
  • MapReduce Hadoop中將數據切分成塊存在HDFS不同的DataNode中,如果想彙總,按照常規想法就是,移動數據到統計程式:先把數據讀取到一個程式中,再進行彙總。 但是HDFS存的數據量非常大時,對彙總程式所在的伺服器將產生巨大壓力,並且網路IO也十分消耗資源。 為瞭解決這種問題,Map ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文將以 C# 語言來實現一個簡單的布隆過濾器,為簡化說明,設計得很簡單,僅供學習使用。 感謝@時總百忙之中的指導。 布隆過濾器簡介 布隆過濾器(Bloom filter)是一種特殊的 Hash Table,能夠以較小的存儲空間較快地判斷出數據是否存在。常用於允許一定誤判率的數據過濾及防止緩存 ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 「簡單有價值的事情長期堅持做」 這是成功最簡單,但也最難學的秘訣。不經過訓練,人很難意識到時間複利的威力。 仙劍奇俠傳的「十里坡劍神」和金庸群俠傳的「十級野球拳」,就是簡單的事情持之以恆反覆做,最後就有巨大的威力 唐家三少成為網文收入第一,最重要的一步是十四年從未斷日更 這樣的案例很多,一開始可能成 ...
  • 迎面走來了你的面試官,身穿格子衫,挺著啤酒肚,髮際線嚴重後移的中年男子。 手拿泡著枸杞的保溫杯,胳膊夾著MacBook,MacBook上還貼著公司標語:“我愛加班”。 面試開始,直入正題。 面試官: 看你簡歷上面寫著精通MySQL,我先問你事務的特性是什麼? 老生常談,這個還有誰不會背的嗎? 我: ...
  • 基礎知識 python是一門腳本語言,它是解釋執行的。 python使用縮進做為語法,而且python2環境下同一個py文件中不能同時存在tab和空格縮進,否則會出錯,建議在IDE中顯示縮進符。 python在聲明變數時不寫數據類型,可以type(xx)來獲取欄位的類型,然後可以int(),list ...
  • 為什麼要多線程下載 俗話說要以終為始,那麼我們首先要明確多線程下載的目標是什麼,不外乎是為了更快的下載文件。那麼問題來了,多線程下載文件相比於單線程是不是更快? 對於這個問題可以看下圖。 橫坐標是線程數,縱坐標是使用對應線程數下載對應文件時花費的時間,藍橙綠代表下載文件的大小,每個線程下載對應文件2 ...
  • 詳細講解python爬蟲代碼,爬微博搜索結果的博文數據。 爬取欄位: 頁碼、微博id、微博bid、微博作者、發佈時間、微博內容、轉發數、評論數、點贊數。 爬蟲技術: 1、requests 發送請求 2、datetime 時間格式轉換 3、jsonpath 快速解析json數據 4、re 正則表達式提... ...
  • 背景: 一般我們可以用HashMap做本地緩存,但是HashMap功能比較弱,不支持Key過期,不支持數據範圍查找等。故在此實現了一個簡易的本地緩存,取名叫fastmap。 功能: 1.支持數據過期 2.支持等值查找 3.支持範圍查找 4.支持key排序 實現思路: 1.等值查找採用HashMap2 ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 本章是系列文章的第八章,用著色演算法進行寄存器的分配過程。 本文中的所有內容來自學習DCC888的學習筆記或者自己理解的整理,如需轉載請註明出處。周榮華@燧原科技 寄存器分配 寄存器分配是為程式處理的值找到存儲位置的問題 這些值可以存放到寄存器,也可以存放在記憶體中 寄存器更快,但數量有限 記憶體很多,但 ...