一身份鑒別
MySQL和均可以實現(xiàn)身份鑒別功能。通過設(shè)置數(shù)據(jù)庫基本上能夠?qū)崿F(xiàn)能夠滿足《信息系統(tǒng)安全等級保護基本要求》第三級身份鑒別中大部分要求,但是對于“f 項應(yīng)采用兩種或兩種以上組合的鑒別技術(shù)對管理用戶進行身份鑒別”,需要使用第三方的身份鑒別技術(shù),如:口令、數(shù)字證書、生物特征等2。
(一)、MySQL數(shù)據(jù)庫
MySQL數(shù)據(jù)庫在安裝后默認存在mysql數(shù)據(jù)庫,該數(shù)據(jù)庫為系統(tǒng)表所在的數(shù)據(jù)庫,所有用戶記錄在mysql數(shù)據(jù)庫的user三個權(quán)限表的用戶列(包括host、user、三個字段)。
1)對于身份認證MySQL是通過IP地址和用戶名進行聯(lián)合確認的,也就是說“用戶名@IP”用來身份認證的唯一標識;
2)安全配置時盡量避免采用默認的用戶名root,建議對默認用戶名進行重命名,這樣增加鑒別信息被猜測的難度;
3)mysql數(shù)據(jù)庫默認無法實現(xiàn)密碼更改周期和密碼復(fù)雜度要求,需要管理員定期更改口令的復(fù)雜度,可以通過如下命令設(shè)置密碼;
除了密碼認證外,MySQL還支持UNIX域套接字,可以在配置文件中指定套接字文件的路徑修改數(shù)據(jù)庫最大連接數(shù),如—=/tmp/mysql.sock,當數(shù)據(jù)庫啟動后可以使用UNIX套接字的方式進行認證。
4)針對以后的版本建議禁止使用參數(shù),--old-選項的目的是當服務(wù)器生成長密碼哈希值時,允許你維持同4.1之前的客戶端的向后兼容性。在.1版本以后建議禁止使用該參數(shù)。
5)MySQL數(shù)據(jù)庫也支持SSL遠程登錄,如果采用本地管理方式則不需要考慮遠程連接安全,如果采用遠程管理則需要SSL支持。
6)確保所有的身份鑒別的密碼具有較強的密碼復(fù)雜度。
最后,MySQL數(shù)據(jù)庫本身不支持登錄次數(shù)限制,無法實現(xiàn)針對用戶的鎖定,具有登錄的連接超時設(shè)置。
(二)、數(shù)據(jù)庫
支持豐富的認證方法:信任認證、口令認證、PAM認證等多種認證方式。 默認配置只監(jiān)聽本地端口,無法通過遠程TCP/IP連接數(shù)據(jù)庫。需要修改 .conf 中的 字段修改監(jiān)聽端口,使其支持遠程訪問。例如\ = '*'表示監(jiān)聽所有端口。
線上重要數(shù)據(jù)庫禁止使用trust方式進行認證,必須使用md5方式。
重命名數(shù)據(jù)庫超級管理員賬戶為,此帳號由DBA負責人保管,禁止共用;
配置數(shù)據(jù)庫客戶端支持SSL連接的配置。客戶端認證是由一個配置文件控制的,存放在數(shù)據(jù)庫集群的數(shù)據(jù)目錄里[3]。
用生成密鑰對,創(chuàng)建一個自簽名的服務(wù)器密匙(.key)和證書(.crt);
數(shù)據(jù)庫的配置主要通過兩個配置文件.conf和.conf來實現(xiàn);
開啟TCP/IP連接:將.conf參數(shù)設(shè)置為true;
開啟SSL:將.conf參數(shù)ssl設(shè)置為true;
強制局域網(wǎng)內(nèi)的所有主機以任何中存在的用戶通過TCP+SSL的方式連接到;
在.conf文件中增加記錄: all all 192.168.54.1/32 md5。
中還可以通過系統(tǒng)表的字段實現(xiàn)用戶口令失效的時間(只用于口令認證)。
二訪問控制
MySQL和均可以實現(xiàn)訪問控制功能。
(一)、MySQL數(shù)據(jù)庫
MySQL權(quán)限系統(tǒng)通過兩個階段進行權(quán)限認證:
對連接的用戶進行身份認證,合法的用戶通過認證,不合法的用戶拒絕連接;
對通過認證的合法用戶賦予相應(yīng)的權(quán)限,用戶可以在這些權(quán)限范圍內(nèi)對數(shù)據(jù)庫做相應(yīng)的操作。MySQL中主要權(quán)限存儲在MySQL系統(tǒng)庫的user、host、db三個系統(tǒng)表中。這三個表中包括權(quán)限列,其中權(quán)限列包括普通權(quán)限和管理權(quán)限。普通權(quán)限主要用于數(shù)據(jù)庫的操作,比如、等;而管理權(quán)限主要用來對數(shù)據(jù)庫進行管理的操作,比如、等。表1說明了mysql權(quán)限系統(tǒng)表
當用戶進行連接的時候,權(quán)限表的存取過程有以下兩個階段。
先從user表中的host、user和這三個字段中判斷連接的IP、用戶名和密碼是否存在于表中,如果存在,則通過身份驗證,否則拒絕連接。
如果通過身份驗證,則按照以權(quán)限表的順序得到數(shù)據(jù)庫權(quán)限:user?db??,即先檢查全局權(quán)限表user,如果user中對應(yīng)的權(quán)限為Y,則此用戶對所有數(shù)據(jù)庫的權(quán)限都為Y,將不再檢查db, ,;如果為N,則到db表中檢查此用戶對應(yīng)的具體數(shù)據(jù)庫,并得到db中為Y的權(quán)限;如果db中為N,則檢查中此數(shù)據(jù)庫對應(yīng)的具體表,取得表中的權(quán)限Y,以此類推。這幾個權(quán)限表中,權(quán)限范圍一次遞減,全局權(quán)限覆蓋局部權(quán)限。
通過上述介紹,可知在配置權(quán)限時需要根據(jù)數(shù)據(jù)庫業(yè)務(wù)使用的情況配置合理的權(quán)限。
1)盡量最小化權(quán)限的配置,可以通過如下命令查看權(quán)限。
2)業(yè)務(wù)系統(tǒng)在使用時,也可以通過視圖控制對基礎(chǔ)表的訪問;
3)通過合理的權(quán)限配置進行訪問控制外,還需要將DBA管理和應(yīng)用賬號嚴格分離,不同應(yīng)用單獨賬號,刪除數(shù)據(jù)庫相關(guān)的歷史操作記錄,避免信息泄露。
4)對于MySQL數(shù)據(jù)庫自身不具備強制訪問控制(MAC),強制訪問控制(MAC)是系統(tǒng)強制主體服從訪問控制策略。與自主訪問控制(DAC)基于系統(tǒng)實現(xiàn)身份認證及其到系統(tǒng)資源的介入授權(quán)方式,共同保證用戶的權(quán)限。
a、創(chuàng)建系統(tǒng)表:為了實現(xiàn)可定制強制訪問控制,需定義用戶的強制訪問權(quán)限管理表,系統(tǒng)需要對MySQL原有的數(shù)據(jù)字典進行改造[3],增加系統(tǒng)表。
b、修改用戶認證邏輯 在中修改用戶驗證邏輯,檢查強制訪問權(quán)限管理表,是否符合用戶認證要求。
(二)、數(shù)據(jù)庫
將所有的數(shù)據(jù)庫對象都存放在系統(tǒng)表空間,所有的系統(tǒng)表都以pg開頭。采用基于角色的訪問控制機制,通過角色機制,簡化了用戶和權(quán)限的關(guān)聯(lián)性。系統(tǒng)中的權(quán)限分為兩種:系統(tǒng)權(quán)限和對象權(quán)限。
系統(tǒng)權(quán)限是指系統(tǒng)規(guī)定用戶使用數(shù)據(jù)庫的權(quán)限(如連接數(shù)據(jù)庫、創(chuàng)建數(shù)據(jù)庫、創(chuàng)建用戶等),系統(tǒng)角色屬性有LOGIN、、、、、等。
對象權(quán)限是指在表、序列、函數(shù)等數(shù)據(jù)庫對象上執(zhí)行特殊動作的權(quán)限,其權(quán)限類型有、、、、、、、、、和usage等。
有關(guān)角色屬性信息可以在系統(tǒng)表中找到。另外是系統(tǒng)表公開課度部分的視圖。系統(tǒng)表存儲了角色之間的成員關(guān)系
1)根據(jù)最小權(quán)限要求給用戶配置角色和權(quán)限。
為了保護數(shù)據(jù)安全,當用戶對某個數(shù)據(jù)庫對象進行操作之前,必須檢查用戶在對象上的操作權(quán)限。訪問控制列表(ACL)是對象權(quán)限管理和權(quán)限檢查的基礎(chǔ),在通過操作ACL實現(xiàn)對象的訪問控制管理。所有表的基本定義保存在系統(tǒng)表中,除了包括表,視圖、序列和索引(與其他許多系統(tǒng)不同,PG的索引也被視作一個類,事實上索引項無論在邏輯組成還是物理結(jié)構(gòu)上都類似一個表的元組。)等對象的基本定義外,它的屬性中為每個對象維護一個ACL[5]。是支持的數(shù)組屬性,該數(shù)組成員是抽象的數(shù)據(jù)類型。這些作為對象訪問控制權(quán)限的ACE(ACL是存儲控制箱( ,ACE)的集合,每個ACL實際上是一個由多個構(gòu)成的鏈表,ACE由數(shù)據(jù)庫對象和權(quán)限列表構(gòu)成,記錄著可訪問兌現(xiàn)的用戶或者執(zhí)行單元(進程、存儲過程等))共同組成對象的ACL。
ACL權(quán)限信息
2)根據(jù)系統(tǒng)提示可以查看對象的ACL列表,已確定用戶對對象的訪問權(quán)限。
3) 通過合理的權(quán)限配置進行訪問控制外,還需要將DBA管理和應(yīng)用賬號嚴格分離,不同應(yīng)用單獨賬號修改數(shù)據(jù)庫最大連接數(shù),刪除數(shù)據(jù)庫相關(guān)的歷史操作記錄,避免信息泄露。
4)對進行源代碼修改以實現(xiàn)強制訪問控制(MAC),SQL語句在經(jīng)過DDL與DML處理時,需要進行MAC檢查,通過檢查的數(shù)據(jù)才能輸出給用戶,否則只能返回錯誤信息[5]。
三安全審計
商業(yè)數(shù)據(jù)庫均有安全審計功能,通過相關(guān)配置,能夠?qū)ο到y(tǒng)的重要事件進行安全審計目前MySQL數(shù)據(jù)庫具有基本的日志功能,通過日志數(shù)據(jù)挖掘可以實現(xiàn)安全審計功能,但其實現(xiàn)起來較為復(fù)雜。具備了良好的審計功能。
(一)、MySQL數(shù)據(jù)庫
MySQL日志主要包含:錯誤日志、查詢?nèi)罩尽⒙樵內(nèi)罩尽⒍M制日志等,日志主要功能如下:
通過上述描述可以看出,對于MySQL來說可以通過日志分析來實現(xiàn)數(shù)據(jù)庫審計功能,但是這樣的工作量對DBA來說比較繁瑣,也不利于集中控制數(shù)據(jù)庫產(chǎn)生的安全審計記錄。MySQL企業(yè)級已經(jīng)實現(xiàn)了針對MySQL的安全審計功能,但開源MySQL數(shù)據(jù)庫沒有實現(xiàn)安全審計功能。要實現(xiàn)MySQL數(shù)據(jù)庫的安全審計功能,需要對MySQL源代碼進行修改,目前已經(jīng)有成熟的插件來實現(xiàn)MySQL數(shù)據(jù)庫審計功能。
1)MySQL審計插件:數(shù)據(jù)庫管理系統(tǒng)是MySQL的一個分支,其審計插件能工作在、mysql和 ,通過安裝審計插件來實現(xiàn)MySQL的審計功能。
a、安裝審計插件,將.so 文件拷貝到MySQL/ 下的 lib/ 目錄,并通過如下命令激活該插件:
1
mysql> '.so';
b、修改mysql配置文件f的審計參數(shù)
server_audit =FORCE_PLUS_PERMANENT server_audit_events ='CONNECT,QUERY,TABLE' server_audit_logging =ON server_audit_incl_users =root server_audit_file_rotate_size = 1G server_audit_file_path = /usr/local/mysql/mysql_logs/auditlog/server_audit.log
c、查看審計配置參數(shù),可以通過下面的命令查詢審計參數(shù)配置情況。
1
mysql> SHOW LIKE '%audit%';
審計配置參數(shù)
表1:數(shù)據(jù)庫安全審計配置參數(shù)
配置參數(shù)參數(shù)說明
啟動或關(guān)閉審計
指定記錄事件的類型,可以用逗號分隔的多個值(,query,table),如果開啟了查詢緩存(query cache),查詢直接從查詢緩存返回數(shù)據(jù),將沒有table記錄
限制日志文件的大小
指定日志文件的數(shù)量,如果為0日志將從不輪轉(zhuǎn)
ers
指定哪些用戶的活動將記錄,將不受此變量影響,該變量比ers優(yōu)先級高
2)通過設(shè)置嚴格的訪問控制權(quán)限確保審計日志的安全性。
3)通過對審計日志的格式等進行分析實現(xiàn)審計報表的輸出。
(二)、數(shù)據(jù)庫
審計是值記錄用戶的登錄退出以及登錄后在數(shù)據(jù)庫里的行為操作,可以根據(jù)安全等級不一樣設(shè)置不一樣級別的審計。默認需設(shè)置具有如下的安全配置參數(shù):
表2:數(shù)據(jù)庫安全審計配置參數(shù)
配置參數(shù)參數(shù)說明
是否開啟日志收集開關(guān),默認off,開啟要重啟DB
日志記錄類型,默認是,只記錄錯誤輸出
日志路徑,默認是$/
日志名稱,默認是-%Y-%m-%d_%H%M%S.log
用戶登陸時是否寫入日志,默認off
用戶退出時是否寫入日志,默認off
保留單個文件的最大時長,默認是1d
保留單個文件的最大尺寸,默認是10MB
日志里分成了3類,通過參數(shù)來控制,默認的參數(shù)值是none,即不記錄,可以設(shè)置ddl(記錄,drop和alter)、mod(記錄ddl+,,和)和all(mod+)。
1)配置、、和 參數(shù),確保登錄連接、退出連接和用戶DDL、DML等行為能被記錄;
2)配置日志文件名稱、大小、保留周期等滿足相關(guān)要求;
3)確保所有的審計記錄的權(quán)限滿足操作系統(tǒng)的權(quán)限要求。
四入侵防范
針對數(shù)據(jù)庫的安全防范主要體現(xiàn)在數(shù)據(jù)庫補丁更新,特定函數(shù)的使用等方面。
(一)、MySQL數(shù)據(jù)庫
嚴格控制操作系統(tǒng)賬號和權(quán)限
鎖定mysql用戶不能登錄;
其他任何用戶都采用獨立的賬號登錄,管理員通過mysql專有用戶管理MySQL,或者通過su到mysql用戶下進行管理。
mysql用戶目錄下,除了數(shù)據(jù)文件目錄,其他文件和目錄屬主都改為root。
刪除匿名賬號;
不要把file、或super權(quán)限授予管理員以外的賬號;
進制load data local文件讀取操作的使用,避免讀取操作系統(tǒng)的重要文件到數(shù)據(jù)庫表中;
在已有的生產(chǎn)庫上建議進制使用safe-user-參數(shù)的使用,避免用戶使用grant語句創(chuàng)建新用戶;
及時更新MySQL安全補丁。
(二)、數(shù)據(jù)庫
嚴格控制操作系統(tǒng)的賬號和權(quán)限,確保啟動進程具有最小的權(quán)限;
嚴格控制數(shù)據(jù)庫安裝目錄的權(quán)限,除了數(shù)據(jù)文件目錄,其他文件和目錄屬主都改為root。
及時更新數(shù)據(jù)庫bug和安全補丁。
五資源控制
資源控制主要保證數(shù)據(jù)庫的資源不被非法的占用。
(一)、MySQL數(shù)據(jù)庫
MySQL中主要權(quán)限存儲在MySQL系統(tǒng)庫的user系統(tǒng)表的資源列中可以控制用戶連接數(shù)、最大請求數(shù)、最大更新數(shù)、最大連接等信息。但最大用戶連接數(shù)為較長用的資源控制項,其他選項需更具數(shù)據(jù)的使用情況進行安全配置。
針對每個用戶限制參數(shù),即限制用戶最大連接數(shù)。
針對每個用戶限制其來源地址限制,即每個用戶僅允許唯一的IP地址訪問,必要時禁止遠程連接mysql ,設(shè)置skip-參數(shù)。
(二)、數(shù)據(jù)庫
對于資源限制主要體現(xiàn)在用戶最大并發(fā)連接數(shù)的限制上。具體可以進行如下安全配置。
1)數(shù)據(jù)庫可以進行嚴格的地址限制,確保用戶來源可信。
2)配置用戶最大并發(fā)連接數(shù)量。
3)具有默認的連接超時策略。
長按公眾號,可“置頂”
----------------------------------
要聞、干貨、原創(chuàng)、專業(yè)