天天看點

MySQL 基礎---資料庫安全性機制

  1. MySQL軟體所提供的權限(mysql.user、mysql.db、mysql.host)

    (1) 系統表mysql.user

    user權限表中字段分為四類: 使用者字段、權限字段、安全字段和資源控制字段。

  • 使用者字段
MySQL 基礎---資料庫安全性機制

使用者字段.png

  • 權限字段
MySQL 基礎---資料庫安全性機制

權限字段.png

  • 安全字段
MySQL 基礎---資料庫安全性機制

安全字段.png

# 檢視是否支援ssl标準
 show variables like 'have_openssl';
           
  • 資源控制字段
MySQL 基礎---資料庫安全性機制

資源控制.png

系統表mysql.user中的所有資源字段的預設值為0,表示沒有任何限制。

(2) 系統表mysql.db和mysql.host

在系統資料庫mysql中,權限表除了表user外,還有表db和表host,這兩張表都存儲了某個使用者對資料庫的權限。

  • mysql.db表
MySQL 基礎---資料庫安全性機制

mysql.db表.png

mysql.host表

MySQL 基礎---資料庫安全性機制

mysql.host表.png

MySQL 基礎---資料庫安全性機制

(3)其他權限表

在系統資料庫mysql中,除了上述權限表外,還有表tables_priv和columns_priv,其中标tables_priv用來實作單個表的權限設定,表columns_priv用來實作單個字段列的權限設定。

  • 系統表mysql.tables_priv表結構
    MySQL 基礎---資料庫安全性機制
    mysql.tables_priv表結構.png
    MySQL 基礎---資料庫安全性機制
  • 系統表mysql.columns_priv的表結構
MySQL 基礎---資料庫安全性機制

columns_priv的表結構png

  1. 使用者機制

    (1) 登入和退出MySQL軟體的完整指令

# 登入
mysql -h 127.0.0.1 -u root -p
# 退出(\q)
exit|quit
           

(2) 建立普通使用者賬戶

  • 執行CREATE USER語句來建立使用者賬戶
create user 'mazaiting'@'localhost' identified by '123456';
           
  • 執行INSERT語句來建立使用者
insert into user(host,user,password,ssl_cipher,x509_issuer,x509_subject)
    values('localhost', 'linghaoyu', password('linghaoyu'),'','','');
# 使建立使用者生效
flush privileges;
           
  • 執行GRANT語句來建立使用者
grant select on company.t_dept
          to 'wangxingqin'@'localhost' identified by 'wangxingqin';
           

(3) 利用超級權限使用者root修改使用者賬戶密碼

  • 修改超級權限使用者賬戶密碼
# 通過mysqladmin指令修改root使用者密碼
mysqladmin -u root -p password "123456"
# 通過SET指令修改密碼
set password=password("123456");
# 更新系統表mysql.user資料記錄修改root使用者密碼
update user set password=password("123456")
         where user="root" and host="localhost";
           

(4) 利用擁有超級權限使用者root修改普通使用者賬戶密碼

# 建立使用者
 grant select,create,drop on *.*
          to 'mazaiting'@'localhost' identified by 'mazaiting'
          with grant option;
# 通過grant指令修改使用者密碼
 grant select,create,drop on *.*
          to 'mazaiting'@'localhost' identified by '123456';
# 通過set指令修改使用者密碼
set password for 'mazaiting'@'localhost'=password("123456");
# 更新系統表mysql.user資料記錄修改使用者密碼
update user set password=password("mazaiting")
         where user='mazaiting' and host='localhost';
# 登入目前使用者,并使用set指令修改密碼
set password=password("123456");
           

(5) 删除普通使用者賬戶

  • 通過DROP USER語句删除普通使用者
drop user 'mazaiting'@'localhost';
           
  • 删除系統表mysql.user資料記錄實作删除使用者賬号
# 選擇mysql資料庫
 use mysql;
# 删除使用者
 delete from user where user='mazaiting' and host='localhost';
           
  1. 權限管理

    (1) 對使用者進行授權

# 建立使用者
grant select,create,drop on *.*
          to 'mazaiting'@'localhost' identified by 'mazaiting'
          with grant option;
# 查詢表資料記錄
 select host,user,password,select_priv,update_priv,grant_priv,drop_priv
          from mysql.user
          where user='mazaiting' \G

           

(2) 檢視使用者所擁有權限

show grants for 'mazaiting'@'localhost' \G
           

(3) 收回使用者所擁有權限

# 回收使用者的查詢權限
revoke select on *.* from 'mazaiting'@'localhost';
# 回收使用者的全部權限
 revoke all privileges, grant option
          from 'mazaiting'@'localhost';