六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

怎么設置MySQL數據庫最安全?

[摘要]在做項目開發的時候,我們需要用到數據庫,那么數據庫其安全性也是很重要的一點, 數據庫是一個數據管理的平臺,其安全性可以說是由系統的內部安全和網絡安全兩部分來決定。而對于系統管理員來說,首先要保證系統...
在做項目開發的時候,我們需要用到數據庫,那么數據庫其安全性也是很重要的一點, 數據庫是一個數據管理的平臺,其安全性可以說是由系統的內部安全和網絡安全兩部分來決定。而對于系統管理員來說,首先要保證系統本身的安全,在安裝MySQL數據庫時,需要對基礎環境進行較好的配置。今天就和多備份一起來了解一些MySQL數據庫的安全設置吧!

1、修改root用戶口令,刪除空口令

缺省安裝的MySQL的root用戶是空密碼的,為了安全起見,必須修改為強密碼,所謂的強密碼,至少8位,由字母、數字和符號組成的不規律密碼。使用 MySQL自帶的命令mysaladmin修改root密碼,同時也可以登陸數據庫,修改數據庫mysql下的user表的字段內容,修改方法如下所示:

# /usr/local/mysql/bin/mysqladmin -u root password “upassword” //使用mysqladmin
  #mysql> use mysql;
  #mysql> update user set password=password('upassword') where user='root';
  #mysql> flush privileges; //強制刷新內存授權表,否則用的還是在內存緩沖的口令

  2、刪除默認數據庫和數據庫用戶

  一般情況下,MySQL數據庫安裝在本地,并且也只需要本地的php腳本對mysql進行讀取,所以很多用戶不需要,尤其是默認安裝的用戶。MySQL初始化后會自動生成空用戶和test庫,進行安裝的測試,這會對數據庫的安全構成威脅,有必要全部刪除,最后的狀態只保留單個root即可,當然以后根據需要增加用戶和數據庫。

 

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

  3、改變默認mysql管理員帳號

  系統mysql的管理員名稱是root,而一般情況下,數據庫管理員都沒進行修改,這一定程度上對系統用戶窮舉的惡意行為提供了便利,此時修改為復雜的用戶名,請不要在設定為admin或者administraror的形式,因為它們也在易猜的用戶字典中。

 mysql> update user set user="newroot" where user="root"; //改成不易被猜測的用戶名
  mysql> flush privileges;

  4、關于密碼的管理

  密碼是數據庫安全管理的一個很重要因素,不要將純文本密碼保存到數據庫中。如果你的計算機有安全危險,入侵者可以獲得所有的密碼并使用它們。相反,應使用 MD5()、SHA1()或單向哈希函數。也不要從詞典中選擇密碼,有專門的程序可以破解它們,請選用至少八位,由字母、數字和符號組成的強密碼。在存取密碼時,使用mysql的內置函數password()的sql語句,對密碼進行加密后存儲。例如以下方式在users表中加入新用戶。 

 #mysql> insert into users values (1,password(1234),'test');

  5、使用獨立用戶運行msyql

  絕對不要作為使用root用戶運行MySQL服務器。這樣做非常危險,因為任何具有FILE權限的用戶能夠用root創建文件(例如,~root/.bashrc)。mysqld拒絕使用root運行,除非使用--user=root選項明顯指定。應該用普通非特權用戶運行 mysqld。正如前面的安裝過程一樣,為數據庫建立獨立的linux中的mysql賬戶,該賬戶用來只用于管理和運行MySQL。

  要想用其它Unix用戶啟動mysqld,,增加user選項指定/etc/my.cnf選項文件或服務器數據目錄的my.cnf選項文件中的[mysqld]組的用戶名。

 #vi /etc/my.cnf
  [mysqld]
  user=mysql

  該命令使服務器用指定的用戶來啟動,無論你手動啟動或通過mysqld_safe或mysql.server啟動,都能確保使用mysql的身份。也可以在啟動數據庫是,加上user參數。

  # /usr/local/mysql/bin/mysqld_safe --user=mysql &

  作為其它linux用戶而不用root運行mysqld,你不需要更改user表中的root用戶名,因為MySQL賬戶的用戶名與linux賬戶的用戶名無關。確保mysqld運行時,只使用對數據庫目錄具有讀或寫權限的linux用戶來運行。

  6、禁止遠程連接數據庫

  在命令行netstat -ant下看到,默認的3306端口是打開的,此時打開了mysqld的網絡監聽,允許用戶遠程通過帳號密碼連接數本地據庫,默認情況是允許遠程連接數據的。為了禁止該功能,啟動skip-networking,不監聽sql的任何TCP/IP的連接,切斷遠程訪問的權利,保證安全性。假如需要遠程管理數據庫,可通過安裝PhpMyadmin來實現。假如確實需要遠程連接數據庫,至少修改默認的監聽端口,同時添加防火墻規則,只允許可信任的網絡的 mysql監聽端口的數據通過。

