一、MySQL服務(wù)器安全規(guī)范 1. 禁止應(yīng)用直連DB,一般通過代理訪問 2. 禁止DB公網(wǎng)訪問。 3. 禁止生產(chǎn)和辦公互通,需生產(chǎn)環(huán)境和辦公環(huán)境隔離。 4. Linux系統(tǒng)初始化安全選項: 1)、一些alias,寫入/etc/profile,防止誤操作 alias c='clear' alias cp='cp -i' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i' alias MySQL='MySQL -U' 其中MySQL -U,防止update和delete沒有指定條件,拒絕操作。 2)、刪除linux操作日志信息、MySQL操作歷史記錄,避免被拖庫。 rm .bash_history .MySQL_history ln -s /dev/null .bash_history ln -s /dev/null .MySQL_history 3)、避免"Too many open files" OS限制:cat /etc/security/limits.conf,MySQL用戶能夠打開65535個文件描述符 MySQL soft nofile 65535 MySQL hard nofile 65535 my.cnf參數(shù)修改: open_files_limit = 65535 innodb_open_files=65535 5. MySQL初始化配置安全選項: 1)、合理規(guī)劃目錄結(jié)構(gòu),日志目錄順序?qū)懡ㄗh機械盤(binlog/slowlog/relaylog),數(shù)據(jù)目錄隨機寫建議ssd。 2)、MySQL相關(guān)目錄設(shè)置專用MySQL組和用戶,MySQL后臺啟動方式不能以root來啟動,比如通過MySQL用戶 。 3)、設(shè)置bind-address為內(nèi)網(wǎng)本機IP。 4)、修改MySQL默認服務(wù)端口號,不推薦使用3306,不同業(yè)務(wù)設(shè)置不同的端口號。 5)、通過修改max_connections和max_user_connections來控制最大連接數(shù),過載保護。 6)、啟用safe-user-create,用戶不能用GRANT語句創(chuàng)建新用戶,除非用戶有MySQL.user表的INSERT權(quán)限。 7)、禁止local-infile=1,打開load data local file權(quán)限,避免數(shù)據(jù)泄漏和黑客攻擊。 8)、禁止skip-grant-tables啟動,防止MySQL繞過權(quán)限系統(tǒng) 9)、配置加上skip-name-resolve,防止主機名不被解析。 10)、禁止skip-networking,其它機器不能使用tcp/ip連接。 11)、禁止symbolic-links=1,關(guān)閉軟鏈接功能。
二、MySQL帳號管理安全策略和MySQL權(quán)限相關(guān)的系統(tǒng)表: 1. MySQL.USER表 2. MySQL.DB表 3. MySQL.TABLES_PRIV表 4. MySQL.COLUMNS_PRIV表 自上而下,逐級驗證,逐級進行賬戶權(quán)限的粒度控制 MySQL初始化: 1. 刪除線上密碼長度小于16的帳號。 2. 刪除非root賬戶 3. 刪除非localhost和127.0.0.1賬戶。 4. 刪除test數(shù)據(jù)庫 5. 賬號區(qū)分:監(jiān)控帳號、管理帳號、復(fù)制帳號、備份帳號、應(yīng)用帳號 1)、監(jiān)控帳號(localhost和127.0.0.1): GRANT SELECT,PROCESS,REPLICATION CLIENT 2)、備份帳號(localhost和127.0.0.1): GRANT SELECT,LOCK TABLES,RELOAD 3)、復(fù)制帳號(對應(yīng)主庫ip): GRANT REPLICATION SLAVE,REPLICATION CLIENT 4)、管理帳號(對應(yīng)代理ip): GRANT ALL PRIVILEGES 5)、root帳號 root密碼采用強密碼策略,至少32位隨機密碼,推薦使用pwgen和makepasswd來生成32位隨機密碼,包含大小寫、數(shù)字、字母、特殊字符。 root帳號只授權(quán)l(xiāng)ocalhost和127.0.0.1,不得授予%權(quán)限。 root帳號建議每3個月修改一次,不同實例,設(shè)置不同的root密碼。 6)、應(yīng)用帳號 a. 應(yīng)用帳號不得擁有Super、Create、Drop、File,Grant,Reload,Shutdown,Process等權(quán)限。 b. 最小權(quán)限原則:select,insert,update,delete權(quán)限,禁止應(yīng)用帳號權(quán)限設(shè)置為all。 c. 應(yīng)用帳號不得擁有系統(tǒng)數(shù)據(jù)庫(MySQL)的任何權(quán)限,不能使用*.*來授權(quán)。 d. 應(yīng)用帳號只給所屬應(yīng)用的數(shù)據(jù)庫授權(quán),只給其所屬應(yīng)用的IP或代理授權(quán)。 e. MySQL從庫必須添加read-only,只給select權(quán)限,嚴禁all,導(dǎo)致只讀失效。 f. 應(yīng)用帳號密碼策略同root,建議每3個月修改一次。