程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> Mysql安全管理

Mysql安全管理

編輯:關於MYSQL數據庫

一、  MySQL訪問控制
MySQL的訪問分兩個階段:
1.  檢查用戶是否具有建立與MySQL的連接的權利,主要依靠檢查:用戶名、主機名和密碼;
2.  建立了連接後,服務器檢查客戶端發出的每個請求。看是否有足夠的權限實施它。例如執行select命令等。 1.  MySQL訪問權限管理通過6個表:user、db、host、tables_priv、columns_priv和procs_priv來控制,6個表的作用如下表:表名 含義
user 控制“用戶名”(user)可以從哪一台“主機名”(host)訪問MySQL Db 規定哪個用戶可以訪問哪個數據庫
Host host表與db表結合使用在一個較好層次上控制特定主機對數據庫的訪問權限
Tables_priv 規定誰可以訪問數據庫的哪一個表
columns_priv 規定誰可以訪問表的哪一個列
procs_priv 規定誰可以執行哪個存儲過程 2.  MySQL識別的權限如下表:
MySQL權限 對應權限列 含義 Select  Select_priv 是否可以讀取表的數據
Insert Insert_priv 是否可以向表中插入新的記錄
delete Delete_priv 是否可以刪除表中現有記錄
Update Update_priv 是否可以更新表中現有記錄
Lock tables Lock_tables_priv 是否可以鎖定表 Create Create_priv 是否可以創建一個新的數據庫和數據表
Create temporary table Create_tmp_table_priv 是否可以創建臨時表
Alter Alter_priv 是否可以重命名並改變它的結構
Index Index_priv 是否可以添加或刪除表索引
References References_priv 暫不用
Drop Drop_priv 是否可以刪除現有的數據庫或表
Create view Create_vIEw_priv 是否可以創建視圖
Show view Show_vIEw_priv 是否是可以檢查視圖定義 Alter routine Alter_routine_priv 是否改變現有的存儲過程
Create routine Create_routine_priv 是否可以定義新的存儲過程
Execute Execute_priv 是否可以執行存儲過程 File File_priv 是否可以讀取和改變本地文件系統的文件
Create user Create_user_priv 是否可以創建新用戶
用於MySQL管理
Grant option Grant_priv 是否可以賦予其他用戶個人的權限
Show databases Show_db_priv 是否可以看到一份全體數據庫的清單
Process Process_priv 是否可以看淡到其他用戶的MySQL進程
Super Super_priv 是否可以終止其他用戶的MySQL進程(kill)
Reload Reload_priv 是否可以執行各種命令
Replication client Repl_clIEnt_priv 是否可以決定鏡像系統中參與者的信息
Replication slave Repl_slIEnt_priv 是否可以通過鏡像機制讀取msyql服務器數據
Shoutdown Shutdown_priv 是否可以關閉MySQL 3.  6個數據權限表的結構
user表 db表 host表 tables_priv表 columns_pirv表 proc_priv表 Host  Host  Host  Host  Host  Host
User  Db  Db  Db  Db  Db
PassWord  User    User  User  User Select_priv  Select_priv  Select_priv  Table_name  Table_name  Routine_name
Insert_priv  Insert_priv  Insert_priv  Grantor  Column_name  Routine_type
Update_priv  Update_priv  Update_priv  Timestamp  Timestamp  Grantor
Delete_priv  Delete_priv  Delete_priv  Table_priv  Column_priv  Proc_priv
Create_priv  Create_priv  Create_priv  Column_priv    Timestamp
Drop_priv  Drop_priv  Drop_priv       
Reload_priv  Grant_priv  Grant_priv       
Shutdown_priv  References_priv  References_priv       
Process_priv  Index_priv  Index_priv       
File_priv  Alter_priv  Alter_priv       
Grant_priv  Create_tmp_table_priv  Create_tmp_table_priv       
References_priv  Lock_tables_priv  Lock_tables_priv       
Index_priv  Create_view_priv  Create_vIEw_priv       
Alter_priv  Show_view_priv  Show_vIEw_priv       
Show_db_priv  Create_routine_priv  Create_routine_priv       
Super_priv  Alter_routine_priv  Alter_routine_priv       
Create_tmp_table_priv  Execute_priv  Execute_priv      
Lock_tables_priv           
Execute_priv           
Repl_slave_priv           
Repl_clIEnt_priv           
Create_vIEw_priv           
Show_vIEw_priv           
Create_routine_priv           
Alter_routine_priv           
Create_user_priv            ssl_type           
ssl_cipher           
x509_issuer           
x509_subject            max_questions :規定每個小時之內可以允許執行多少次數據查詢
max_updates :規定每個小時之內可以允許執行多少次數據修改
max_connections :規定每個小時單個用戶可以連接到少此
max_user_connections :規定單個用戶同時連接多少數說明:1).user表中的字段列代表的全局的權限,即一個用戶如果在user表中設置允許某個操作,則該用戶對所有數據庫都可以操作,例如如果給一個用戶授予select,則該用戶對所有數據庫都讀的權限;
    2).當user表的全局權限與其他表對象權限都有設置時,有下列關系:
Y(select為例) N(select為例)
Y Y Y
N Y N
 3.數據訪問列的內容
  3.1、 Host 字段