# vi /etc/my.cf
  將#skip-networking注釋去掉。
  # /usr/local/mysql/bin/mysqladmin -u root -p shutdown //停止數據庫
  #/usr/local/mysql/bin/mysqld_safe --user=mysql & //后臺用mysql用戶啟動mysql

  7、限制連接用戶的數量

  數據庫的某用戶多次遠程連接,會導致性能的下降和影響其他用戶的操作,有必要對其進行限制。可以通過限制單個賬戶允許的連接數量來實現,設置my.cnf文件的mysqld中的max_user_connections變量來完成。GRANT語句也可以支持 資源控制選項來限制服務器對一個賬戶允許的使用范圍。 

 #vi /etc/my.cnf
  [mysqld]
  max_user_connections 2

  8、用戶目錄權限限制

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

 # chown -R root /usr/local/mysql/ //mysql主目錄給root
 # chown -R mysql.mysql /usr/local/mysql/var //確保數據庫目錄權限所屬mysql用戶

  9、命令歷史記錄保護

  數據庫相關的shell操作命令都會分別記錄在.bash_history,如果這些文件不慎被讀取,會導致數據庫密碼和數據庫結構等信息泄露,而登陸數據庫后的操作將記錄在.mysql_history文件中,如果使用update表信息來修改數據庫用戶密碼的話,也會被讀取密碼,因此需要刪除這兩個文件,同時在進行登陸或備份數據庫等與密碼相關操作時,應該使用-p參數加入提示輸入密碼后,隱式輸入密碼,建議將以上文件置空。

 # rm .bash_history .mysql_history //刪除歷史記錄
  # ln -s /dev/null .bash_history //將shell記錄文件置空
  # ln -s /dev/null .mysql_history //將mysql記錄文件置

  10、禁止MySQL對本地文件存取

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

  測試:首先在測試數據庫下建立sqlfile.txt文件,用逗號隔開各個字段

# vi sqlfile.txt
  1,sszng,111
  2,sman,222
  #mysql> load data local infile 'sqlfile.txt' into table users fields terminated by ','; //讀入數據
  #mysql> select * from users;
  +--------+------------+----------+
    userid   username   password  
  +--------+------------+----------+
    1   sszng   111  
    2   sman   222  
  +--------+------------+----------+

  成功的將本地數據插入數據中,此時應該禁止MySQL中用“LOAD DATA LOCAL INFILE”命令。網絡上流傳的一些攻擊方法中就有用它LOAD DATA LOCAL INFILE的,同時它也是很多新發現的SQL Injection攻擊利用的手段!黑客還能通過使用LOAD DATALOCAL INFILE裝載“/etc/passwd”進一個數據庫表,然后能用SELECT顯示它,這個操作對服務器的安全來說,是致命的。可以在my.cnf中添加local-infile=0,或者加參數local-infile=0啟動mysql。

