《Oracle MySQL云服務上的MySQL企業版審計》要點:
本文介紹了Oracle MySQL云服務上的MySQL企業版審計,希望對您有用。如果有疑問,可以聯系我們。
Oracle Cloud Service似乎是唯一個即使你只提交了創建RDS服務的請求,也會自動幫你創建一個虛擬主機,并且提供主機登錄權限的服務提供商,也許這就是Oracle一直在宣稱的IaaS+PaaS的整合.
在創建MySQL Cloud Service時,會要求提供一個SSH登錄密鑰,所有的Oracle云服務主機登錄用戶都是opc,因此在服務創建完畢,收到通知郵件之后,就可以通過以下命令登錄到云主機上.
ssh -i id_rsa_oracle_cloud_enmotech opc@your_host_ip
登錄到主機以后,屏幕歡迎詞是個小驚喜,Oracle貼心得顯示了MySQL運行狀態和存儲使用量的提示.
在比較了多方的RDS之后,Oracle MySQL Cloud Service確實如一直以來宣傳的那樣,提供了最多的安全選件功能,如果我們用MySQL Workbench登錄到數據庫中,在Server Status頁面可以看到:SSL連接,PAM驗證,密碼校驗,數據庫審計等多種安全功能全部是開啟的.
而與之相比,阿里云MySQL RDS提供的安全功能就少的可憐了.說少不合適,是一項安全功能都沒開啟.
Oracle對于數據庫安全性的看重確實超越了大多數數據庫提供商,而這也帶來了一些小麻煩.
在創建MySQL云服務的時候,需要指定數據庫root用戶的密碼,這個密碼有比較強的安全要求,需要有大寫、小寫英文字母,有數字,同時還需要有特殊字符(比如#).因此在后續創建Login Path時,在mysql_config_editor命令提示輸入密碼的時候,需要在密碼前后加上雙引號(比如”Passw#rd”),否則會一直出現拒絕訪問的提示.
opc用戶沒有辦法直接登錄MySQL,需要切換到oracle用戶
使用密碼直接登錄是沒有問題的
創建Login Path,仍然輸入上述一樣的密碼
[oracle@mysql-cloud-mysql-1 ~]$ mysql_config_editor set --host=localhost - -user=root --password Enter password:
檢查確認Login Path已經創建成功
直接登錄報錯
[oracle@mysql-cloud-mysql-1 ~]$ mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
在密碼前后加上雙引號重新創建Login Path
再次登錄,成功
在進行Audit功能的檢查之前,對于默認的mysql命令行提示只有mysql> 這樣簡陋的顯示不能忍,要加上當前登錄的用戶和數據庫名稱.在oracle用戶的.my.cnf下增加以下行.
[mysql] prompt=\\u@\\h [\\d]>\\_ 再次登錄,mysql命令行的提示就比較順眼了.接下來進入本文的正題,在Oracle MySQL Cloud Service中默認是如何設置Audit的? 首先先檢查一下audit_log的相關參數設置.
那么audit_log_file=audit.log表示仍然使用了默認的名字,到MySQL的數據文件目錄中檢查一下audit.log文件的存在.
![]()
這里可以看到總共的audit日志已經有1.9GB之大,在第一個audit.log達到audit_log_rotate_on_size參數設置的大小之后,自動切換成了新的audit.log.
題外話,之所以有這么巨大的audit.log,是由于啟用了MySQL Enterprise Monitor,不斷地記錄了Monitor進程的登錄和退出.
為了方便后面觀察audit.log,先將Monitor停止.
接下來進行一些常規操作,并觀察audit.log文件的輸出內容.
1. 用root用戶登錄,在audit文件中顯示一條Connect類型的記錄.TIMESTAMP記錄了時間,USER標簽記錄了登錄的用戶,HOST標簽記錄了登錄的機器,COMMAND_CLASS為connect.
2. 嘗試直接CTAS一張測試表,在enforce_gtid_consistency=ON時會報1786錯誤,這是GTID特性決定的.
在audit.log中也記錄下了這次報錯的操作,STATUS標簽為錯誤代碼1786,STATUS_CODE標簽值為1表示這條SQL沒有成功執行,SQLTEXT標簽記錄了整個SQL語句.
3. 下面的三條語句,select,create table,insert均沒有在audit.log中記錄下來.
這樣的行為是由audit_log_statement_policy=ERRORS參數決定的,默認只記錄報錯的SQL,而不會記錄所有的執行語句.
4. 將audit_log_statement_policy參數修改為ALL,再執行同樣的select語句.
可以發現audit.log中已經有記錄了.
結論
在Oracle MySQL Cloud Service中默認會啟動MySQL Enterprise Audit組件,并且設置即記錄用戶登錄又記錄執行語句(audit_log_policy=ALL),用戶登錄情況則不管登錄成功還是失敗每次都記錄(audit_log_connection_policy=ALL),而執行語句則只記錄執行失敗的語句(audit_log_statement_policy=ERRORS).
作者:張樂奕
文章來自微信公眾號:數據和云
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/4217.html