mysql(mariadb)主要安全性。
1,新安裝mysql,運行mysql_secure_installation。
修改root密碼、刪除空密碼用戶、禁止root遠程連接、刪除測試庫。
$ Security in MySQL
Change the root password? [Y/n] y
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
2、修改mysql默認管理員賬號root。
MariaDB [mysql]> select * from user where user='root';
3、使用獨立用戶運行mysql服務。
系統默認使用mysql用戶運行mysql服務。
$ ps -ef |grep mariadb
mysql 13323 13166 0 Aug12 ? 00:00:28 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock
如用linux系統root運行服務,局域FILE權限的mysql用戶可以通過root權限創建文件。
#指定用戶運行
$ mysqld-safe --user=mysql &
4、遠程連接管理。
直接禁用遠程連接,或至少修改遠程端口3306。主要防火牆,selinux配置。
限制用戶連接數max_user_connections。
$ vi /etc/my.cnf
[mysqld]
max_user_connections=2 #分終端
5,mysql數據目錄權限
數據目錄所有者默認爲mysql,不允許未授權用戶讀取數據。
$ ls -l /var/lib/mysql/
total 28700
-rw-rw----. 1 mysql mysql 16384 Aug 13 19:10 aria_log.00000001
-rw-rw----. 1 mysql mysql 52 Aug 13 19:10 aria_log_control
-rw-rw----. 1 mysql mysql 18874368 Aug 13 19:10 ibdata1
-rw-rw----. 1 mysql mysql 5242880 Aug 13 19:11 ib_logfile0
-rw-rw----. 1 mysql mysql 5242880 Aug 7 19:37 ib_logfile1
drwx------. 2 mysql mysql 4096 Aug 7 19:37 mysql
srwxrwxrwx. 1 mysql mysql 0 Aug 13 19:11 mysql.sock
drwx------. 2 mysql mysql 4096 Aug 7 19:37 performance_schema
drwx------. 2 mysql mysql 33 Aug 12 00:11 testphp
drwx------. 2 mysql mysql 33 Aug 11 23:51 textphp
修改目錄所有者。
$ chown -R mysql.mysql /usr/local/mysql/
6,命令歷史記錄 ~/.mysql_history 。
history裏包含user,password信息,應該刪除。
$ rm ~/.mysql_history
$ sed -i '/user/'d
$ sed -i '/password/'d
$ ln -s /dev/null .mysql_history #不記錄命令
7,禁止load data loacl infile 讀取本地文檔。
$ cat /etc/my.cnf
[mysqld]
~~
local-infile=0
~~
8,MySQL服務器權限控制。
grant ,revoke管理對應用戶、數據庫、表的權限。
grant全部權限:
- usage
連接(登陸)權限,建立一個用戶,就會自動授予其usage權限(默認授予)。- select
必須有select的權限,纔可以使用select table- create
必須有create的權限,纔可以使用create table- create routine
必須具有create routine的權限,纔可以使用{create |alter|drop} {procedure|function}- create temporary tables(注意這裏是tables,不是table)
必須有create temporary tables的權限,纔可以使用create temporary tables.- create view
必須有create view的權限,纔可以使用create view- create user
要使用CREATE USER,必須擁有mysql數據庫的全局CREATE USER權限,或擁有INSERT權限。- insert
必須有insert的權限,纔可以使用insert into ….. values….- alter
必須有alter的權限,纔可以使用alter table- alter routine
必須具有alter routine的權限,纔可以使用{alter |drop} {procedure|function}- update
必須有update的權限,纔可以使用update table- delete
必須有delete的權限,纔可以使用delete from ….where….(刪除表中的記錄)- drop
必須有drop的權限,纔可以使用drop database db_name; drop table tab_name;- show database
通過show database只能看到你擁有的某些權限的數據庫,除非你擁有全局SHOW DATABASES權限。- show view
必須擁有show view權限,才能執行show create view。- index
必須擁有index權限,才能執行[create |drop] index- excute
執行存在的Functions,Procedures- lock tables
必須擁有lock tables權限,纔可以使用lock tables- references
有了REFERENCES權限,用戶就可以將其它表的一個字段作爲某一個表的外鍵約束。- reload
必須擁有reload權限,纔可以執行flush [tables | logs | privileges]- replication client
擁有此權限可以查詢master server、slave server狀態。- replication slave
擁有此權限可以查看從服務器,從主服務器讀取二進制日誌。- Shutdown
關閉MySQL:- grant option
擁有grant option,就可以將自己擁有的權限授予其他用戶(僅限於自己已經擁有的權限)- file
擁有file權限纔可以執行 select ..into outfile和load data infile…操作,但是不要把file, process, super權限授予管理員以外的賬號,這樣存在嚴重的安全隱患。- super
這個權限允許用戶終止任何查詢;修改全局變量的SET語句;使用CHANGE MASTER,PURGE MASTER LOGS。- process
通過這個權限,用戶可以執行SHOW PROCESSLIST和KILL命令。默認情況下,每個用戶都可以執行SHOW PROCESSLIST命令,但是隻能查詢本用戶的進程。