數據庫管理系統用于管理數據庫服務器的各種數據庫資源,MYSQL是一個支持多用戶的數據庫管理系統,實現多用戶下,各種數據庫資源的安全訪問控制,確保數據庫資源安全訪問成為了數據庫管理系統的核心功能。MYSQL安全管理是指允許合法賬戶訪問合法數據庫資源,并拒絕非法用戶訪問非法數據庫資源。可以看出,MYSQL安全管理與MYSQL賬戶管理密不可分。
1.安全管理
假設用戶擁有某些權限(update,delete等),MYSQL賬戶可以分為
MYSQL服務實例級別:可以修改MYSQL服務器上所有數據庫所有表的記錄
MYSQL數據庫級別:可以修改某個數據庫所有表的記錄
MYSQL表級別:可以修改某個表的記錄
另外還有MYSQL字段級別,以及MYSQL存儲程序級別的賬戶。
2.MYSQL身份驗證
mysql系統數據庫記錄了MYSQL的賬戶信息以及MYSQL賬戶的訪問權限,進而實現了MYSQL賬戶的身份認證以及權限驗證。
有關MYSQL賬戶的身份認證信息記錄在mysql系統數據庫中的user系統表中。
有關MYSQL服務實例級別賬戶的權限驗證信息記錄在db系統表中。
有關MYSQL表級別賬戶的權限驗證信息記錄在tables_priv系統表中。
有關MYSQL字段級別賬戶的權限驗證信息記錄在columns_priv系統表中。
有關MYSQL存儲程序級別賬戶的權限驗證信息記錄在procs_priv系統表中。
3.MYSQL身份認證流程:
(1)在某臺主機A上以root身份連接MYSQL服務器,這個過程是root賬戶的身份認證。
(2)root賬戶具有至高無上的權限,包括grant權限。root賬戶在命令提示符窗口A執行grant命令,創建MYSQL賬戶B,并為該賬戶綁定相應的資源訪問權限。
(3)在某臺合法登錄主機B上打開命令提示符窗口B,以MYSQL賬戶B的身份鏈接MYSQL服務器。這個過程稱為MYSQL賬戶B的身份認證。
(4)MYSQL賬戶B在命令提示符窗口B上執行MYSQL命令或者SQL語句,這些MYSQL命令或者SQL語句在執行前必須經過權限驗證,判斷MYSQL賬戶B是否具有權力執行該MYSQL命令或者語句。權限驗證一旦通過,該賬戶則可以訪問相應的數據庫資源,否則MYSQL服務實例拒絕MYSQL賬戶B的資源訪問。
4.MYSQL賬戶與權限表
MYSQL身份認證時,需要提供賬戶名,密碼以及登陸主機IP地址信息。
MYSQL安全管理通過權限表實現MYSQL賬戶的身份認證以及權限驗證,這些權限表存儲引擎全部是MYISAM,主鍵全部為復合主鍵,字符集全部是UTF8,字符序全部是utf8_bin。
權限表主要包含兩類字段:作用域字段和權限類型字段。作用域字段構成了各個權限表的主鍵,記錄了該賬戶可以訪問的數據庫資源。權限類型字段定義了MYSQL賬戶對指定的數據庫資源可以進行何種類型的訪問。
(1)grant命令
格式:
grant 權限名稱[(字段列表)]
[權限名稱[(字段列表)]]…
on [(數據庫資源類型)] 數據庫資源
to MYSQL賬戶1 [, MYSQL賬戶2] …
[with grant option]
說明:數據庫資源可以是*.*,db_name.*,db_name.table_name以及db_name.routine_name,分別表時MYSQL服務實例,MYSQL數據庫,MYSQL數據庫表以及MYSQL數據庫的存儲過程或者函數。
MYSQL賬戶包括賬戶名,密碼以及登錄主機等信息,而with grant option是賦予grant權限
(2)創建MYSQL服務實例級別的賬戶
grant all privileges on *.* to ‘server_user’@‘%’ identified by ‘password’;
創建賬戶名為“server_user”,密碼為password,‘%’表示任何主機都可以連接,并且*.*表示所有數據庫的所有數據庫對象,all privileges表示該賬戶擁有所有權限(grant權限除外)。
(3)創建MYSQL數據庫級別的賬戶
grant all privileges on choose.* to ‘database_user’@‘192.168.1.%’ identified by ‘password’ with grant option;
(4)創建表級別的賬戶
grant all privileges on table choose.choose to ‘table_user’@‘%’ identified by ‘password’ with grant option;
(5)創建字段級別的賬戶(假設表choose上的score字段)
grant select(score), insert(score) on table choose.choose to ‘column_user’@‘%’ identified by ‘password’;
(6)創建存儲程序級別的賬戶
賬戶僅僅擁有choose數據庫存儲過程get_student_course_proc()與函數to_chinese_fn()的執行權限。
grant execute on procedure choose.get_student_course_proc to ‘%’@‘192.168.1.103’ identified by ‘password’;
5.賬戶管理
(1)創建賬戶
create user ‘user1’@‘localhost’ identified by ‘password’;
(2)查看賬戶信息
show grants for ‘user’@‘%’;
(3)刪除賬戶
drop user ‘table_user’@‘%’;
(4)修改已有賬戶的信息
使用grant命令操作已有的賬戶,可以向已有的賬戶增加權限,修改已有帳戶的密碼。
使用revoke命令可以撤銷已有賬戶的已有權限:
例如:revoke select on choose.* from ‘admin_user’@‘%’;
(5)已有賬戶的重命名
rename user old_user to new_user
(6)修改賬戶密碼
set password [for user] = password(‘新密碼’);
(7)使用更新語句后,還需要執行“flush privileges”或者重啟mysql才能生效。