環(huán)境:mysql8横蜒,navicat
在玩mysql的過(guò)程中,經(jīng)常遇到有很多朋友在云上面玩mysql的時(shí)候,說(shuō)我創(chuàng)建了一個(gè)用戶為什么不能登錄丛晌?為什么沒(méi)有權(quán)限鹰霍?等等各種問(wèn)題,本文看完之后茵乱,這些都不是問(wèn)題了茂洒。
本文的主要內(nèi)容
- 介紹mysql的權(quán)限工作原理
- 查看所有用戶
- 創(chuàng)建用戶
- 修改密碼
- 給用戶授權(quán)
- 查看用戶權(quán)限
- 撤銷用戶權(quán)限
- 刪除用戶
- 權(quán)限原則
- 總結(jié)
Mysql權(quán)限工作原理
mysql如何識(shí)別一個(gè)用戶
mysql為了安全性考慮,采用主機(jī)名+用戶名來(lái)判斷一個(gè)用戶的身份瓶竭,因?yàn)樵诨ヂ?lián)網(wǎng)中很難通過(guò)用戶名來(lái)判斷一個(gè)用戶的身份督勺,但是我們可以通過(guò)ip或者主機(jī)名判斷一臺(tái)機(jī)器,某個(gè)用戶通過(guò)這個(gè)機(jī)器過(guò)來(lái)的斤贰,我們可以識(shí)別為一個(gè)用戶智哀,所以mysql中采用用戶名+主機(jī)名來(lái)識(shí)別用戶的身份。當(dāng)一個(gè)用戶對(duì)mysql發(fā)送指令的時(shí)候荧恍,mysql就是通過(guò)用戶名和來(lái)源(主機(jī))來(lái)斷定用戶的權(quán)限
Mysql權(quán)限驗(yàn)證分為2個(gè)階段:
階段1:連接數(shù)據(jù)庫(kù)瓷叫,此時(shí)mysql會(huì)根據(jù)你的用戶名及你的來(lái)源(ip或者主機(jī)名稱)判斷是否有權(quán)限連接
階段2:對(duì)mysql服務(wù)器發(fā)起請(qǐng)求操作,如create table送巡、select摹菠、delete、update骗爆、create index等操作次氨,此時(shí)mysql會(huì)判斷你是否有權(quán)限操作這些指令
權(quán)限生效時(shí)間
1,用戶及權(quán)限信息放在庫(kù)名為mysql的庫(kù)中摘投,mysql啟動(dòng)時(shí)煮寡,這些內(nèi)容被讀進(jìn)內(nèi)存并且從此時(shí)生效,所以如果通過(guò)直接操作這些表來(lái)修改用戶及權(quán)限信息的犀呼,需要重啟mysql或者執(zhí)行flush privileges;才可以生效幸撕。
2,用戶登錄之后外臂,mysql會(huì)和當(dāng)前用戶之間創(chuàng)建一個(gè)連接坐儿,此時(shí)用戶相關(guān)的權(quán)限信息都保存在這個(gè)連接中,存放在內(nèi)存中专钉,此時(shí)如果有其他地方修改了當(dāng)前用戶的權(quán)限挑童,這些變更的權(quán)限會(huì)在下一次登錄時(shí)才會(huì)生效
查看mysql中所有用戶
用戶信息在mysql.user表中,如下:
select * from user
結(jié)果如下
創(chuàng)建用戶
create user 用戶名[@主機(jī)名] [identified by '密碼'];
說(shuō)明:
1.主機(jī)名默認(rèn)值為%跃须,表示這個(gè)用戶可以從任何主機(jī)連接mysql服務(wù)器
2.密碼可以省略,表示無(wú)密碼登錄
示例1
不指定主機(jī)名時(shí)娃兽,表示這個(gè)用戶可以從任何主機(jī)連接mysql服務(wù)器
create user test1 identified by '123456';
用戶創(chuàng)建之后可以在mysql庫(kù)中通過(guò) select user,host from user;查看到菇民。
其他示例
說(shuō)明:test2的主機(jī)為localhost表示本機(jī),此用戶只能登陸本機(jī)的mysql
create user test2@localhost identified by '123456';
說(shuō)明:test3可以從任何機(jī)器連接到mysql服務(wù)器
create user 'test3'@'%' identified by '123456';
說(shuō)明:test4可以從192.168.11段的機(jī)器連接mysql
create user 'test4'@'192.168.3.%' identified by '123456';
鏈接信息如圖
修改密碼
通過(guò)管理員修改密碼
ALTER USER test2@localhost IDENTIFIED BY '123';
ps: mysql8后只能用這種方式,其他的方式不行
給用戶授權(quán)
創(chuàng)建用戶之后第练,需要給用戶授權(quán)阔馋,才有意義。
語(yǔ)法:
grant privileges ON database.table TO 'username'[@'host'] [with grant option]
grant命令說(shuō)明:
priveleges (權(quán)限列表)娇掏,可以是all呕寝,表示所有權(quán)限,也可以是select婴梧、update等權(quán)限下梢,多個(gè)權(quán)限之間用逗號(hào)分開(kāi)。
ON 用來(lái)指定權(quán)限針對(duì)哪些庫(kù)和表塞蹭,格式為數(shù)據(jù)庫(kù).表名 孽江,點(diǎn)號(hào)前面用來(lái)指定數(shù)據(jù)庫(kù)名,點(diǎn)號(hào)后面用來(lái)指定表名番电,. 表示所有數(shù)據(jù)庫(kù)所有表岗屏。
TO 表示將權(quán)限賦予某個(gè)用戶, 格式為username@host,@前面為用戶名漱办,@后面接限制的主機(jī)这刷,可以是IP、IP段娩井、域名以及%崭歧,%表示任何地方。
WITH GRANT OPTION 這個(gè)選項(xiàng)表示該用戶可以將自己擁有的權(quán)限授權(quán)給別人撞牢。注意:經(jīng)常有人在創(chuàng)建操作用戶的時(shí)候不指定WITH GRANT OPTION選項(xiàng)導(dǎo)致后來(lái)該用戶不能使用GRANT命令創(chuàng)建用戶或者給其它用戶授權(quán)率碾。
備注:可以使用GRANT重復(fù)給用戶添加權(quán)限,權(quán)限疊加屋彪,比如你先給用戶添加一個(gè)select權(quán)限所宰,然后又給用戶添加一個(gè)insert權(quán)限,那么該用戶就同時(shí)擁有了select和insert權(quán)限
示例:
grant all on *.* to test2@localhost with grant option;
說(shuō)明:給test2授權(quán)可以操作所有庫(kù)所有權(quán)限畜挥,相當(dāng)于dba
grant select on lunwen.* to 'test3'@'%';
說(shuō)明:test3可以對(duì)lunwen庫(kù)中所有的表執(zhí)行select
grant select(user,host) on mysql.user to 'test1'@'localhost';
說(shuō)明:可以限制只能查某一個(gè)或者某幾個(gè)字段
查看用戶有哪些權(quán)限
show grants for '用戶名'[@'主機(jī)']
show grants for test3;
查看當(dāng)前用戶的權(quán)限
show grants;
撤銷用戶的權(quán)限
語(yǔ)法
revoke all privileges ON database.table FROM '用戶名'[@'主機(jī)'];
可以先通過(guò)show grants命令查詢一下用戶對(duì)于的權(quán)限仔粥,然后使用revoke命令撤銷用戶對(duì)應(yīng)的權(quán)限,示例:
revoke all privileges on lunwen.* from test3@'%';
刪除用戶
drop user '用戶名'[@‘主機(jī)’]蟹但,示例:
drop user test3@'%';
授權(quán)原則說(shuō)明
只授予能滿足需要的最小權(quán)限躯泰,防止用戶干壞事,比如用戶只是需要查詢华糖,那就只給select權(quán)限就可以了麦向,不要給用戶賦予update、insert或者delete權(quán)限
創(chuàng)建用戶的時(shí)候限制用戶的登錄主機(jī)客叉,一般是限制成指定IP或者內(nèi)網(wǎng)IP段
初始化數(shù)據(jù)庫(kù)的時(shí)候刪除沒(méi)有密碼的用戶诵竭,安裝完數(shù)據(jù)庫(kù)的時(shí)候會(huì)自動(dòng)創(chuàng)建一些用戶话告,這些用戶默認(rèn)沒(méi)有密碼
為每個(gè)用戶設(shè)置滿足密碼復(fù)雜度的密碼
定期清理不需要的用戶,回收權(quán)限或者刪除用戶
總結(jié)
通過(guò)命令的方式操作用戶和權(quán)限不需要刷新卵慰,下次登錄自動(dòng)生效
通過(guò)操作mysql庫(kù)中表的方式修改沙郭、用戶信息,需要調(diào)用flush privileges;刷新一下裳朋,下次登錄自動(dòng)生效
mysql識(shí)別用戶身份的方式是:用戶名+主機(jī)
本文中講到的一些指令中帶主機(jī)的病线,主機(jī)都可以省略,默認(rèn)值為%鲤嫡,表示所有機(jī)器
mysql中用戶和權(quán)限的信息在庫(kù)名為mysql的庫(kù)中