???歡迎您來到我的MySQL基礎(chǔ)復(fù)習(xí)專欄
☆* o(≧▽≦)o *☆哈嘍~我是小小惡斯法克??
?博客主頁:小小惡斯法克的博客
??該系列文章專欄:重拾MySQL
??文章作者技術(shù)和水平很有限,如果文中出現(xiàn)錯誤,希望大家能指正??
?? 感謝大家的關(guān)注!???
目錄
DCL-介紹
DCL-管理用戶
DCL - 權(quán)限控制
DCL-介紹
DCL英文全稱是Data Control Language(數(shù)據(jù)控制語言),用來管理數(shù)據(jù)庫用戶、控制數(shù)據(jù)庫的訪問權(quán)限。
?
DCL-管理用戶
1.查詢用戶
在mysql數(shù)據(jù)庫中,用戶的信息,用戶所具有的權(quán)限的信息,都是存放在系統(tǒng)數(shù)據(jù)庫mysql的user表中,所以我們可以直接訪問mysql數(shù)據(jù)庫,然后查詢use表就行
打開表之后有4個用戶,前三個沒有用過,我們只用過一個root,在這張表中,第一個字段叫host,指的是主機,在mysql中要創(chuàng)建一個用戶或者去刪除一個用戶,需要通過用戶名,和host主機地址同時定位,用戶名和主機地址才能夠完整的定位一個mysql的用戶,這個主機地址指的是當前這個用戶只能在哪個主機上訪問當前mysql服務(wù)器,那么localhost代表只能夠在本機訪問,能不能遠程訪問呢?不能
use mysql ;
select * from user ;
select * from mysql.user ; --這里為什么是mysql.user,你要么用上面的組合,要么用下面的語句才能訪問到user,因為user表是在mysql這個數(shù)據(jù)庫中的,你要先切換到那個數(shù)據(jù)庫中,或者用這個語句
?執(zhí)行如下:
2.創(chuàng)建用戶
主機名指的就是在哪一個主機上,這個用戶可以訪問當前mysql,后面identified指定密碼,就是當前用戶的訪問密碼
CREATE USER '用戶名'@'主機名' IDENTIFIED BY '密碼';
3.修改用戶密碼
ALTER USER '用戶名'@'主機名' IDENTIFIED WITH mysql_native_password BY '新密碼' ;
4.刪除用戶
DROP USER '用戶名'@'主機名' ;
注意事項:
1.在MySQL中需要通過用戶名@主機名的方式,來唯一標識一個用戶。
2.主機名可以使用 % 通配。
3.這類SQL開發(fā)人員操作的比較少,主要是DBA( Database Administrator 數(shù)據(jù)庫管理員)使用。
案例:
1.創(chuàng)建用戶itczh, 只能夠在當前主機localhost訪問, 密碼123456 ;
但是這個用戶有沒有權(quán)限呢?大家會發(fā)現(xiàn)表格當中都是N,也就是no,此時我們可以通過命令行去訪問一下,通過itczh這個用戶去訪問mysql,我們連接好了itczh用戶,然后去show一下里面所有數(shù)據(jù)庫,只訪問到了一個,而root用戶可以查詢到那么多數(shù)據(jù)庫,原因是什么呢?
原因是因為我們剛剛是僅僅創(chuàng)建了itczh這個用戶,它可以訪問mysql,但是它沒有訪問其他數(shù)據(jù)庫的權(quán)限,目前只是創(chuàng)建了用戶,但是沒有給這個用戶權(quán)限
create user 'itczh'@'localhost' identified by '123456' ;
執(zhí)行如下:
2.創(chuàng)建用戶czh, 可以在任意主機訪問該數(shù)據(jù)庫, 密碼123456 ;
%代表任意主機
create user 'czh'@'%' identified by '123456' ;
執(zhí)行如下:
3.修改用戶czh的訪問密碼為1234 ;
alter user 'czh'@'%' identified with mysql_native_password by '1234';
執(zhí)行如下:
測試:
4.刪除 itczh@localhost 用戶
drop user 'itczh'@'localhost';
執(zhí)行如下:
此時可以發(fā)現(xiàn)用戶itczh已經(jīng)被刪除了
DCL - 權(quán)限控制
MySQL中定義了很多種權(quán)限,但是常用的就以下幾種:
權(quán)限 |
說明 |
ALL, ALL PRIVILEGES |
所有權(quán)限 |
SELECT |
查詢數(shù)據(jù) |
INSERT |
插入數(shù)據(jù) |
UPDATE |
修改數(shù)據(jù) |
DELETE |
刪除數(shù)據(jù) |
ALTER |
修改表 |
DROP |
刪除數(shù)據(jù)庫/表/視圖 |
CREATE |
創(chuàng)建數(shù)據(jù)庫/表 |
上述只是簡單羅列了常見的幾種權(quán)限描述,其他權(quán)限描述及含義,可以直接參考官方文檔。
1.查詢權(quán)限
SHOW GRANTS FOR '用戶名'@'主機名' ;
2.授予權(quán)限
GRANT 權(quán)限列表 ON 數(shù)據(jù)庫名.表名 TO '用戶名'@'主機名';
3.撤銷權(quán)限
如果說要給所有的數(shù)據(jù)庫,所有的表賦予權(quán)限,就可以寫*.*,如果指定數(shù)據(jù)庫和指定表就寫數(shù)據(jù)庫名和表名即可
REVOKE 權(quán)限列表 ON 數(shù)據(jù)庫名.表名 FROM '用戶名'@'主機名';
注意事項:
多個權(quán)限之間,使用逗號分隔
授權(quán)時,數(shù)據(jù)庫名和表名可以使用 * 進行通配,*代表所有。
案例:
1.查詢 'czh'@'%' 用戶的權(quán)限
查詢到的權(quán)限信息如下圖,這是個什么權(quán)限呢?usage,這個指的就是我們沒有其他權(quán)限,你僅僅能夠連接并登錄mysql而已
show grants for 'czh'@'%';
執(zhí)行如下:
2.授予 'czh'@'%' 用戶test數(shù)據(jù)庫所有表的所有操作權(quán)限 (授權(quán)的關(guān)鍵字grant)
我們要授予的是test這個數(shù)據(jù)庫所有表的權(quán)限,那么就是test.*, to,給哪個用戶這個權(quán)限,給czh這個用戶授予這個權(quán)限,那么在授權(quán)之前,再看一下czh這個用戶登陸上來之后,目前能訪問哪個數(shù)據(jù)庫?發(fā)現(xiàn)它只能訪問information_schema這個數(shù)據(jù)庫,接下來我們?nèi)?zhí)行下面的SQL語句
grant all on test.* to 'czh'@'%';
執(zhí)行如下:
此時所具有的權(quán)限是all privileges,針對的是test這個數(shù)據(jù)庫的所有權(quán)限,此時我們打開命令行,通過czh用戶再次訪問mysql,再去看看權(quán)限,此時czh這個用戶就能看間test這個數(shù)據(jù)庫了
里面的表也都能看見了
3.撤銷 'czh'@'%' 用戶的test數(shù)據(jù)庫的所有權(quán)限
revoke all on test.* from 'czh'@'%';
執(zhí)行如下:
?此時就沒有所有權(quán)限了,此時我們打開命令行,重新登陸czh這個用戶,執(zhí)行show databases;我們看一下之前給他授予的test數(shù)據(jù)庫的權(quán)限還有沒有了,有沒有成功的被撤銷
執(zhí)行如下:
文章來源:http://www.zghlxwxcb.cn/news/detail-818501.html
此時表明權(quán)限撤銷成功!文章來源地址http://www.zghlxwxcb.cn/news/detail-818501.html
到了這里,關(guān)于SQL-用戶管理與用戶權(quán)限的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!