MySQL——安全性語言及多使用者事務管理
阿新 • • 發佈:2020-10-31
一、MySQL的使用者管理
1.使用者介紹
在MySQL中,會涉及到使用者的連線登入的內容,這些內容都存在在MySQL的mysql資料庫user表中,在這個表中,涉及到這個使用者的許可權問題,包括以下內容。
1.是否可讀資料庫
2.是否可以讀寫資料庫
3.有哪些資料庫的操作許可權
通常會在資料庫中,有一個超級許可權使用者預設為root
2.使用者操作
2.1增加使用者
SQL語法
CREATE USER 使用者 [IDENTIFIED BY ‘password’];
其中使用者=’使用者名稱’@’主機名’
例子
CREATE USER 'ALEX'@'LOCALHOST'
IDENTIFIED BY '123456';
2.2增加許可權
SQL語法
GRANT privi_type ON table_name TO 使用者;
# Privi_type: select ,delete, update ,insert, create, drop,usage all…..
# with grant option 表示允許該使用者將許可權授予其他使用者
# 注:若指定密碼,則原密碼將會被覆蓋,如果許可權授予一個不存在的使用者,則MySQL會自動建立這個使用者,但必須為該使用者指定密碼。
# 使用者='使用者名稱'@'主機名'
2.3刪除使用者
SQL語句
DROP USER 使用者;
其中使用者:使用者=’使用者名稱’@’主機名’
2.4回收許可權
使用REVOKE命令可以回收授予的許可權,語法格式如下:
REVOKE priv_type ON {表名|資料庫名} FROM 使用者;
或REVOKE ALL PRIVILEDGES, GRANT OPTION FROM 使用者;
注:只有擁有當前資料庫全域性CREATE或者UPDATE許可權的使用者才能使用REVOKE命令。
例如:
revoke update on dbst.student from ALEX@localhost;
revoke ALL ON DBST.* from ALEX@LOCALHOST
2.5修改使用者
UPDATE MYSQL.USER SET PASSWORD= PASSWORD(‘新密碼’) WHERE USER=‘使用者’;
例如:
UPDATE MYSQL.USER SET PASSWORD=PASSWORD(‘123’) WHERE USER=‘ALEX’ AND HOST=‘LOCALHOST’;
flush privileges; //重新整理許可權(必須步驟)
update mysql.user set authentication_string='123' where user=‘alex' and host='loacalhost';
2.6查詢使用者
# 從mysql中選取資料
select * from user
2.7檢視許可權
# 使用下面的指令檢視使用者許可權
show grants for ‘alex’@’localhost’;
二、MySQL的事務管理
1.事務概念
事務是由作為一個單獨單元的一個或多個SQL語句組成。事務具有以下的幾個特性(ACID)
ACID原則(事物具有的特性)
A:原子性(Atomicity):事務是一個或多個行為捆綁在一起組成一個單獨的工作單元,事務中的動作要麼都發生,要麼都不發生.
C:一致性(Consistent):即在事務開始之前和結束之後,資料庫的完整性約束沒有被破壞.
I:隔離性(Isolation):指的是在併發環境中,事務之間互相影響的程度(即併發事務間資料的可見程度).由併發事務所做的修改必須與任何其他併發事務所做的修改隔離.
D:永續性(Durability):一旦事務完成,事務的結果應該持久化,用來保證即使系統崩潰也不會破壞事務的結果.
2.併發控制
1.丟失修改:兩個不同的事務同時獲得了相同的資料,又都對這個資料進行了修改,那麼先提交的事務的更新就會被後提交事務的更新覆蓋掉。
2.髒讀(未提交讀) :一個事務正在訪問資料,而其他事務正在更新該資料,但尚未提交,此時會發生髒讀問題,即第一個事務所讀取的資料是“髒”的。
3.不可重複讀:在一個事務內多次讀同一資料,在該事務還沒有結束時,另外的事務也訪問該資料並對其做修改,從而導致第一個事務兩次讀取的資料不一樣
4.幻讀:有兩種情況
(1):事務T1按一定條件從資料庫中讀取了某些資料記錄後,事務T2刪除了其中部分記錄,當T1再次按照相同條件讀取資料時,發現某些記錄神祕的消失了.
(2):事務T1按一定條件從資料庫中讀取了某些資料記錄後,事務T2插入了一些記錄,當T1再次按照相同條件讀取資料時,發現多了一些記錄.
3.四種隔離級別
四級隔離級別:定義使用者之間隔離和互動的程度
1.讀未提交(read uncommitted):可以讀到其他事務還沒有提交的資料,但不允許丟失修改,會導致大量資料變化。一級封鎖協議
2.讀已提交(read committed):可以看到其他事務新增的新紀錄,而且其他事務對現存記錄做出的修改一旦被提交,也可以看到,避免丟失修改和髒讀。二級封鎖協議
3.可重複讀(repeatable read):當前在執行的事務的變化無法被看到,同一事務中執行select數次結果都相同,避免丟失修改、髒讀和不可重複讀。增強的二級封鎖協議
4.可序列化(serializable):提供嚴格的事務隔離。它要求事務序列化執行,事務只能一個接著一個地執行,不能併發執行,避免所有併發控制問題。三級封鎖協議
注:MySQL預設為repeatable read隔離級別
三、事務控制
1.控制語句
MYSQL事物控制語句
begin //開始一個事物
commit //提交一個事物
rollback //回滾一個事物
Set autocommit ={0|1} //為0是不自動提交, 為1是自動提交
2.事務安全
在pymysql中,如果不使用commit提交新增的事務,資料庫中會出現這個資料,但是在此使用就會出現bug,因此pymysql在一定的情況下,屬於執行緒不安全。