4.1數據庫系統安全相關因素mysql
1,外圍網絡sql
2,主機:數據庫
3,數據庫自己安全
訪問受權相關模塊主要是由兩部分組成:網絡
一個是基本的用戶管理模塊:主要負責用戶登陸連接相關的基本權限控制spa
另一個是訪問受權控制模塊:隨時隨地檢查已經進門的訪問者,校驗他們是否 有訪問所發出請求須要訪問的數據的權限。經過校驗者可順利拿到數據,而未經過校驗的訪問者,只能收到「訪問越權了」的相關反饋。.net
三道防線圖:orm
4,代碼:sql注入--危害很大,防不勝防對象
4.2權限系統簡介內存
4.2.1,相關權限信息主要存儲在幾個被稱爲grant tables的系統表中。mysql.user,mysql.db,mysql.Host,mysql.table_priv,mysql.column_priv因爲權限表數據量比較小,並且訪問很是頻繁,因此mysql在啓動的時候就會將全部的權限信息Load到內存中,因此當咱們手動修改權限後要執行FLUSH PRIVILEGES命令來從新加載mysql的權限信息。若是用GRANT,REVOKE,DROP USER不須要執行FLUSH PRIVILEGES,這個幾個命令在修改表的時候,內存也進行了修改。CREATE USER來添加用戶,注意新添加的用戶僅有初始user權限,經過CREATE USER 命令也會更新內存。推薦使用GRANT,REVOKE,DROP USER,CREATE USER進行權限控制。
5.6以上不包含5.6 5.6以上包含5.6
4.2.2,權限授予與去除:
GRANT 受權
REVOKE 撤回權限
更新 GRANT TABLES系列表的。
給用戶受權的時候,不只須要指定用戶名,還須要指定來訪主機。若是僅僅指定用戶名,則mysql則會認爲是:'username'@'%'受權,要去除用戶權限,一樣也要指定來訪主機。
查看某個用戶權限:"SHOW GRANTS FOR 'username'@'hostname'; 查詢 grant tables 系列表裏的權限信息
4.2.3,權限級別:MySQL 中的權限分爲五個級別
1,Global Level:全局控制權限,全部權限信息都保存在mysql.user表中。
做用域:全部權限是針對整個mysqld的,對於數據庫下的全部表及全部字段都有效。
2,Global Level主要有以下權限:
3,要授予Global Level的權限,則只須要在執行GRANT命令的時候,用*.*來指定適用範圍是Global便可,當有多個權限須要授予的時候,也並不須要屢次受權,只須要將全部須要的權限經過逗號(,)隔開便可:例如:
GRANT SELECT,UPDATE,DELETE,INSERT ON *.* TO 'username'@'localhost';
4,Database Level
在Global Level之下,其餘三個level之上
做用域:指定數據庫下的全部對象
權限設置:與Global Level比,少了一下幾個權限:CREATE USER,FILE,PROCESS,RELOAD,REPLICATION CLIENT,REPLICATION SLAVE,SHOW DATABASES,SHUTDOWN,SUPER,USEAGE,沒有增長任何權限
實現方式:兩種:
1,GRANT ALTER ON test.* to 'username'@'localhost';
2,USE DATABASENAME
GRANT DROP ON * TO 'username'@'locahost';
3,在受權的時候,若是授予多個用戶相同的權限,則能夠受權多個用戶
GRANT CREATE ON test.* TO 'username1'@'localhost,'username2'@'localhost'
show grants form username@localhost
5,Table Level
做用域:低於Global Level,Database Level,高於Column Level,Routine Level
實現:GRANT INDEX ON test.t1 TO 'USERNAME'@'LOCALHSOT';
權限設置:ALTER,CREATE,DELETE,DROP,INDEX,INSERT,SELECT,UPDATE
6,Column Level:
做用域:低於Global,Database,Table level ,高於Routine Level
實現:GRANT select(id,value) on test.t2 to 'ab'@'localhsot';
注意:當某個用戶在向某個表插入(INSERT)數據的時候,若是該用戶在某個列上沒有INSERT權限,則該列的數據將插入默認值填充
7,Routeine Level:
做用域:低於其餘4中級別
權限設置:EXECUTE,ALTER ROUTINE兩種
實現:GRANT EXECUTE ON test.p1 to 'username'@'localhost';
8,grant 權限:
擁有grant權限的用戶,能夠將自身所擁有的權限受權給其餘用戶,一般加上:WITH GRANT OPTION字句達到受權的目的。
9,咱們能夠經過GRANT ALL 語句授予某個Level的全部可用權限給某個用戶:
grant all on test.t4 to 'abc';
注意:上面的五個權限中:Table,Column,Routine三者在受權的時候有所依賴的對象必須是存在的,而不像DATABASE level,能夠在當前數據庫不存在的時候完成受權
4.2.4訪問控制實現原理:
1,組成:
用戶管理模塊:是否存在某個用戶
主要就是:user表中的host,username,password這三項
訪問控制模塊:監控來訪者每一個動做
全部受權用戶都存放在mysql.user表中
說明:用戶管理模塊決定造訪者可否進門,訪問控制模塊則決定每一個客人能那什麼不能拿什麼
2,客戶管理模塊流程:
3,權限控制模塊流程:詳細解釋:page45
select * from test.t4 where status='ss';
4.3mysql 訪問受權策略:
1,瞭解來訪主機:'username'@'%'授予全部主機權限
2,瞭解用戶:只讀,只寫,備份,管理,訪問特定數據庫,表
3,位工做分類
4,確保絕對必要這擁有grant option權限