mysql資料庫安全
一般是即時備份。做主從。或者是每天增量備份。
本文是在linux下,mysql 4.1.14版本下測試的,經過適當修改可能適合mysql 4.0,5.0及其其他版本.
本文適合於沒有啟動復制功能的mysql,如果啟動了復制,可能不需要採取這種備份策略或者需要修改相關參數.
每個人的備份策略都可能不同,所以請根據實際情況修改,做到舉一反三,不要照搬照抄,可能會造成不必要的損失.
希望你明白這個腳本要干什麼工作!
腳本描述
每7天備份一次所有數據,每天備份binlog,也就是增量備份.
(如果數據少,每天備份一次完整數據即可,可能沒必要做增量備份)
作者對shell腳本不太熟悉,所以很多地方寫的很笨 :)
開啟 bin log
在mysql 4.1版本中,默認只有錯誤日誌,沒有其他日誌.可以通過修改配置打開bin log.方法很多,其中一個是在/etc/my.cnf中的mysqld部分加入:
[mysqld]
log-bin
這個日誌的主要作用是增量備份或者復制(可能還有其他用途).
如果想增量備份,必須打開這個日誌.
對於資料庫操作頻繁的mysql,這個日誌會變得很大,而且可能會有多個.
在資料庫中flush-logs,或者使用mysqladmin,mysqlmp調用flush-logs後並且使用參數delete-master-logs,這些日誌文件會消失,並產生新的日誌文件(開始是空的).
所以如果從來不備份,開啟日誌可能沒有必要.
完整備份的同時可以調用flush-logs,增量備份之前flush-logs,以便備份最新的數據.
完整備份腳本
如果資料庫數據比較多,我們一般是幾天或者一周備份一次數據,以免影響應用運行,如果數據量比較小,那麼一天備份一次也無所謂了.
#!/bin/sh
# mysql data backup script
# by scud
# 2005-10-30
#
# use mysqlmp --help,get more detail.
#
BakDir=/backup/mysql
LogFile=/backup/mysql/mysqlbak.log
DATE=`date +%Y%m%d`
echo " " >> $LogFile
echo " " >> $LogFile
echo "-------------------------------------------" >> $LogFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
echo "--------------------------" >> $LogFile
cd $BakDir
DumpFile=$DATE.sql
GZDumpFile=$DATE.sql.tgz
mysqlmp --quick --all-databases --flush-logs
--delete-master-logs --lock-all-tables
> $DumpFile
echo "Dump Done" >> $LogFile
tar czvf $GZDumpFile $DumpFile >> $LogFile 2>&1
echo "[$GZDumpFile]Backup Success!" >> $LogFile
rm -f $DumpFile
#delete previous daily backup files:採用增量備份的文件,如果完整備份後,則刪除增量備份的文件.
cd $BakDir/daily
rm -f *
cd $BakDir
echo "Backup Done!"
echo "please Check $BakDir Directory!"
echo " it to your local disk or ftp to somewhere !!!"
ls -al $BakDir
上面的腳本把mysql備份到本地的/backup/mysql目錄,增量備份的文件放在/backup/mysql/daily目錄下.
注意:上面的腳本並沒有把備份後的文件傳送到其他遠程計算機,也沒有刪除幾天前的備份文件:需要用戶增加相關腳本,或者手動操作.
增量備份
增量備份的數據量比較小,但是要在完整備份的基礎上操作,用戶可以在時間和成本上權衡,選擇最有利於自己的方式.
增量備份使用bin log,腳本如下:
#!/bin/sh
#
# mysql binlog backup script
#
/usr/bin/mysqladmin flush-logs
DATADIR=/var/lib/mysql
BAKDIR=/backup/mysql/daily
###如果你做了特殊設置,請修改此處或者修改應用此變數的行:預設取機器名,mysql預設也是取機器名
HOSTNAME=`uname -n`
cd $DATADIR
FILELIST=`cat $HOSTNAME-bin.index`
##計算行數,也就是文件數
COUNTER=0
for file in $FILELIST
do
COUNTER=`expr $COUNTER + 1 `
done
NextNum=0
for file in $FILELIST
do
base=`basename $file`
NextNum=`expr $NextNum + 1`
if [ $NextNum -eq $COUNTER ]
then
echo "skip lastest"
else
dest=$BAKDIR/$base
if(test -e $dest)
then
echo "skip exist $base"
else
echo "ing $base"
cp $base $BAKDIR
fi
fi
done
echo "backup mysql binlog ok"
增量備份腳本是備份前flush-logs,mysql會自動把內存中的日誌放到文件里,然後生成一個新的日誌文件,所以我們只需要備份前面的幾個即可,也就是不備份最後一個.
因為從上次備份到本次備份也可能會有多個日誌文件生成,所以要檢測文件,如果已經備份過,就不用備份了.
注:同樣,用戶也需要自己遠程傳送,不過不需要刪除了,完整備份後程序會自動生成.
訪問設置
腳本寫完了,為了能讓腳本運行,還需要設置對應的用戶名和密碼,mysqladmin和mysqlmp都是需要用戶名和密碼的,當然可以寫在腳本中,但是修改起來不太方便,假設我們用系統的root用戶來運行此腳本,那麼我們需要在/root(也就是root用戶的home目錄)創建一個.my.cnf文件,內容如下
[mysqladmin]
password =password
user= root
[mysqlmp]
user=root
password=password
注:設置本文件只有root可讀.(chmod 600 .my.cnf )
此文件說明程序使用mysql的root用戶備份數據,密碼是對應的設置.這樣就不需要在腳本里寫用戶名和密碼了.
自動運行
為了讓備份程序自動運行,我們需要把它加入crontab.
有2種方法,一種是把腳本根據自己的選擇放入到/etc/cron.daily,/etc/cron.weekly這么目錄里.
一種是使用crontab -e放入到root用戶的計劃任務里,例如完整備份每周日凌晨3點運行,日常備份每周一-周六凌晨3點運行.
❷ Mysql資料庫管理系統中關於安全性的定義是保存在哪個資料庫下的基本表中表
摘要 。安全的一般性因素:包括使用較大強度的密碼,禁止給用戶分配不必要的許可權,以防止 SOL 受到攻擊。
❸ mysql的特點是什麼
一、MySQL資料庫的特點和優勢:
(1)功能強大
MySQL 中提供了多種資料庫存儲引擎,各引擎各有所長,適用於不同的應用場合,用戶可以選擇最合適的引擎以得到最高性能,可以處理每天訪問量超過數億的高強度的搜索 Web 站點。MySQL5 支持事務、視圖、存儲過程、觸發器等。
(2)支持跨平台
MySQL 支持至少 20 種以上的開發平台,包括 Linux、Windows、FreeBSD 、IBMAIX、AIX、FreeBSD 等。這使得在任何平台下編寫的程序都可以進行移植,而不需要對程序做任何的修改。
(3)運行速度快
高速是 MySQL 的顯著特性。在 MySQL 中,使用了極快的 B 樹磁碟表(MyISAM)和索引壓縮;通過使用優化的單掃描多連接,能夠極快地實現連接;SQL 函數使用高度優化的類庫實現,運行速度極快。
(4)支持面向對象
php 支持混合編程方式。編程方式可分為純粹面向對象、純粹面向過程、面句對象與面向過程混合 3 種方式。
(5)安全性高
靈活和安全的許可權與密碼系統,允許基本主機的驗證。連接到伺服器時,所有的密碼傳輸均採用加密形式,從而保證了密碼的安全。
(6)成本低
MySQL 資料庫開放源代碼且無版權制約,是一種完全免費的產品,用戶可以直接通過網路下載,自主性及使用成本低。體積小,安裝方便。歷史悠久,用戶使用活躍,遇到問題可以尋求幫助,易於維護。
(7)支持各種開發語言
MySQL 為各種流行的程序設計語言提供支持,為它們提供了很多的 API 函數,包括 PHP、ASP.NET、java、Eiffel、Python、Ruby、Tcl、C、C++、Perl 語言等。
(8)資料庫存儲容量大
MySQL 資料庫的最大有效表尺寸通常是由操作系統對文件大小的限制決定的,而不是由 MySQL 內部限制決定的。InnoDB 存儲引擎將 InnoDB 表保存在一個表空間內,該表空間可由數個文件創建,表空間的最大容量為 64TB,可以輕松處理擁有上千萬條記錄的大型資料庫。
(9)支持強大的內置函數
PHP 中提供了大量內置函數,幾乎涵蓋了 Web 應用開發中的所有功能。它內置了資料庫連接、文件上傳等功能,MySQL 支持大量的擴展庫,如 MySQLi 等,可以為快速開發 Web 應用提供便利。
二、相比其他資料庫的特點和優勢:
(1) 對事務的提交
MySQL默認是自動提交,不需要在寫commit指令或者點擊commit按鈕。
(2) 分頁查詢
MySQL是直接在SQL語句中寫"select... from ...where...limit m, n",有limit就可以實現分頁。PHP里還可以用SEEK定位到結果集的位置。
(3) 事務隔離級別
MySQL是read commited的隔離級別。
一個session讀取數據時,其他session不能更改數據,但可以在表最後插入數據。session更新數據時,要加上排它鎖,其他session無法訪問數據。
(4) 復制簡單
MySQL復制伺服器配置簡單。
(5) 自動增長的數據類型處理
MYSQL有自動增長的數據類型,插入記錄時不用操作此欄位,會自動獲得數據值。
(6)單引號的處理
MYSQL里可以用雙引號包起字元串。
(7) 日期欄位的處理
MYSQL日期欄位分DATE和TIME兩種。
(8)空字元的處理
MYSQL的非空欄位也有空的內容,NULL或空字元。
❹ mysql資料庫的優點
mysql資料庫的優點如下:
1、速度:運行速度快。
2、價格:MySQL對多數個人來說是免費的。
3、容易使用;與其他大型資料庫的設置和管理相比,其復雜程度較低,容易學習。
4、可移植性:能夠工作在眾多不同的系統平台上,例如:Windows、Linux、Unix、MacOS等。
5、豐富的介面:提供了用於C、C++、Eiffel、Java、Perl、PHP、Python、Rudy和TCL等語言的APl。6、支持查詢語言:MySQL可以利用標准SQL語法和支持ODBC(開放式資料庫連接)的應用程序。
7、安全性和連接性;十分靈活和安全的許可權和密碼系統,允許主機驗證。連接到伺服器時,所有的密碼均採用加密形式,從而保證了密碼安全。並且由於MySQL時網路化的,因此可以在網際網路網上的任何地方訪問,提高數據共享效率。
❺ MYSQL資料庫有哪些安全防護的措施
簡述提高mysql資料庫伺服器性能的措施有哪些
1,存儲引擎,根據應用選擇合適的引擎
2,索引
----這個就有很多文章了,具體需要你自己去了解
3,sql語句優化,查詢條件的選擇之類
4,mysql自身系統配置,需要針對應用去定製
5,表的選擇,臨時表,或者分區表,也需要針對應用的情況去選擇使用
❻ 如何做好MySQL安全策略
摘至網頁鏈接
常見Mysql配置文件:linux系統下是my.conf,windows環境下是my.ini;
資料庫整體安全需求:機密性、完整性、可用性;
下面以mysql 5.7版本為例,介紹mysql常見的安全策略、配置、加固方式等等,有些策略可能只針對Linux操作系統,更多策略可以參考CIS Mysql Benchmark相關文檔:
1、操作系統級別安全配置
1.1不要將資料庫放在系統分區
Windows系統:直接檢查是否將資料庫放置在C盤。
Linux系統:
在終端連接上mysql資料庫,執行如下命令:
show variables where variable_name = 'datadir';
然後返回shell命令行:
df -h <datadir>
其中datadir是上一條命令的返回值。
上述命令的返回值不應是/、/var、/usr
1.2使用專用的最小許可權賬號運行mysql資料庫進程
Windows系統:直接打開任務管理器,查看運行mysql進程的操作系統賬號,不能為administrator賬號。
Linux系統:
Shell命令行運行如下命令:
ps -ef | grep mysql
查看mysql服務的運行賬號是否為root或其他高許可權賬號,如果是的,則需要創建一個非管理員專用賬號來運行mysql服務。
1.3禁止使用mysql命令行歷史記錄
Linux系統:
執行如下命令:
find / -name ".mysql_history"
查看是否存在mysql的歷史命令記錄文件,如果存在,則需要進行如下加固:
(1)刪除.mysql_history文件;
(2)設置環境變數MYSQL_HISTFILE為/dev/null,並添加到shell的初始化腳本中,創建mysql_history到/dev/null的鏈接:
ln -s /dev/null $HOME/.mysql_history
1.4確保MYSQL_PWD環境變數未設置敏感信息
Windows系統下進入cmd命令行,使用如下命令:
Set
查看是否設置了環境變數MYSQL_PWD。
Linux系統下使用如下命令:
grep MYSQL_PWD /proc/*/environ
查看MYSQL_PWD環境變數是否設置了敏感信息。
確認那個配置文件或腳本設置了MYSQL_PWD環境變數。
2、安裝
2.1使用資料庫專用伺服器
使用專用的伺服器安裝mysql服務可以減少mysql服務的攻擊面,盡量卸載或刪除操作系統上的不必要的應用或服務,減少其他應用的安裝可能給mysql的運行帶來的安全風險。
2.2不要復用資料庫賬號
運行mysql服務的操作系統賬號不要用來運行其他應用或服務,這樣可以避免其他應用或伺服器被攻擊給mysql服務帶來影響。
2.3歷史命令行密碼設置為不可見
使用如下命令:
mysql -u admin -p password
連接mysql資料庫服務,退出後查看歷史命令,確認password是否為明文。
建議使用如下命令方式登錄:
(1)先輸入mysql -u admin -p
(2)根據命令行提示輸入密碼;
而不要在一整條命令中輸入密碼。
另外要控制mysql配置文件訪問許可權。
3、文件許可權控制
3.1控制數據目錄的訪問許可權
數據目錄是mysql資料庫存放的位置,在mysql命令行界面下執行如下命令:
show variables where variable_name = 'datadir';
在終端命令行下執行如下命令:
ls -l <datadir>/.. | egrep "^d[r|w|x]{3}------s*.s*mysqls*mysqls*d*.*mysql"
其中<datadir>是第一條命令的執行結果
如果存在問題,linux環境下在終端執行如下命令進行加固:
chmod 700 <datadir>
chown mysql:mysql <datadir>
3.2控制二進制日誌文件的許可權
mysql的運行會產生很多日誌,例如二進制日誌、錯誤日誌、慢查詢日誌等等,Mysql命令行下執行如下命令:
show variables like 'log_bin_basename';
在終端命令行執行如下命令:
ls <log_bin_basename>.*
對於發現的每一個文件,執行如下命令:
ls -l <log_bin_basename.nnnnn> | egrep "^-[r|w]{2}-[r|w]{2}----s*.*$"
根據輸出確認日誌文件的許可權設置是否存在問題。
對於每個日誌文件,修改其許可權和屬組如下:
chmod 660 <log file>
chown mysql:mysql <log file>
3.3控制錯誤日誌文件的許可權
Mysql命令行下執行如下命令:
show variables like 'log_error';
在終端命令行執行如下命令:
ls <log_error>.*
對於發現的每一個文件,執行如下命令:
ls -l <log_error> | egrep "^-[r|w]{2}-[r|w]{2}----s*.*$"
根據輸出確認日誌文件的許可權設置是否存在問題。
對於每個日誌文件,修改其許可權和屬組如下:
chmod 660 <log file>
chown mysql:mysql <log file>
3.4控制慢查詢日誌文件的許可權
Mysql命令行下執行如下命令:
show variables like 'slow_query_log_file';
在終端命令行執行如下命令:
ls <slow_query_log_file>.*
對於發現的每一個文件,執行如下命令:
ls -l <slow_query_log_file> | egrep "^-[r|w]{2}-[r|w]{2}----s*.*$"
根據輸出確認日誌文件的許可權設置是否存在問題。
對於每個日誌文件,修改其許可權和屬組如下:
chmod 660 <log file>
chown mysql:mysql <log file>
3.5控制通用日誌文件的許可權
Mysql命令行下執行如下命令:
show variables like 'general_log_file';
在終端命令行執行如下命令:
ls <general_log_file>.*
對於發現的每一個文件,執行如下命令:
ls -l <general_log_file> | egrep "^-[r|w]{2}-[r|w]{2}----s*.*$"
根據輸出確認日誌文件的許可權設置是否存在問題。
對於每個日誌文件,修改其許可權和屬組如下:
chmod 660 <log file>
chown mysql:mysql <log file>
3.6控制審計日誌文件的許可權
Mysql命令行下執行如下命令:
show global variables where variable_name = 'audit_log_file';
在終端執行如下命令:
ls -l <audit_log_file> | egrep "^-rw[-x]rw[-x][-r][-w][-x][ ]*[0-9][ ]*mysql[
]*mysql.*$"
根據輸出確認日誌文件的許可權設置是否存在問題。
對於每個日誌文件,修改其許可權和屬組如下:
chmod 660 <audit_log_file>
chown mysql:mysql <audit_log_file>
4、通用安全
4.1安裝最新的補丁
在mysql命令行下查詢MySQL的版本:
SHOW VARIABLES WHERE Variable_name LIKE "version";
確認是否由需要安裝的補丁包,如果有請安裝。
4.2刪除test資料庫
Mysql資料庫默認安裝好後,存在一個名為test的資料庫,如果存在,請執行如下命令刪除:
Drop database 「test」
4.3確保讀取本地文件的參數設置為失效
Mysql命令行下,使用如下命令:
SHOW VARIABLES WHERE Variable_name = 'local_infile';
查看結果是否為OFF。
如果該命令為ON,則資料庫用戶可以通過LOAD DATA INFILE 或者SELECT local_file讀取到資料庫所在操作系統本地的文件,在這種情況下,需要在mysql配置文件中新增一行:
Local-infile=0;
然後重啟資料庫服務。
5、許可權配置
5.1控制可以訪問所有資料庫的賬號
Mysql資料庫下的user表和db表中存放著可以授予資料庫用戶的許可權,確保只有管理員賬號才能訪問所有資料庫。可以訪問mysql資料庫的用戶或許可以查看密碼哈希值、修改用戶許可權等等。
使用如下sql語句:
SELECT user, hostFROM mysql.user
WHERE (Select_priv = 'Y')OR (Insert_priv = 'Y')OR (Update_priv = 'Y')
OR (Delete_priv = 'Y')OR (Create_priv = 'Y')OR (Drop_priv = 'Y');
SELECT user, hostFROM mysql.dbWHERE db = 'mysql'
AND ((Select_priv = 'Y')OR (Insert_priv = 'Y')OR (Update_priv = 'Y')
OR (Delete_priv = 'Y')OR (Create_priv = 'Y')OR (Drop_priv = 'Y'));
確保返回結果只能是資料庫管理員賬號。
5.2限制非管理員用戶的許可權
Mysql.user表中的許可權列有:
file_priv:表示是否允許用戶讀取資料庫所在主機的本地文件;
Process:表示是否允許用戶查詢所有用戶的命令執行信息;
Super_priv:表示用戶是否有設置全局變數、管理員調試等高級別許可權;
Shutdown_priv:表示用戶是否可以關閉資料庫;
Create_user_priv:表示用戶是否可以創建或刪除其他用戶;
Grant_priv:表示用戶是否可以修改其他用戶的許可權;
應確保只有資料庫管理員才有上述許可權,使用如下sql語句查看擁有各個許可權的資料庫賬號:
select user, host from mysql.user where File_priv = 'Y';
select user, host from mysql.user where Process_priv = 'Y';
select user, host from mysql.user where Process_priv = 'Y';
SELECT user, host FROM mysql.user WHERE Shutdown_priv = 'Y';
SELECT user, host FROM mysql.user WHERE Create_user_priv = 'Y';
SELECT user, host FROM mysql.user WHERE Grant_priv = 'Y';
SELECT user, host FROM mysql.db WHERE Grant_priv = 'Y';
確保查詢結果中不存在非管理員用戶。
如果存在非管理員用戶,使用如下命令進行許可權回收:
REVOKE FILE ON *.* FROM '<user>';
REVOKE PROCESS ON *.* FROM '<user>';
REVOKE SUPER ON *.* FROM '<user>';
REVOKE SHUTDOWN ON *.* FROM '<user>';
REVOKE CREATE USER ON *.* FROM '<user>';
REVOKE GRANT OPTION ON *.* FROM <user>;
其中user為上述查詢到的非管理員用戶。
5.3合理控制DML/DDL操作授權
DML/DDL語句包括創建或修改資料庫結構的許可權,例如insert、update、delete、create、drop和alter語句,在任何資料庫中都要控制用戶的此類許可權,確保只授權給有業務需求的非管理員用戶。Mysql命令行下執行如下命令:
SELECT User,Host,DbFROM mysql.dbWHERE Select_priv='Y'
OR Insert_priv='Y'OR Update_priv='Y'OR Delete_priv='Y'OR Create_priv='Y'
OR Drop_priv='Y'OR Alter_priv='Y';
上述查詢到的用戶只能對特地的資料庫才有相關的許可權,使用如下命令進行相關許可權的回收:
REVOKE SELECT ON <host>.<database> FROM <user>;
REVOKE INSERT ON <host>.<database> FROM <user>;
REVOKE UPDATE ON <host>.<database> FROM <user>;
REVOKE DELETE ON <host>.<database> FROM <user>;
REVOKE CREATE ON <host>.<database> FROM <user>;
REVOKE DROP ON <host>.<database> FROM <user>;
REVOKE ALTER ON <host>.<database> FROM <user>;
其中<user>為查詢到的未授權的用戶,host為相關主機,database為相關資料庫。
6、審計和日誌
6.1開啟錯誤日誌審計功能
錯誤日誌包括資料庫運行和停止過程中的一系列活動信息,有助於分析資料庫運行過程中的一些異常活動,一般情況下需要開啟錯誤日誌記錄功能,使用如下命令查詢:
SHOW variables LIKE 'log_error';
確保返回結果為非空,如果為空,需要在mysql資料庫配置文件中增加相關配置。
6.2確保日誌存放在非系統區域
日誌文件隨著資料庫的運行會不斷增加,如果存放在系統區域,則會影響系統的正常運行,使用如下命令進行查詢:
SELECT @@global.log_bin_basename;
確保返回結果不是如下路徑:/、/var、/usr
6.3關閉原始日誌功能
原始日誌選項會決定一些敏感信息是否會被明文寫進日誌中,例如查詢日誌、慢查詢日誌、二進制日誌,確保資料庫配置文件中存在如下配置項:
Log-raw = OFF
7、認證
7.1 Old_passwords環境變數設置
Old_passwords決定了使用PASSWORD()函數和IDENTIFIED BY、CREATE USER、GRANT等語句是時的hash演算法:
0 - authenticate with the mysql_native_password plugin
1 - authenticate with the mysql_old_password plugin
2 - authenticate with the sha256_password plugin
設置為mysql_old_password代表弱hash演算法,可以快速通過密碼字典進行暴力破解。使用如下命令查詢相關值:
SHOW VARIABLES WHERE Variable_name = 'old_passwords';
確保返回值不為1。
7.2 secure_auth選項設置
如果客戶端採用Old_passwords發起連接請求,如果伺服器端設置了secure_auth,則客戶端會拒絕連接請求,可以根據安全需求在配置文件中做相應配置。
7.3密碼保存
確保密碼沒有明文保存在全局配置文件中。
7.4確保所有用戶都要求使用非空密碼登錄
執行如下語句查詢是否有用戶不需要密碼即可登錄:
SELECT User,host
FROM mysql.user
WHERE (plugin IN('mysql_native_password', 'mysql_old_password')
AND (LENGTH(Password) = 0
OR Password IS NULL))
OR (plugin='sha256_password' AND LENGTH(authentication_string) = 0);
7.5不存在空賬號
使用如下命令查詢是否存在空賬號:
SELECT user,host FROM mysql.user WHERE user = '';
8、網路設置
如果mysql資料庫伺服器與應用是跨信任域部署的,則需要考慮在資料庫伺服器與應用伺服器之間建立ssl通道進行數據傳輸,不過這種場景一般很少見,在此不詳細描述。
9、資料庫備份
❼ mysql資料庫可靠性分析
mysql資料庫有undo空間
5種mysql做可靠性分析的方案:
1.MySQL Clustering(ndb-cluster stogare)
簡介:
MySQL公司以存儲引擎方式提供的高可靠性方案,是事務安全的,實時復制數據,可用於需要高可靠性及負載均衡的場合。該方案至少需要三個節點伺服器才能達到較好的效果。
成本:
節點伺服器對RAM的需求很大,與資料庫大小呈線性比例;
最好使用千兆乙太網絡;
還需要使用Dolphin公司提供的昂貴的SCI卡。
優點:
可用於負載均衡場合;
可用於高可靠性場合;
高伸縮性;
真正的資料庫冗餘;
容易維護。
缺點:
隨著資料庫的變大,對RAM的需求變得更大,因此成本很高;
速度:
幾乎 比典型的單獨伺服器(無千兆乙太網,無SCI卡,存儲引擎相關的限制少)慢10倍。
應用場合:
冗餘,高可靠性,負載均衡
2. MySQL / GFS-GNBD/ HA (Active/Passive)
簡介:
如果多個MySQL伺服器使用共享硬碟作為數據存儲,此方案如何?
GFS/GNBD可以提供所需的共享硬碟。
GFS是事務安全的文件系統。同一時刻你可以讓一個MySQL使用共享數據。
成本:
最多n台高性能伺服器的成本,其中一個激活的,其他作為備份伺服器。
優點:
高可靠性
某種程度的冗餘
按照高可靠性進行伸縮
缺點:
沒有負載均衡
沒有保證的冗餘
無法對寫操作進行伸縮
速度:
單獨伺服器的2倍。對讀操作支持得較好。
應用場合:
需要高可靠性的、讀操作密集型的應用
3. MySQL / DRBD / HA (Active/Passive)
簡介:
如果多個MySQL伺服器使用共享硬碟作為數據存儲,此方案如何?
DRBD可以提供這樣的共享硬碟。DRBD可以被設置成事務安全的。
同一時刻你可以讓一個MySQL使用共享數據。
成本:
最多n台高性能伺服器的成本,其中一個激活的,而其他則作為備份伺服器。
優點:
高可靠性;
一定程度的冗餘;
以高可靠性名義來看是可伸縮的。
缺點:
沒有負載均衡
沒有保證的冗餘
在寫負載方面沒有伸縮性
速度:
在讀寫方面相當於單獨伺服器
應用場合
需要高可靠性、讀操作密集型的應用
4. MySQL Write Master / Multiple MySQL Read Slaves (Active/Active)
簡介:
考慮不同的讀、寫DB資料庫連接的情況。可以使用一台主伺服器用於寫操作,而採用n台從伺服器用於讀操作。
成本:
最多1台高性能寫伺服器,n台讀伺服器的成本
優點:
讀操作的高可靠性;
讀操作的負載均衡;
在讀操作負載均衡方面是可伸縮的。
缺點:
無寫操作的高可靠性;
無寫操作的負載均衡;
在寫操作方面無伸縮性;
速度:
同單獨伺服器;在讀操作方面支持得較好
應用場合
讀操作密集型的、需要高可靠性和負載均衡的應用。
5. Standalone MySQL Servers(Functionally separated) (Active)
多台功能分離的單獨伺服器,沒有高可靠性、負載均衡能力,明顯缺點太多,不予考慮。
❽ 如何保證mysql資料庫的安全性
其實這個和jsp沒啥關系,只要你的代碼沒有比如爆源碼或者直接上傳shell這些弱智的漏洞就行了,一般的做法其實很簡單,就是給mysql分配一個單獨的賬號,而不要使用root許可權,而且只能針對目標資料庫操作,其他的資料庫沒有操作許可權,如果要附加上jsp的話,那麼就是別讓你的程序出現注入之類的漏洞,因為只要存在注入,那麼至少可以肯定你的資料庫會全部泄露,這樣會使別人進一步入侵你甚至控制你的伺服器,當然了linux和windows的伺服器還是有差別的,上面給你說的只是最一般的方法
❾ mysql怎樣對用戶做安全性管理
你可以這樣操作。
如果MYSQL客戶端和伺服器端的連接需要跨越並通過不可信任的網路,那麼需要使用ssh隧道來加密該連接的通信。
使用setpassword語句來修改用戶的密碼,先「mysql-uroot」登陸資料庫系統,然後「mysql>updatemysql.usersetpassword=password(『newpwd』)」,最後執行「flushprivileges」就可以了。
Mysql需要提防的攻擊有,防偷聽、篡改、回放、拒絕服務等,不涉及可用性和容錯方面。對所有的連接、查詢、其他操作使用基於acl即訪問控制列表的安全措施來完成。也有一些對ssl連接的支持。
設置除了root用戶外的其他任何用戶不允許訪問mysql主資料庫中的user表;加密後存放在user表中的加密後的用戶密碼一旦泄露,其他人可以隨意用該用戶名/密碼相應的資料庫;
使用grant和revoke語句來進行用戶訪問控制的工作;
不要使用明文密碼,而是使用md5()和sha1()等單向的哈系函數來設置密碼;
不要選用字典中的字來做密碼;
採用防火牆可以去掉50%的外部危險,讓資料庫系統躲在防火牆後面工作,或放置在dmz區域中;
從網際網路上用nmap來掃描3306埠,也可用telnetserver_host3306的方法測試,不允許從非信任網路中訪問資料庫伺服器的3306號tcp埠,需要在防火牆或路由器上做設定;
為了防止被惡意傳入非法參數,例如whereid=234,別人卻輸入whereid=234or1=1導致全部顯示,所以在web的表單中使用」或」"來用字元串,在動態url中加入%22代表雙引號、%23代表井號、%27代表單引號;傳遞未檢查過的值給mysql資料庫是非常危險的;
在傳遞數據給mysql時檢查一下大小;
應用程序需要連接到資料庫應該使用一般的用戶帳號,開放少數必要的許可權給該用戶;
在各編程介面(cc++phpperljavajdbc等)中使用特定『逃脫字元』函數;在網際網路上使用mysql資料庫時一定少用傳輸明文的數據,而用ssl和ssh的加密方式數據來傳輸;
學會使用tcpmp和strings工具來查看傳輸數據的安全性,例如tcpmp-l-ieth0-w-srcordstport3306strings。以普通用戶來啟動mysql資料庫服務;
不使用到表的聯結符號,選用的參數–skip-symbolic-links;
確信在mysql目錄中只有啟動資料庫服務的用戶才可以對文件有讀和寫的許可權;
不許將process或super許可權付給非管理用戶,該mysqladminprocesslist可以列舉出當前執行的查詢文本;super許可權可用於切斷客戶端連接、改變伺服器運行參數狀態、控制拷貝復制資料庫的伺服器;
file許可權不付給管理員以外的用戶,防止出現loaddata『/etc/passwd』到表中再用select顯示出來的問題;
如果不相信dns服務公司的服務,可以在主機名稱允許表中只設置ip數字地址;
使用max_user_connections變數來使mysqld服務進程,對一個指定帳戶限定連接數;
grant語句也支持資源控制選項;
啟動mysqld服務進程的安全選項開關,–local-infile=0或1若是0則客戶端程序就無法使用localloaddata了,賦權的一個例子grantinsert(user)onmysql.userto『user_name』@'host_name』;若使用–skip-grant-tables系統將對任何用戶的訪問不做任何訪問控制,但可以用mysqladminflush-privileges或mysqladminreload來開啟訪問控制;默認情況是showdatabases語句對所有用戶開放,可以用–skip-show-databases來關閉掉。
碰到error1045(28000)accessdeniedforuser『root』@'localhost』(usingpassword:no)錯誤時,你需要重新設置密碼,具體方法是:先用–skip-grant-tables參數啟動mysqld,然後執行mysql-urootmysql,mysql>updateusersetpassword=password(『newpassword』)whereuser=』root』;mysql>flushprivileges;,最後重新啟動mysql就可以了。