官术网_书友最值得收藏!

6.5 數據文件安全性

數據文件的安全性,是文件系統級的安全問題,如在多用戶服務器上,保護數據文件免遭到其他用戶的查看、修改、或刪除等。相對于數據庫系統本身的安全性,數據文件的安全性也稱為內部安全性。

6.5.1 保護哪些文件

在多用戶服務器上,如果其他用戶具有對MySQL數據文件的訪問權限,則會威脅數據的安全性,需要加以控制。具體來說,所要保護的數據文件包括:

1.數據庫文件

想要保證MySQL數據庫的安全性,必須首先保證數據庫文件的安全性。數據庫管理員要保證數據不能被別人隨便訪問,否則別人可以通過直接拷貝、修改、刪除數據文件,造成數據的泄露或破壞。

2.日志文件

除數據文件之外,還需要保證常規和更新日志的安全性,因為日志文件包含了一些與數據庫交互的查詢文本。有了這些文本,一方面,別人就可以監控發生數據庫中的所有事務處理;另一方面,像GRANT和SET PASSWORD這樣的查詢也在日志中,其中包含一些重要的信息(如登錄密碼等),也會因日志文件的丟失而泄露。

6.5.2 保護Linux文件

上面介紹了Windows操作系統如何控制數據文件的安全性,下面介紹在Linux/UNIX系統中的相應操作。

1.UNIX系統下數據目錄

首先來了解MySQL在LILNX/UNIX下的目錄。MySQL安裝好,運行mysql_db_install腳本就會建立數據目錄和初始數據庫。如果用MySQL源碼包安裝,而且安裝目錄是/usr/local/mysql,那么數據目錄一般會是/usr/local/mysql/var。

每個數據庫都包含一系列表,MySQL是用數據庫名在數據目錄建立一個文件夾,里面有數據表文件,并以表名作為文件名,擴展名分別為MYD、MYI、frm。

下面是一些不同版本MySQL的數據目錄默認訪問屬性:

(1)3.21.xx版本:數據目錄的屬性是775,任何本地用戶都可以讀數據目錄,數據庫文件不安全。

(2)3.22.xx版本:數據目錄的屬性是770,本地的同組用戶既能讀也能寫,數據文件也不安全。

(3)3.23.xx版本數據目錄的屬性是700,只有啟動數據庫的用戶才可以讀寫數據庫文件,這樣保證了本地數據文件的安全。

★ 注意 ★

對于上面所述Linux/UNIX文件系統的訪問屬性代碼所表示的含義,請參考Linux/UNIX相關內容,此處,不作額外介紹。

2.設置數據目錄訪問屬性

假設啟動MySQL數據庫的用戶是mysql,那么使用ls-l命令查看/usr/local/mysql/目錄的訪問權限,其結果可能如下所示:

    shell>ls -l /usr/local/mysql
        total 40
        drwxrwxr-x 2 root root 4096 Feb 27 20:07 bin
        drwxrwxr-x 3 root root 4096 Feb 27 20:07 include
        drwxrwxr-x 2 root root 4096 Feb 27 20:07 info
          …
        shell>ls -l /usr/local/mysql/var
        total 8
        drwx------ 2 mysql mysql 4096 Feb 27 20:08 mysql
        drwx------ 2 mysql mysql 4096 Feb 27 20:08 test
        shell>ls -l /usr/local/mysql/var/mysql
        total 104
        -rw------- 1 mysql mysql 0 Feb 27 20:08 columns_priv.MYD
        -rw------- 1 mysql mysql 1024 Feb 27 20:08 columns_priv.MYI
        …

想要改變目錄的訪問屬性,可以通過下面兩個命令來完成:

    % chown -R mysql.mysql /usr/local/mysql/var
    % chmod -R go-rwx /usr/local/mysql/var

另外,日志文件也不能忽視,包括shell的日志和MySQL的日志。

(1)shell日志

有些用戶為了便于登錄或備份數據庫,有時會在命令行參數里直接帶數據庫的密碼,如:

    % /usr/local/mysql/bin/mysqldump -uroot -ptest test>test.sql
    % /usr/local/mysql/bin/mysql -uroot -ptest

