標籤:
4.1資料庫系統安全相關因素
1,周邊網路
2,主機:
3,資料庫本身
訪問授權相關模組主要是由兩部分組成:
一個是基本的使用者管理模組:主要負責使用者登入連結相關的基本許可權控制
另外一個是訪問授權控制模組:隨時隨地檢查已經進門的訪問者,校正他們是否 有訪問所發出請求需要訪問的資料的許可權。通過校正者可順利拿到資料,而未通過校正的訪問者,只能收到“訪問越權了”的相關反饋。
三道防線圖:
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許可權
《mysql效能調優與架構設計》筆記:三mysql 安全管理