一個Host列值可以是一個主機名或一個IP地址。可以用通配符指定Host值。可以使用SQL的模式字符“%”和“_”並具有當你在一個查詢中使用LIKE算符同樣的含義(不允許regex算符)。(例如:192.168.3.%匹配任何在192.168.3 C類子網的主機。)
3.2、User 字段
用戶名必須是文字的或空白。一個空白值匹配任何用戶。%作為一個User值不意味著空白,而是匹配一個字面上的%名字,當一個到來的連接通過user表被驗證而匹配的記錄包含一個空白的User值,客戶被認為是一個匿名用戶。
3.3、PassWord字段 3.4、Db字段
在columns_priv和tables_priv表中,Db值必須是真正的數據庫名(照字面上),不允許模式和空白。在db和host中,Db值可以以字面意義指定或使用SQL模式字符'%'或'_'指定一個通配符。一個'%'或空白匹配任何數據庫。
3.5、Table_name,Column_name字段   3.6、MySQL匹配連接關系如下

三、權限分配管理:
1. 權限可分為以下層級:
  全局層級:全局權限適用於一個給定服務器中的所有數據庫。這些權限存儲在MySQL.user表中。GRANT ALL ON *.*和REVOKE ALL ON *.*只授予和撤銷全局權限。
數據庫層級 :數據庫權限適用於一個給定數據庫中的所有目標。這些權限存儲在mysql.db和MySQL.host表中。GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*只授予和撤銷數據庫權限。
表層級:表權限適用於一個給定表中的所有列。這些權限存儲在MySQL.talbes_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤銷表權限。
列層級:列權限適用於一個給定表中的單一列。這些權限存儲在MySQL.columns_priv表中。當使用REVOKE時,您必須指定與被授權列相同的列。
子程序層級:CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT權限適用於已存儲的子程序。這些權限可以被授予為全局層級和數據庫層級。而且,除了CREATE ROUTINE外,這些權限可以被授予為子程序層級,並存儲在MySQL.procs_priv表中。
2. 授權管理:根據操作人員的所在職責要求具體操作如下:
2.1:數據庫管理員:   操作:grant all privileges on *.*
    by 'passWord' with grant option
2.2:數據庫操作者:   2.2.1授予某個用戶某個表的操作權限:
   操作:grant select,update on dbname.tbl_name to
     IDENTIFIED by 'passWord'
  2.2.2授予某個用戶表的某個字段操作權限:
   操作:grant update(column_name) on dbname.tbl_name to
     IDENTIFIED by 'passWord'
2.3:數據訪問者:   操作:grant select on dbname.tbl_name
    IDENTIFIED by 'passWord'
2.4:執行存儲過程的權限:   操作:grant Execute on dbname.*
    IDENTIFIED by 'passWord'
  說明:1.創建某個數據庫的某個存儲過程的執行權限操作為:
   insert into `procs_priv` (`Host`, `Db`, `User`, `Routine_name`,
   `Routine_type`, `Grantor`, `Proc_priv`, `Timestamp`)
   values('host','dbname','username','proc_name','PROCEDURE',‘存
     儲過程創建者的訪問帳號','Execute,Alter Routine','2007-08-14
    17:33:39');
    2.mysql的中,root用戶可以執行、修改任何用戶創建的存儲過程;     的存儲過程,則必須要授予MySQL.proc表的選擇權限。(如果某用戶     程的執行權限)
2.5:限制某個帳戶的資源使用:   操作:GRANT ALL ON dbname.*
    IDENTIFIED BY 'frank' WITH MAX_QUERIES_PER_HOUR 20
    MAX_UPDATES_PER_HOUR 10  MAX_CONNECTIONS_PER_HOUR 5
    MAX_USER_CONNECTIONS 2;
  說明:WITH MAX_QUERIES_PER_HOUR 20:平均每小時可以執行20次查詢;
    MAX_UPDATES_PER_HOUR 10:平均每個小時可以執行20次更新;
    MAX_CONNECTIONS_PER_HOUR 5:每小時最大連接用戶數;
    MAX_USER_CONNECTIONS 2:單個用戶每小時可連接兩次;   權和資源控制權限一旦授權後存在風險,建議應該只有管理員擁有這些權限
3. MySQL連接匹配關系如下表:
編號 Host值 User值 匹配連接
1 Localhost Root Root用戶,從本地可以連接
2 192.168.1.% Root Root用戶,從192.168.1的子網可以連接
3 192.168.1.2 Root Root用戶,從192.168.1.2的主機可以連接
4 192.168.1.2 空值 任何用戶,從192.168.1.2的主機都可以連接
5 % Root Root用戶,從任何主機都可以連接
6 % 空值 任何用戶,任何主機都可以連接
7 空值 空值 任何用戶,任何主機都可以連接
8 Localhost 空值 任何用戶,從localhost都可以連接
說明: 在連接中如果沒有指定連接參數,MySQL客戶端程序使用默認值:
1. 默認主機名上localhost,默認用戶名在Windows中是odbc,在Linux中是
  Linux的登陸名;
2. 如果在MySQL.user表中同時存在編號7、8兩個訪問連接,那麼在當客戶
  端的連接參數都為空時,MySQL默認匹配編號為8的連接,如果只存在7,
  那麼匹配編號7的連接;
4. 帳戶管理
4.1.給root帳戶和沒有設置密碼的帳戶設置一個強密碼:
 操作:SET PASSWORD FOR 'root'= PASSWord('biscuit');
 或者:GRANT USAGE ON *.* TO ‘usernmae’ IDENTIFIED BY 'biscuit'
4.2.刪除匿名用戶:
 操作:delete from user where user=’’
4.3.刪除host中為%的訪問者:
 操作:delete from user where host=’%’

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved