mysql(mariadb)安全性

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全部權限:

  1. usage
    連接(登陸)權限,建立一個用戶,就會自動授予其usage權限(默認授予)。
  2. select
    必須有select的權限,纔可以使用select table
  3. create
    必須有create的權限,纔可以使用create table
  4. create routine
    必須具有create routine的權限,纔可以使用{create |alter|drop} {procedure|function}
  5. create temporary tables(注意這裏是tables,不是table)
    必須有create temporary tables的權限,纔可以使用create temporary tables.
  6. create view
    必須有create view的權限,纔可以使用create view
  7. create user
    要使用CREATE USER,必須擁有mysql數據庫的全局CREATE USER權限,或擁有INSERT權限。
  8. insert
    必須有insert的權限,纔可以使用insert into ….. values….
  9. alter
    必須有alter的權限,纔可以使用alter table
  10. alter routine
    必須具有alter routine的權限,纔可以使用{alter |drop} {procedure|function}
  11. update
    必須有update的權限,纔可以使用update table
  12. delete
    必須有delete的權限,纔可以使用delete from ….where….(刪除表中的記錄)
  13. drop
    必須有drop的權限,纔可以使用drop database db_name; drop table tab_name;
  14. show database
    通過show database只能看到你擁有的某些權限的數據庫,除非你擁有全局SHOW DATABASES權限。
  15. show view
    必須擁有show view權限,才能執行show create view。
  16. index
    必須擁有index權限,才能執行[create |drop] index
  17. excute
    執行存在的Functions,Procedures
  18. lock tables
    必須擁有lock tables權限,纔可以使用lock tables
  19. references
    有了REFERENCES權限,用戶就可以將其它表的一個字段作爲某一個表的外鍵約束。
  20. reload
    必須擁有reload權限,纔可以執行flush [tables | logs | privileges]
  21. replication client
    擁有此權限可以查詢master server、slave server狀態。
  22. replication slave
    擁有此權限可以查看從服務器,從主服務器讀取二進制日誌。
  23. Shutdown
    關閉MySQL:
  24. grant option
    擁有grant option,就可以將自己擁有的權限授予其他用戶(僅限於自己已經擁有的權限)
  25. file
    擁有file權限纔可以執行 select ..into outfile和load data infile…操作,但是不要把file, process, super權限授予管理員以外的賬號,這樣存在嚴重的安全隱患。
  26. super
    這個權限允許用戶終止任何查詢;修改全局變量的SET語句;使用CHANGE MASTER,PURGE MASTER LOGS。
  27. process
    通過這個權限,用戶可以執行SHOW PROCESSLIST和KILL命令。默認情況下,每個用戶都可以執行SHOW PROCESSLIST命令,但是隻能查詢本用戶的進程。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章