- 本博客是《MySQL基礎》系列博客的第十五部分,主要介紹MySQL中的用戶權限管理
- 本博客既爲方便自己查看複習而作,亦爲你而作,望能有所裨益
- 學習交流請聯繫 [email protected]
基本概念
我們經常遇到用戶權限的一些問題,如“你無權創建文件”等等。類似地,在數據庫中每個用戶都有一定的權限,例如用戶A只能查看A數據庫,用戶B1只能查看B數據庫的B1表等
- 在MySQL中,root賬戶爲超級管理員賬戶,負責權限管理
- 用戶權限管理需要在mysql數據庫中進行相關操作
權限管理
用戶管理
查看用戶
show databases; -- 查看所有數據庫
use mysql; -- 使用mysql數據庫
show tables; -- 展示當前數據庫下的表
desc user; -- 描述user表結構
select * from user \G; -- 查看user表的詳細信息,並以列的形式展示
select user,host,authentication_string from user;
查看用戶名、端口號和密碼
select user(); -- 查看當前用戶
創建用戶
create user <用戶名>@ip地址 identified by '<密碼>'; -- 創建用戶,%表示所有端口
修改密碼
- 8.0之前版本
update user set authentication_string = password('<密碼>')
where user = '<用戶名>';
flush privileges;
-- 權限刷新,密碼修改後沒有馬上執行就刷新下
- 8.0版本及之後
update user set authentication_string='' where user='<用戶名>'; -- 清空已有密碼
ALTER USER <用戶名>@<主機地址> IDENTIFIED BY '<密碼>'; -- 創建新的密碼,推薦
set password for <用戶名>@<主機地址> = '<密碼>' -- 另一種創建密碼的方式
注(參考資源):
MySQL8.0後請使用alter修改用戶密碼,
因爲在MySQL8.0以後的加密方式爲caching_sha2_password,
如果使用update修改密碼會給user表中root用戶的authentication_string字段下設置newpassowrd值,
當再使用alter user ‘root’@‘localhost’ identified by 'newpassword’修改密碼時會一直報錯,必須清空後再修改,
因爲authentication_string字段下只能是MySQL加密後的43位字符串密碼,
其他的會報格式錯誤,
所以在MySQL8.0以後能修改密碼的方法只能是:ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘你的密碼’;
刪除用戶
drop user <用戶名>@<主機地址>; -- 刪除用戶
權限管理
查看權限
use mysql; -- 使用mysql數據庫
desc user; -- 查看數據庫的所有權限
desc tables_priv; -- 查看當前用戶的表權限
show grants; -- 查看當前賬戶的權限
show grants for <用戶名>@<主機地址>;
-- 查看指定賬戶的權限,USAGE標識無權限,本地地址無需添加@字段
創建權限
grant <權限> on <數據庫>.<數據表> to <用戶名>@<主機地址>;
grant all on *.* to <用戶名>@<主機地址>; -- 授予用戶所有數據庫的所有權限
grant select(last_name) on sakila.actor to <test>@192.168.0.1;
-- 只能查看sakila數據庫中actor表的last_name字段
修改權限
修改用戶的相關權限一般都是全部刪除之後再重新授予
刪除權限
revoke all on *.* from <用戶名>@<主機地址>;
-- 收回用戶所有權限(權限修改後會疊加,因此賦予新權限時最好清空原有權限後再賦予)