安全管理——存取控制&使用者管理

2020-10-14 12:01:12

1. 存取控制

存取控制:給使用者提供他們所需的存取權,且僅提供他們所需的存取權。

管理存取控制需要建立和管理使用者賬號。

MySQL建立一個名為root的使用者賬號,它對整個MySQL伺服器具有完全的控制。應該嚴肅對待root登入的使用。僅在絕對需要時使用它(或許在你不能登入其他管理賬號時使用)。不應該在日常的MySQL操作中使用root。


2. 管理使用者

MySQL使用者賬號和資訊儲存在名為mysql的MySQL資料庫中。一般不需要直接存取mysql資料庫和表,但有時需要直接存取。需要直接存取它的時機之一是在需要獲得所有使用者賬號列表時,如下:

在這裡插入圖片描述
分析:mysql資料庫有一個名為user的表,它包含所有使用者賬號。user表有一個名為user的列,它儲存使用者登入名。

2.1 建立使用者賬號

為了建立一個新使用者賬號,使用create user語句:

在這裡插入圖片描述
分析:在建立使用者賬號時不一定需要口令,不過這個例子用IDENTIFIED BY 'p@$$wOrd’給出了一個口令。

為重新命名一個使用者賬號,使用rename user語句:

在這裡插入圖片描述


2.2 刪除使用者賬號

為了刪除一個使用者賬號(以及相關的許可權),使用drop user語句:

在這裡插入圖片描述


2.3 設定存取許可權

為看到賦予使用者賬號的許可權,使用show grants for語句:

在這裡插入圖片描述

分析:輸出結果顯示使用者bforta有一個許可權USAGE ON .。USAGE表示根本沒有許可權,所以,此結果表示在任意資料庫和任意表上對任何東西沒有許可權。

為設定許可權,使用grant語句。grant要求你至少給出以下資訊:

  • 要授予的許可權;
  • 被授予存取許可權的資料庫或表;
  • 使用者名稱。

在這裡插入圖片描述

分析:此grant允許使用者在crashcourse.*(crashcourse資料庫的所有表)上使用select。通過只授予select存取許可權,使用者bforta對crashcourse資料庫中的所有資料具有唯讀存取許可權。

grant的反操作為revoke,用它來複原特定的許可權。

在這裡插入圖片描述

grant和revoke可在幾個層次上控制存取許可權:

  • 整個伺服器,使用grant all和revoke all;
  • 整個資料庫,使用on database.*;
  • 特定的表,使用on database.table;
  • 特定的列;
  • 特定的儲存過程。

使用grant和revoke可以授予或復原的每個許可權如下表:

在這裡插入圖片描述在這裡插入圖片描述在這裡插入圖片描述
可通過列出各許可權並用逗號分隔,將多條grant語句串在一起,如下所示:

在這裡插入圖片描述


2.4 更改口令

為了更改使用者口令,可使用set password語句:

在這裡插入圖片描述

分析:set password更新使用者口令。新口令必須傳遞到password()函數進行加密。

在不指定使用者名稱時,set password更新當前登入使用者的口令。
在這裡插入圖片描述


USE mysql;
SELECT USER FROM USER;

-- 建立一個新使用者賬號
CREATE USER ben IDENTIFIED BY 'p@$$wOrd';
SELECT USER FROM USER;

-- 重新命名一個使用者賬號
RENAME USER ben TO bforta;

-- 刪除一個使用者賬號(以及相關的許可權
DROP USER bforta;

-- 為了看到賦予使用者賬號的許可權
SHOW GRANTS FOR bforta;

-- grant的用法
GRANT SELECT ON crashcourse.* TO bforta;
SHOW GRANTS FOR bforta;

-- revoke用來複原特定的許可權
REVOKE SELECT ON crashcourse.* FROM bforta;

-- 可通過列出各許可權並用逗號分隔,將多條grant語句串在一起:
GRANT SELECT, INSERT ON crashcourse.* TO bforta;

-- 新口令加密
SET PASSWORD FOR bforta = PASSWORD ('n3w p@$$wOrd');

-- 在不指定使用者名稱時,SET PASSWORD更新當前登入使用者的口令
SET PASSWORD = PASSWORD ('n3w p@$$wOrd');