MySQL基礎篇(07):使用者和許可權管理,日誌體系簡介
本文原始碼:GitHub·點這裡 || GitEE·點這裡
一、MySQL使用者
1、基礎描述
在資料庫的使用過程中,使用者作為訪問資料庫的鑑權因素,起到非常重要的作用,安裝MySQL時會自動生成一個root使用者,作為資料庫管理員,擁有所有許可權。在多使用者的應用場景下,可能需要給不同的使用者分配不同的許可權,用來提升系統的穩定性,比如常見:報表庫只提供讀許可權,或者開放給第三方的庫,也只提供可讀使用者。
2、使用者管理
基本描述
MySQL將使用者資訊儲存在系統資料庫mysql的user表中。根據使用者名稱密碼和客戶端主機來定義帳戶。
使用者密碼:基本驗證操作 ;
客戶端IP:類似黑白名單的限制,支援萬用字元表示式 ;
SELECT t.`Host`,t.`User`,t.authentication_string
FROM mysql.`user` t ;
新增使用者
可以對user表進行增刪改查一系列操作,進而新增使用者,不同的使用者就會涉及到不同的操作許可權,這就是另外一個問題:使用者的許可權管理。
這裡新增一個user01使用者,作為許可權模組的測試使用者,許可權先給和root使用者一樣的許可權。
INSERT INTO `mysql`.`user`(`Host`, `User`, `authentication_string`) VALUES ('%', 'user01', '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9'); FLUSH PRIVILEGES ;
注意
:這裡host賦值%,就是代表所有IP可以通過user01使用者連線MySQL伺服器。修改系統表之後需要執行一次重新整理操作。
二、訪問鑑權
1、許可權控制
MySQL資料庫系統中,許可權分配涉及到如下幾張核心表:user、db、table_pric、columns_priv。在許可權認證時候遵守該順序逐步驗證。
- 許可權表描述
user表:儲存使用者和使用者全域性許可權,也是MySQL鑑權流程首當其衝的表 ;
db表:儲存資料庫許可權 ;
tables_priv表:儲存表許可權,面向一個特定表中的和其中所有列;
columns_priv表:儲存列許可權,面向一個特定表中的單一列;
注意
- user表結構
這裡處理包含使用者的連線資訊,還有很多許可權點認證。
CREATE TABLE `user` (
`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
`User` char(32) COLLATE utf8_bin NOT NULL DEFAULT '',
`Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Insert_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Update_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Delete_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Create_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
`Drop_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
... //此處省略很多
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges';
注意
:註釋說明,使用者和全域性許可權管理。
- 許可權點描述
對一般開發流程而言,知道如下幾個許可權點管理即可,道理同上,到需要使用的時候再去熟悉,不差時。
SELECT: 查詢表中的記錄 ;
INSERT: 向表中寫入新資料 ;
UPDATE: 更新表資料;
DELETE: 刪除表的記錄 ;
CREATE: 建立資料庫和表 ;
DROP: 刪除資料庫和表 ;
絮叨一句
:工作幾年之後,你最喜歡寫的程式邏輯是什麼?反正我就想寫寫簡單的增刪改查操作。
2、鑑權流程
首先驗證user表,其次db表,然後table表,再然後column表;
基於範圍逐級縮小,許可權不斷的細化。
- 測試user01使用者許可權
許可權查詢
首先檢視user01使用者的查詢許可權。此時該使用者是具有select許可權的。
SELECT t.`Host`,t.`User`,t.Select_priv
FROM mysql.`user` t WHERE t.`User`='user01' ;
基於客戶端工具,使用user01使用者登入MySQL伺服器,可以正常使用查詢許可權。
禁用查詢許可權點
UPDATE `mysql`.`user` SET `Select_priv` = 'N' WHERE `User` = 'user01';
FLUSH PRIVILEGES ;
許可權驗證
使用user01登入的客戶端,不能查詢表資料,說明許可權管理起到作用了。
三、日誌記錄系統
1、日誌配置檢視
基於該語句檢視日誌相關配置,例如日誌地址,是否開啟關閉,日誌快取大小,相關配置資訊。
SHOW GLOBAL VARIABLES LIKE '%log%';
正常停止MySQL伺服器,可以通過my.cnf更改相關配置。Linux下配置檔案一般在/etc/my.cnf中。
2、InnoDB事務日誌
InnoDB的事務日誌包括Redo-log和Undo-log兩種,這個日誌的描述在MySQL5.7官方文件的InnoDB儲存引擎-磁碟結構模組下面。
- Redo-log
重做日誌:基於磁碟的資料結構,記錄事務性操作崩潰期間沒有正常寫入庫的資料,重做:處理日誌中沒有正常寫入的資料記錄,完成資料入庫。
- Undo-log
回滾日誌:提供回滾操作和多個行版本控制MVCC,事務提交時,會記錄Undo-log,當事務失敗或執行回滾,就需要通過Undo-log進行回滾。思維跳躍一層:當寫入資料時,日誌記錄應該是新增標記,要執行的記錄是刪除這條資料操作,刪除資料,過程應該相反,要記錄的是刪除的這條資料的寫入操作。
2、錯誤日誌
在MySQL的配置檔案中,log_error是強制開啟的,且沒有關閉開關,用來記錄mysql伺服器每次啟動和關閉時的詳細資訊,以及執行過程中出現的的嚴重警告資訊和錯誤資訊等,Linux下配置如下:
log-error=/var/log/mysqld.log
錯誤日誌包含mysqld啟動和關閉時間的記錄。它還包含診斷訊息,例如錯誤,警告和註釋,它們在伺服器啟動和關閉期間以及伺服器執行期間發生。例如,如果mysqld注意到需要自動檢查或修復表,它將向錯誤日誌中寫入一條訊息。
3、通用查詢日誌
General-Query-Log,所有連線和語句被記錄到日誌檔案。當想知道客戶端發生了錯誤並想確切地知道該客戶端傳送給mysqld的語句時,該日誌可能非常有用。mysqld按照它接收的順序記錄語句到查詢日誌。可能與執行的順序不同。這與更新日誌和二進位制日誌不同,它們在查詢執行後,但是任何一個鎖釋放之前記錄日誌。MySQL5.6版本下是預設關閉的。
4、二進位制日誌
Binary-Log,主要用來記錄資料庫更改,例如表建立操作或表資料更改的事件,對於主從複製流程,主庫伺服器上的二進位制日誌傳送到從庫伺服器,從伺服器執行這些事件,保證主從伺服器的資料同步。
log_bin OFF
MySQL5.6版本下,該日誌預設是關閉的。
5、慢查詢日誌
Slow-Query-Log慢查詢日誌主要記錄mysql中執行的時間比較長的sql,預設的閾值是10秒,執行時間超過10秒的sql語句就會被慢查詢日誌所記錄,慢查詢日誌的配置可以在mysql的配置檔案中配置,預設不開啟。
SHOW GLOBAL VARIABLES LIKE '%long_query_time%';
開啟慢查詢日誌,通過對該時間的調整,可以記錄效能差的SQL語句,進行分析優化,對系統性能的提升十分有幫助。
四、原始碼地址
GitHub·地址
https://github.com/cicadasmile/mysql-data-base
GitEE·地址
https://gitee.com/cicadasmile/mysql-data-base
相關推薦
MySQL基礎篇(07):使用者和許可權管理,日誌體系簡介
本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、MySQL使用者 1、基礎描述 在資料庫的使用過程中,使用者作為訪問資料庫的鑑權因素,起到非常重要的作用,安裝MySQL時會自動生成一個root使用者,作為資料庫管理員,擁有所有許可權。在多使用者的應用場景下,可能需要給不同的使用者分配不同的許可
MySQL基礎篇(03):系統和自定義函式總結,觸發器使用詳解
本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、系統封裝函式 MySQL 有很多內建的函式,可以快速解決開發中的一些業務需求,大概包括流程控制函式,數值型函式、字串型函式、日期時間函式、聚合函式等。以下列出了這些分類中常用的函式。 1、控制流程函式 case...when 根據值判斷返
MySQL基礎篇(04):儲存過程和檢視,用法和特性詳解
本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、儲存過程 1、概念簡介 儲存程式是被儲存在伺服器中的組合SQL語句,經編譯建立並儲存在資料庫中,使用者可通過儲存過程的名字呼叫執行。儲存過程核心思想就是資料庫SQL語言層面的封裝與重用性。使用儲存過程可以較少應用系統的業務複雜性,但是會增加資
MySQL基礎篇(05):邏輯架構圖解和InnoDB儲存引擎詳解
> 本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/mysql-data-base) || [GitEE·點這裡](https://github.com/cicadasmile/mysql-data-base) # 一、MySQL邏輯架構 ##
MongoDB基礎篇1:安裝和服務配置
AD gap window server load 執行 顯示 mmu 配置環境 一、下載 請前往官網下載community版本MongoDB,我當前可見最新版本是3.6.4 https://www.mongodb.com/download-center#community
MySQL基礎篇(02):從五個維度出發,審視表結構設計
本文原始碼:GitHub·點這裡 || GitEE·點這裡 一、資料場景 1、表結構簡介 任何工具類的東西都是為了解決某個場景下的問題,比如Redis快取系統熱點資料,ClickHouse解決海量資料的實時分析,MySQL關係型資料庫儲存結構化資料。資料的儲存則需要設計對應的表結構,清楚的表結構,有助於快
Java基礎篇(02):特殊的String類,和相關擴充套件API
> 本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/java-base-parent) || [GitEE·點這裡](https://gitee.com/cicadasmile/java-base-parent) # 一、String類簡介 ##
MySQL基礎篇(06):事務管理,鎖機制案例詳解
本文原始碼:[GitHub·點這裡](https://github.com/cicadasmile/mysql-data-base) || [GitEE·點這裡](https://github.com/cicadasmile/mysql-data-base) # 一、鎖概念簡介 ## 1、基礎描述 鎖
Qt入門之基礎篇 ( 二 ) :Qt項目建立、編譯、運行和發布過程解析
qt 5 對話 讓我 進度 qmake ctr deploy 設定 設置 轉載請註明出處:CN_Simo。 題解: 本篇內容主講Qt應用從創建到發布的整個過程,旨在幫助讀者能夠快速走進Qt的世界。 本來計劃是講解Qt源碼靜態編譯,如此的話讀者可能並不能清楚地知
Docker基礎篇11:Compose部署tomcat及mysql
1、compose不是tomcat容器 1、獲取映象 [[email protected] /]# docker pull tomcat 2、建立目錄 [[email protected] /]# mkdir /opt/docker/tomcat -p [[ema
mysql 基礎篇(二) 賬號、許可權管理
mysql 基礎篇(二) 賬號、許可權管理、備份與還原 建立賬號密碼:Grant all on test.* to “cj”@”localhost” identified by “cj”; 建立賬號 如果報錯: 需要執行flush privileges 後,在重新執行新增使用者就可
SpringMVC4+thymeleaf3的一個簡單例項(篇五:頁面和MySql的資料互動-展示以及儲存)
這一篇將介紹怎樣把頁面資料儲存的MySql資料庫,並將資料庫內容展示到頁面上。 首先做一個基礎工作,新增以下jar到lib: 2: spring-jdbc-4.3.3.RELEASE.jar 3: spring-tx-4.3.3.RELEASE.jar 2和3從sprin
mysql(基礎篇) --mysql的服務開啟和登入
這裡我們講一下MySQL資料庫的儲存機構 首先我們講一下最簡單的開啟方式 此電腦(右擊)---管理--- 服務和應用程式--- 服務-- 然後找到 MySql服務 找到MySQL服務後 我們可以 右擊-- 屬性 設定它的啟動方式 接下來我們通過 命令列
程式設計必備基礎知識|計算機組成原理篇(07):計算機的匯流排
計算機基礎方面的知識,對於一些非科班出身的同學來講,一直是他們心中的痛,而對於科班出身的同學,很多同學在工作之後,也意識到自身所學知識的不足與欠缺,想回頭補補基礎知識。關於計算機基礎的課程很多,內容繁雜,但無論是相關書籍還是大學課程,都有點脫離工作。特別地,計算機基礎知識體系龐雜,想要從零學習或者複習都耗時耗
Qt入門之基礎篇 ( 一 ) :Qt4及Qt5的下載與安裝
mingw ins 第3版 點擊 調試 但我 關系 構建 eas 轉載請註明出處:CN_Simo. 導語: Qt是一個跨平臺的C++圖形界面應用程序框架。它提供給開發者建立圖形用戶界面所需的功能,廣泛用於開發GUI程序,也可用於開發非GUI程序。Qt很容易擴展,並
MYSQL學習筆記三:日期和時間函數
div content minute name top fonts table hmm 指定 MYSQL學習筆記三:日期和時間函數 1. 獲取當前日期的函數和獲取當前時間的函數 /*獲取當前日期的函數和獲取當前時間的函數。將日期以‘YYYY-MM-DD‘或者’YYYYM
MySQL基礎篇
基礎 log sql基礎 image mage ges alt com images MySQL基礎篇
c# 擴展方法奇思妙用基礎篇五:Dictionary<TKey, TValue> 擴展
ews public turn false div role 自我 cnblogs static Dictionary<TKey, TValue> 類是常用的一個基礎類,但用起來有時確不是很方便。本文逐一討論,並使用擴展方法解決。 向字典中添加鍵和值 添加鍵和值
node基礎篇一:node介紹、node http、node event 課堂(持續)
gpo 指定 輸出 begin func 就是 gif req let 最近工作一直很忙,沒時間更新,諒解,這次準備更新一次node教程,本課堂將持續更新,每周堅持更新一到兩章,希望對大家有一些小幫助吧: 一、首先什麽是node? 1/Node.js 是一個基於 Chrom
python基礎篇07-字符串
切片 運算符 表示 join == 子字符串 spa title 方式 字符串是以單引號‘或雙引號"括起來的任意文本,比如‘abc‘,"123"等等。 請註意,‘‘或""本身只是一種表示方式,不是字符串的一部分,因此,字符串‘abc‘只有a,b,c這3個字符。如果‘本身也是