自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

PHP安全:MySQL的使用安全

數據庫 MySQL
在與PHP結合應用方面,MySQL是最好的關系型數據庫管理系統(tǒng)之一。MySQL使用不當,常常會引起致命的安全問題。

[[350837]]

 MySQL 基礎知識

MySQL是一個流行的關系型數據庫管理系統(tǒng)(Relational Database Management System,RDMS),在與PHP結合應用方面,MySQL是最好的關系型數據庫管理系統(tǒng)之一。MySQL使用不當,常常會引起致命的安全問題。

1、運行安全

為了防止攻擊者通過MySQL漏洞越權獲取更高的權限,不要使用系統(tǒng)root用戶運行MySQL服務器。mysqld默認拒絕使用root運行,如果對mysqld服務需要指定用戶進行運行,應該使用普通非特權用戶運行mysqld,同時為數據庫建立獨立的Linux中的MySQL賬戶,該賬戶只用于管理和運行MySQL。

在MySQL配置/etc/my.cnf文件中指定執(zhí)行賬戶。 

  1. vim /etc/my.cnf  
  2. [mysqld]  
  3. user=mysql 

這個配置使服務器用指定的用戶來啟動,無論是手動啟動還是通過mysqld_safe或mysql.server啟動,都能確保使用MySQL的身份。也可以在啟動參數上進行配置,加上user參數。 

  1. /usr/local/mysql/bin/mysqld_safe --user=mysql & 

默認的MySQL安裝在/usr/local/mysql,對應的默認數據庫文件在/usr/local/mysql/var目錄下,必須保證該目錄不能讓未經授權的用戶訪問后把數據庫打包復制走,所以要限制對該目錄的訪問。mysqld運行時,只使用對數據庫目錄具有讀或寫權限的Linux用戶來運行。

MySQL主目錄只允許root用戶進行訪問。 

  1. chown -R root /usr/local/mysql/ 

數據庫目錄只允許MySQL用戶進行訪問。 

  1. chown -R mysql.mysql /usr/local/mysql/var 

2、密碼安全

默認安裝的MySQL的root用戶密碼是空密碼,為了安全起見,必須修改為強密碼,即至少8位,由字母、數字和符號組成的不規(guī)律密碼。使用MySQL自帶的mysqladmin命令修改root密碼。

  1. mysqladmin -u root password "new-password" //使用mysqladmin修改密碼 

同時可以使用下面的命令登錄數據庫對密碼進行修改。 

  1. mysql>use mysql  
  2. mysql>update user set pas sword=pas sword('new-password') where  
  3. user='root' 
  4. mysql>flush privileges; // 強制刷新內存授權表,否則使用的還是在內存緩沖的口令 

3、賬號安全

系統(tǒng)MySQL的默認管理員名稱是root,而一般情況下,數據庫管理員都沒有進行修改,這在一定程度上為系統(tǒng)用戶密碼暴力破解的惡意攻擊行為提供了便利,應該修改為復雜的用戶名,加強賬號的安全,同時不要使用admin或者administrator,因為它們也在易猜解的用戶字典中。 

  1. mysql>update user set user="new-root-name" where  
  2. user="root" 
  3. mysql>flush privileges; // 強制刷新內存授權表,否則使用的還是在內存緩沖的口令 

需要正確地給用戶分配權限,不要將全部權限分配給普通用戶,有選擇性地分配讀寫權限,如只分配查詢權限給用戶。 

  1. mysql>grant SELECT on db.table to username@'localhost' 

不要將with grant option授權給普通用戶,防止普通用戶將權限授予他人,造成管理混亂。

表1是常用的權限及說明。

表1  常用權限及說明

4、數據庫安全

默認MySQL安裝初始化后會自動生成空用戶和test庫,進行安裝測試,這會對數據庫的安全構成威脅,有必要全部刪除,最后的狀態(tài)只保留單個root即可。當然,以后可以根據需要增加用戶和數據庫。 

  1. mysql>show databases;  
  2. mysql>drop database test; // 刪除數據庫test  
  3. use mysql;  
  4. delete from db; // 刪除存放數據庫的表信息,因為還沒有數據庫信息  
  5. mysql>delete from user where not (user='root'); // 刪除初始非root的用戶  
  6. mysql>delete from user where user='root' and password=; // 刪除空密碼的root  
  7. Query OK, 2 rows affected(0.00 sec)  
  8. mysql>flush privileges; // 強制刷新內存授權表 

5、限制非授權IP訪問

如果是單機運行MySQL,推薦開啟skip-networking,可以徹底關閉MySQL的TCP/IP連接方式。 

  1. # my.ini  
  2. skip-networking 

如果是固定IP訪問MySQL,可以在配置文件中增加bind-address=IP,前提是關閉skip-networking。

  1. bind-address=10.10.1.1 

6、文件讀取安全

在MySQL中,使用load data local infile命令提供對本地文件的讀取功能。在5.0版本中,該選項是默認打開的,該操作會利用MySQL把本地文件讀到數據庫中,然后攻擊者就可以非法獲取敏感信息。假如不需要讀取本地文件,應將其關閉。

