目錄

一:本節⽬標

二:應⽤場景

三:⽤⼾

3.1 查看⽤⼾

3.2 創建⽤⼾

3.2.1 語法

3.2.2 注意事項

3.2.3 ⽰例

3.4 修改密碼

3.4.1 語法

3.5 刪除⽤⼾

3.5.1 語法

3.5.2 ⽰例

四:權限與授權

4.1.1 語法

4.1.2 ⽰例

4.2 回收權限

4.2.1 語法

4.2.2:實例


一:本節⽬標

瞭解數據庫的⽤⼾與常⽤操作
瞭解數據庫權限與授權

二:應⽤場景

數據庫服務安裝成功後默認有⼀個root⽤⼾,可以新建和操縱數據庫服務中管理的所有數據庫。在真實的使⽤過程中,通常每個應⽤對應着⼀個數據庫,我們只希望某個⽤⼾只能操縱和管理當前應⽤對應的那個數據庫,⽽不能操縱和管理其他應⽤的數據庫,這時就可以添加⼀個⽤⼾並指定⽤⼾的權限

MySQL用户權限管理圖文詳解-mysql教程_mysql

如上圖所⽰:
root 可以訪問和操縱所有的數據庫:DB1, DB2, DB3, DB4


賦予某個數據庫的所有權限包括增刪改查
普通⽤⼾1 只能訪問和操縱數據庫DB1
普通⽤⼾2 只能訪問和操縱數據庫DB3


只能查詢被賦予查詢權限的庫和表
只讀⽤⼾1 只能訪問數據庫DB3
只讀⽤⼾2 只能訪問數據庫DB4


root就是老大,可以對所有的庫和表進行操作
在mysql中如果對數據進行某些操作,必須添加一個用户,並對用户賦予相應的權限。

三:⽤⼾

3.1 查看⽤⼾

MySQL的⽤⼾信息保存在mysql系統數據庫的user表中,可以通過Select語句查看,如下所⽰選擇數據庫:

MySQL用户權限管理圖文詳解-mysql教程_數據庫_02

查看錶

MySQL用户權限管理圖文詳解-mysql教程_mysql_03

查看user表結構:

MySQL用户權限管理圖文詳解-mysql教程_MySQL_04

查看use中的記錄:當前可以登錄的主機v

MySQL用户權限管理圖文詳解-mysql教程_mysql_05

navitact查看錶結構

MySQL用户權限管理圖文詳解-mysql教程_數據庫_06

host: 允許登錄的主機,相當於⽩名單,如果是localhost,表⽰只能從本機登陸
user: ⽤⼾名
_ priv: ⽤⼾擁有的權限
authentication_string: 加密後的⽤⼾密碼

3.2 創建⽤⼾

3.2.1 語法

CREATE USER [IF NOT EXISTS] 'user_name'@'host_name' IDENTIFIED BY 'auth_string';

user 部分也就是用來登錄MySQL的用户名
host_name 可以用來登錄主機名或ip 可以起到一個白名單的作用,只有在指定的機器上才可以訪問當前的MySQL,可以指定一個具體的機器或一個ip的範圍

'user'@'HOST'才是一個的用户的編碼方式

3.2.2 注意事項

如果不指定host_name相當於'user_name'@'%', %表⽰所有主機都可以連接到數據庫,強烈建議不要這樣設置,因為會導致嚴重的安全問題

user_name和host_name分別⽤單引號包裹,如果寫成'user_name@host_name',相當
於'user_name@host_name'@'%'

host_name可以通過⼦⽹掩碼設置主機範圍

198.0.0.0/255.0.0.0 : A段⽹絡中的任意⼀台主機

198.51.0.0/255.255.0.0: 198.51 B段⽹絡中的任意⼀台主機

198.51.100.0/255.255.255.0: 198.51.100 C段⽹絡中的任意⼀台主機

198.51.100.1 :只包含特定IP地址的主機

從MySQL 8.0.23開始,指定為IPv4地址的主機值可以使⽤CIDR表⽰法寫⼊,例如198.51.100.44/24

允許在IP地址中使⽤%通配符,⽐如,主機值'%'匹配任何主機名, 198.51.100.% 匹配
198.51.100 C段⽹絡中的任何主機。MySQL 8.0.35中已棄⽤,以後可能會刪除

3.2.3 ⽰例

我們先查詢當前登錄的用户是誰
然後添加用户並且設置密碼

MySQL用户權限管理圖文詳解-mysql教程_MySQL_07

然後我們重新查詢一下我們的用户:
我們的1和2就是我們新創建的用户

MySQL用户權限管理圖文詳解-mysql教程_MySQL_08

思考一下 我們創建用户可以使用數據庫嗎?
不可以的哦 使用數據庫需要有權限的。

3.4 修改密碼

3.4.1 語法

為指定⽤⼾設置密碼 【推薦】 ALTER USER 'user_name'@'host_name' IDENTIFIED BY 'auth_string'; 為指定⽤⼾設置密碼 SET PASSWORD FOR 'user_name'@'host_name' = 'auth_string'; 為當前登錄⽤⼾設置密碼 SET PASSWORD = 'auth_string';

3.5 刪除⽤⼾

3.5.1 語法

DROP USER [IF EXISTS] 'user_name'@'host_name'[, ...]; 可以一次刪除多個數據但是需要權限

3.5.2 ⽰例

 刪除⽤⼾'bit1'@'192.168.1.1/24' mysql> drop user 'bit1'@'192.168.1.1/24';

MySQL用户權限管理圖文詳解-mysql教程_mysql_09

四:權限與授權

4.1.1 語法

grant priv_type[, priv_type ...] on priv_level to 'user_name'@'host_name' [WITH GRANT OPTION] priv_type:根據類型,參考根據列表4.1中的Privilege列 priv_level: * | *.* | db_name.* | db_name.tbl_name | tbl_name,⽐如*.*表⽰所有數據庫下的所 有表 'user_name'@'host_name':指定⽤⼾ [WITH GRANT OPTION]:可選,允許⽤⼾將⾃⼰的權限授權給其它⽤⼾

4.1.2 ⽰例

為bit@localhost⽤⼾授權於 java01 數據庫的 select 權限

MySQL用户權限管理圖文詳解-mysql教程_mysql_10

MySQL用户權限管理圖文詳解-mysql教程_mysql_11

MySQL用户權限管理圖文詳解-mysql教程_數據庫_12


4.2 回收權限

4.2.1 語法

REVOKE [IF EXISTS] priv_type[, priv_type] ... ON priv_level FROM 'user_name'@'host_name' [, 'user_name'@'host_name']

4.2.2:實例