#/usr/local/mysql/bin/mysqld_safe --user=mysql --local-infile=0 &
  #mysql> load data local infile 'sqlfile.txt' into table users fields terminated by ',';
  #ERROR 1148 (42000): The used command is not allowed with this MySQL version
  --local-infile=0選項啟動mysqld從服務器端禁用所有LOAD DATA LOCAL命令,假如需要獲取本地文件,需要打開,但是建議關閉。

  11、MySQL服務器權限控制

  MySQL 權限系統的主要功能是證實連接到一臺給定主機的用戶,并且賦予該用戶在數據庫上的SELECT、INSERT、UPDATE和DELETE等權限(詳見 user超級用戶表)。它的附加的功能包括有匿名的用戶并對于MySQL特定的功能例如LOAD DATA INFILE進行授權及管理操作的能力。

  管理員可以對user,db,host等表進行配置,來控制用戶的訪問權限,而user表權限是超級用戶權限。只把user表的權限授予超級用戶如服務器或數據庫主管是明智的。對其他用戶,你應該把在user表中的權限設成'N'并且僅在特定數據庫的基礎上授權。你可以為特定的數據庫、表或列授權,FILE 權限給予你用LOAD DATA INFILE和SELECT ... INTO OUTFILE語句讀和寫服務器上的文件,任何被授予FILE權限的用戶都能讀或寫MySQL服務器能讀或寫的任何文件。(說明用戶可以讀任何數據庫目錄下的文件,因為服務器可以訪問這些文件)。 FILE權限允許用戶在MySQL服務器具有寫權限的目錄下創建新文件,但不能覆蓋已有文件在user表的File_priv設置Y或N。,所以當你不需要對服務器文件讀取時,請關閉該權限。