網絡上流傳的一些攻擊方法中就有用到load data local infile的,同時它也是很多新發(fā)現的SQL Injection攻擊利用的手段。攻擊者還能通過使用load data local infile裝載“/etc/passwd”進一個數據庫表,然后用SELECT顯示它,這個操作對服務器的安全來說是致命的。

可以在my.cnf中添加local-infile=0參數。 

  1. vim /etc/my.cnf  
  2. [mysqld]  
  3. set-variable=local-infile = 0 

或者在MySQL啟動時添加local-infile=0參數。

  1. /usr/local/mysql/bin/mysqld_safe --user=mysql --local-infile=0 & 

7、常用安全選項

下面是一些MySQL自己提供的安全選項,在使用MySQL服務時可以根據自己的需要進行靈活的配置。

  1. --allow-suspicious-udfs 

該選項控制是否可以載入主函數只有xxx符號的用戶定義函數,如xxx_init()、xxx_deinit()、xxx_reset()、xxx_clear()、xxx_add()等函數。默認情況下,該選項關閉,并且只能載入至少有輔助符的UDF。這樣可以防止從未包含合法UDF的共享對象文件載入函數。

  1. --local-infile[={0|1}] 

如果用--local-infile=0啟動服務器,則客戶端不能使用LOCAL IN LOAD DATA語句。 

  1. --old-passwords 

強制服務器為新密碼生成短(pre-4.1)散列密碼。當服務器必須支持舊版本客戶端程序時,這對于保證兼容性很有作用。 

  1. (OBSOLETE) --safe-show-database 

在以前版本的MySQL中,該選項使SHOW DATABASES語句只顯示用戶具有部分權限的數據庫名。在MySQL 5.1中,該選項不再作為現在的默認行為使用,有一個SHOW DATABASES權限可以用來控制每個賬戶對數據庫名的訪問。 

  1. --safe-user-create 

如果啟用,用戶不能使用GRANT語句創(chuàng)建新用戶,除非用戶有mysql.user表的INSERT權限。如果要讓用戶具有授權權限來創(chuàng)建新用戶,應給用戶授予下面的權限。 

  1. mysql> GRANT INSERT(user) ON mysql.user TO'user_name'@'host_name'; 

這樣確保用戶不能直接更改權限列,必須使用GRANT語句給其他用戶授予該權限。

  1. --secure-auth 

不允許鑒定有舊(pre-4.1)密碼的賬戶。 

  1. --skip-grant-tables 

這個選項導致服務器根本不使用權限系統(tǒng),從而使得每個人都有權完全訪問所有數據庫!(通過執(zhí)行mysqladmin flush-privileges或mysqladmin eload命令,或執(zhí)行FLUSH PRIVILEGES語句,可以告訴一個正在運行的服務器再次開始使用授權表。) 

  1. --skip-name-resolve 

主機名不被解析。所有在授權表的Host的列值必須是IP號或localhost。 

  1. --skip-networking 

在網絡上不允許TCP/IP連接。所有到mysqld的連接必須經由Unix套接字進行。 

  1. --skip-show-database 

使用該選項,只允許有SHOW DATABASES權限的用戶執(zhí)行SHOW DATABASES語句,該語句顯示所有數據庫名。不使用該選項,允許所有用戶執(zhí)行SHOW DATABASES,但只顯示用戶有SHOW DATABASES權限或部分數據庫權限的數據庫名。請注意,全局權限指數據庫的權限。

8、數據安全

在生產環(huán)境中,數據庫可能會遭遇各種各樣的不測從而導致數據丟失,如硬件故障、軟件故障、自然災害、惡意攻擊者攻擊、誤操作等都會對數據造成損壞或丟失。為了在數據丟失之后能夠及時恢復數據,需要定期對數據進行備份。

備份數據的策略要根據不同的業(yè)務場景進行定制,大致有幾個參考數值,可以根據這些數值來定制符合特定環(huán)境中的數據備份策略。

(1)能夠容忍丟失多少數據。

(2)恢復數據需要多長時間。

(3)需要恢復哪些數據。

根據業(yè)務場景的需要來選擇備份方式是完整備份、增量備份還是差異備份。 

 

責任編輯:龐桂玉 來源: 計算機與網絡安全
相關推薦

2020-11-09 15:49:38

PHPMemcache網絡安全

2020-08-19 15:30:04

PHP網絡安全代碼

2020-10-14 11:30:10

PHP網絡安全加密

2018-10-06 05:00:53

2009-02-23 09:11:21

2016-10-10 00:18:27

2010-07-15 15:49:53

PHP網站安全

2011-05-25 13:17:22

MySQL

2011-09-14 10:38:39

2010-05-19 18:42:23

2020-10-24 14:10:26

PHP網絡安全人機識別

2013-06-05 09:51:04

2009-12-02 09:21:04

PHP數據過濾

2011-07-14 09:38:13

2010-08-19 10:21:09

2018-01-31 15:35:40

2009-12-11 15:28:02

PHP安全防護

2009-12-08 09:51:10

PHP intval函

2009-07-03 14:31:51

2009-11-24 13:17:16

PHP安全驗證數據
點贊
收藏

51CTO技術棧公眾號