這些命令會被shell記錄在日志中,比如bash會寫入用戶目錄的.bash_history文件,如果這些文件丟失,那么就會泄露數據庫密碼。

(2)MySQL日志

登錄到MySQL后,用戶提交的SQL命令也會被MySQL記錄,并存放在在用戶目錄的.mysql_history文件里。

為使這兩個文件不記錄數據操作,可做如下操作:

    % rm .bash_history .mysql_history
    % ln -s /dev/null .bash_history
    % ln -s /dev/null .mysql_history

上面兩條命令把兩個日志文件鏈接到/dev/null,這樣操作就不會被記錄了。

6.5.3 保護Windows文件

雖然本書介紹的是LAMP開發,但是一部分讀者可能在Windows下進行開發,因此也介紹如何在Windows操作系統中保護MySQL數據文件。不妨假設數據文件目錄為“C:\mysql\data”,然后通過具體示例來說明如何保證該目錄的安全。

假設數據庫管理員只希望Windows的系統管理員用戶組(Administrators Group)可以讀取C:\mysql\data下的文件,用戶Super對該目錄有所有的權限,而其他用戶和組只能查看其中的文件和子目錄,而不能讀取數據,則可以通過如下步驟實現這個要求:

(1)用具有系統管理員身份的用戶登錄Windows,在文件夾“C:\mysql\data”上單擊右鍵,選擇“屬性”命令,在打開的對話框中選擇“安全”選項卡。

(2)除Administrators、Everyone以及Super用戶所在的組之外,刪除其他組,如圖6-1所示。

圖6-1 刪除不能訪問文件夾的用戶組

(3)設置Administrators組的訪問權限,使其只能讀,如圖6-2所示。

圖6-2 設置Administrators組的訪問權限

(4)同設置Administrators組的訪問權限,設置Everyone組的訪問權限,使其只能瀏覽本目錄:單擊Everyone組,并勾掉相應的權限選項。

★ 注意 ★

在設定Everyone的權限的時候,需要將下面的“允許將來自父系的可繼承權限傳遞給該對象”前面的選擇取消掉,如圖6-3所示。這時,屏幕上會彈出一個安全提示,這里選擇“復制”或者“刪除”都可以,意思是是否保留或者刪除“從父系繼承的權限”,再點“刪除”。

圖6-3 設置Everyone組的權限繼承性

(5)設置Super用戶的訪問權限,使其只能完全控制(讀、寫、改)目錄。首先添加Super用戶,如圖6-4所示,從列表中,選擇“Super”用戶,然后單擊“添加”按鈕,然后設定其訪問權限為完全控制。

圖6-4 添加Super用戶

(6)單擊“確定”按鈕。

這樣,除Super之外的用戶就不能寫這個文件夾,除Administrators之外的用戶不能讀,而只能瀏覽目錄。也可以對這些權限作進一步限制,在此不再贅述。

★ 注意 ★

Windows98沒有考慮文件的安全性問題,如果多個用戶使用一臺電腦,那么一個人的文件,其他人也可以打開、復制、修改或刪除。在Windows NT以及后續版本的系統中,則考慮了這個問題。

Windows NT采用的NTFS文件系統,在安裝Windows NT的時候安裝程序提示是否要將磁盤分區轉換成NTFS格式。只有磁盤采用了NTFS的文件系統,才能給目錄、文件提供安全設置。

主站蜘蛛池模板: 洛南县| 大洼县| 连江县| 湖北省| 潢川县| 交城县| 临清市| 图木舒克市| 枣阳市| 乐都县| 昭平县| 句容市| 镇坪县| 黑山县| 巩义市| 阿拉尔市| 北票市| 柳江县| 闻喜县| 筠连县| 五大连池市| 馆陶县| 广平县| 江门市| 昌吉市| 宜兴市| 青浦区| 遵义市| 桃源县| 连山| 南充市| 洪雅县| 思南县| 依兰县| 河南省| 同心县| 深泽县| 罗平县| 竹溪县| 余干县| 普格县|