目錄
一:本節⽬標
二:應⽤場景
三:⽤⼾
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⽤⼾,可以新建和操縱數據庫服務中管理的所有數據庫。在真實的使⽤過程中,通常每個應⽤對應着⼀個數據庫,我們只希望某個⽤⼾只能操縱和管理當前應⽤對應的那個數據庫,⽽不能操縱和管理其他應⽤的數據庫,這時就可以添加⼀個⽤⼾並指定⽤⼾的權限
如上圖所⽰:
root 可以訪問和操縱所有的數據庫:DB1, DB2, DB3, DB4
賦予某個數據庫的所有權限包括增刪改查
普通⽤⼾1 只能訪問和操縱數據庫DB1
普通⽤⼾2 只能訪問和操縱數據庫DB3
只能查詢被賦予查詢權限的庫和表
只讀⽤⼾1 只能訪問數據庫DB3
只讀⽤⼾2 只能訪問數據庫DB4
root就是老大,可以對所有的庫和表進行操作
在mysql中如果對數據進行某些操作,必須添加一個用户,並對用户賦予相應的權限。
三:⽤⼾
3.1 查看⽤⼾
MySQL的⽤⼾信息保存在mysql系統數據庫的user表中,可以通過Select語句查看,如下所⽰選擇數據庫:
查看錶
查看user表結構:
查看use中的記錄:當前可以登錄的主機v
navitact查看錶結構
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 ⽰例
我們先查詢當前登錄的用户是誰
然後添加用户並且設置密碼
然後我們重新查詢一下我們的用户:我們的1和2就是我們新創建的用户
思考一下 我們創建用户可以使用數據庫嗎?
不可以的哦 使用數據庫需要有權限的。
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';
四:權限與授權
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 權限
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:實例