#mysql> load data infile 'sqlfile.txt' into table loadfile.users fields terminated by ',';
  Query OK, 4 rows affected (0.00 sec) //讀取本地信息sqlfile.txt'
  Records: 4 Deleted: 0 Skipped: 0 Warnings: 0
  #mysql> update user set File_priv='N' where user='root'; //禁止讀取權限
  Query OK, 1 row affected (0.00 sec)
  Rows matched: 1 Changed: 1 Warnings: 0
  mysql> flush privileges; //刷新授權表
  Query OK, 0 rows affected (0.00 sec)
  #mysql> load data infile 'sqlfile.txt' into table users fields terminated by ','; //重登陸讀取文件
  #ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) //失敗
  # mysql> select * from loadfile.users into outfile 'test.txt' fields terminated by ',';
  ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

  為了安全起見,隨時使用SHOW GRANTS語句檢查查看誰已經訪問了什么。然后使用REVOKE語句刪除不再需要的權限。

  12、使用chroot方式來控制MySQL的運行目錄

  Chroot是linux中的一種系統高級保護手段,它的建立會將其與主系統幾乎完全隔離,也就是說,一旦遭到什么問題,也不會危及到正在運行的主系統。這是一個非常有效的辦法,特別是在配置網絡服務程序的時候。

  13、關閉對Web訪問的支持

  如果不打算讓Web訪問使用MySQL數據庫,沒有提供諸如PHP這樣的Web語言的時候,重新設置或編譯你的PHP,取消它們對MySQL的默認支持。假如服務器中使用php等web程序,試試用Web形式非法的請求,如果得到任何形式的MySQL錯誤,立即分析原因,及時修改Web程序,堵住漏洞,防止 MySQL暴露在web面前。

  對于Web的安全檢查,在MySQL官方文檔中這么建議,對于web應用,至少檢查以下清單:

  試試用Web形式輸入單引號和雙引號(‘'’和‘"’)。如果得到任何形式的MySQL錯誤,立即分析原因。

  試試修改動態URL,可以在其中添加%22(‘"’)、%23(‘#’)和%27(‘'’)。

  試試在動態URL中修改數據類型,使用前面示例中的字符,包括數字和字符類型。你的應用程序應足夠安全,可以防范此類修改和類似攻擊。

  試試輸入字符、空格和特殊符號,不要輸入數值字段的數字。你的應用程序應在將它們傳遞到MySQL之前將它們刪除或生成錯誤。將未經過檢查的值傳遞給MySQL是很危險的!

  將數據傳給MySQL之前先檢查其大小。

  用管理賬戶之外的用戶名將應用程序連接到數據庫。不要給應用程序任何不需要的訪問權限。

  14、數據庫備份策略

  一般可采用本地備份和網絡備份的形式,可采用MySQL本身自帶的mysqldump的方式和直接復制備份形式,

  直接拷貝數據文件最為直接、快速、方便,但缺點是基本上不能實現增量備份。為了保證數據的一致性,需要在備份文件前,執行以下 SQL 語句:FLUSH TABLES WITH READ LOCK;也就是把內存中的數據都刷新到磁盤中,同時鎖定數據表,以保證拷貝過程中不會有新的數據寫入。這種方法備份出來的數據恢復也很簡單,直接拷貝回原來的數據庫目錄下即可。

  使用mysqldump可以把整個數據庫裝載到一個單獨的文本文件中。這個文件包含有所有重建您的數據庫所需要的SQL命令。這個命令取得所有的模式(Schema,后面有解釋)并且將其轉換成DDL語法(CREATE語句,即數據庫定義語句),取得所有的數據,并且從這些數據中創建INSERT語句。這個工具將您的數據庫中所有的設計倒轉。因為所有的東西都被包含到了一個文本文件中。這個文本文件可以用一個簡單的批處理和一個合適SQL語句導回到MySQL中。

  使用 mysqldump進行備份非常簡單,如果要備份數據庫” nagios_db_backup ”,使用命令,同時使用管道gzip命令對備份文件進行壓縮,建議使用異地備份的形式,可以采用Rsync等方式,將備份服務器的目錄掛載到數據庫服務器,將數據庫文件備份打包在,通過crontab定時備份數據:

#!/bin/sh
  time=`date +"("%F")"%R`
  $/usr/local/mysql/bin/mysqldump -u nagios -pnagios nagios   gzip >/home/sszheng/nfs58/nagiosbackup/nagios_backup.$time.gz
  # crontab -l
  # m h dom mon dow command
  00 00 * * * /home/sszheng/shnagios/backup.sh

  恢復數據使用命令:

 gzip -d nagios_backup./(2008-01-24/)00/:00.gz
  nagios_backup.(2008-01-24)00:00
  #mysql –u root -p nagios < /home/sszheng/nfs58/nagiosbackup/nagios_backup./(2008-01-24/)12/:00

  三、Mysqld安全相關啟動選項

  下列mysqld選項影響安全:

 --allow-suspicious-udfs

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

local-infile[={0 1}]

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

--old-passwords

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

  (OBSOLETE) --safe-show-database

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

 --safe-user-create

  如果啟用,用戶不能用GRANT語句創建新用戶,除非用戶有mysql.user表的INSERT權限。如果你想讓用戶具有授權權限來創建新用戶,你應給用戶授予下面的權限:

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

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

--secure-auth

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

 --skip-grant-tables

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

 --skip-name-resolve

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

--skip-networking

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

 -skip-show-database

1.如果使用該選項,只允許有SHOW DATABASES權限的用戶執行SHOW DATABASES語句,該語句顯示所有數據庫名。

2.如果不使用該選項,則允許所有用戶執行SHOW DATABASES,但只顯示用戶有SHOW DATABASES權限或部分數據庫權限的數據庫名。請注意全局權限指數據庫的權限。、

以上就是MySQL數據庫安全設置的方法,有需要的小伙伴們趕緊收藏起來吧。

相關推薦:

Mysql安全性測試

怎樣使MySQL安全以對

Windows下設置MySQL安全權限

以上就是如何設置MySQL數據庫最安全?的詳細內容,更多請關注php中文網其它相關文章!


學習教程快速掌握從入門到精通的SQL知識。




主站蜘蛛池模板: 欧美一卡二卡3卡4卡无卡免费 | 日韩欧美国产视频 | 日韩精品小视频 | 欧美在线观看高清一二三区 | 日韩 国产 在线 | 无码中文资源在线播放 | 妖精视频亚洲 | 伊人青青草 | 中文一区在线观看 | 天堂在线中文网 | 日韩在线视频中文字幕 | 色丁香久久 | 亚洲国产欧美在线人成精品一区二区 | 人人澡天天澡夜夜澡 | 婷婷开心六月久久综合丁香 | 青青草原在线免费 | 一区二区三区精品视频 | 日韩城人视频 | 欧美怡红院免费的视频 | 欧美做真爱免费无遮挡 | 日本一区二区三区欧美在线观看 | 亚洲人成片在线观看 | 天天色天天干天天 | 午夜视频在线免费 | 午夜性影院爽爽爽爽爽爽 | 在线亚洲精品中文字幕美乳 | 亚洲综合色站 | 亚洲婷婷六月 | 日韩中文字幕免费观看 | 日本精品一区二区三区四区 | 亚洲人与黑人xxxx | 中文字幕亚洲日本岛国片 | 日韩欧美h| 日本欧美国产精品第一页久久 | 青草国产视频 | 天堂av2017男人的天堂 | 亚洲一欧洲中文字幕在线 | 欧美午夜不卡在线观看最新 | 人人免费人人专区 | 日韩欧国产精品一区综合无码 | 青草园网站在线观看 |