1. 程式人生 > >MySQL基礎篇(07):使用者和許可權管理,日誌體系簡介

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基礎11Compose部署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個字符。如果‘本身也是