DCL的基本語法(授權(quán))
1、DCL的基本介紹
DCL(Data Control Language),即數(shù)據(jù)控制語言,用來定義數(shù)據(jù)庫的訪問權(quán)限和安全級別,及創(chuàng)建用戶。主要包括創(chuàng)建用戶、給用戶授權(quán)、對用戶撤銷授權(quán)、查詢用戶授權(quán)和刪除用戶等。
DCL 語句主要是 DBA(數(shù)據(jù)庫管理員) 用來管理系統(tǒng)中的對象權(quán)限時所使用,一般的開發(fā)人員很少使用。
2、管理用戶
2.1、查詢用戶
MySQL 在安裝完成之后,默認會生成四個數(shù)據(jù)庫:mysql、performance_schema、test,其中 mysql 數(shù)據(jù)庫的 user 表就存放著用戶的數(shù)據(jù)。
查詢用戶:
USE myql; -- 切換到mysql數(shù)據(jù)庫 SELECT * FROM USER; -- 查詢user表
查詢結(jié)果:

上面實際上查詢到的兩條記錄都是同一個用戶 root,host 字段表示該用戶可以在哪臺主機上連接該數(shù)據(jù)庫,通配符 % 表示可以在任意主機使用該用戶來遠程登錄數(shù)據(jù)庫。
2.2、創(chuàng)建用戶
CREATE USER '用戶名'@'主機名' IDENTIFIED BY '密碼'; -- 如果不指定host,則默認為%,密碼可以為空。 -- 實例: CREATE USER 'wen'@'192.168.118.1' IDENTIFIED BY '123';
創(chuàng)建后查詢結(jié)果:

創(chuàng)建語法中指定的主機名是指定該用戶可以通過什么主機名來連接本數(shù)據(jù)庫,在使用圖形工具比如 Navicat 時,指定的是下面的主機:

比如創(chuàng)建某一用戶時設(shè)置他的主機名為 localhost,則該用戶在連接該數(shù)據(jù)庫時,只能通過 localhost 主機名來進行連接,通過數(shù)據(jù)庫服務(wù)器的 IP 地址或者其他地址都無法連接到該數(shù)據(jù)庫。設(shè)置為 '%' 時,表示可以使用任何地址,也就是只要能連接到該數(shù)據(jù)庫,使用 ip 或者 localhost 或者其他的地址都行。
2.3、刪除用戶
刪除用戶命令:
drop user 用戶名@IP; -- 實例: drop user 'zhangsan'@'192.168.32.1';
2.4、修改用戶密碼
UPDATE `user` SET `Password` = PASSWORD('新密碼') WHERE `User` = '用戶名'; -- 實例: UPDATE `user` SET `Password` = PASSWORD('111') WHERE `User` = 'zhangsan';
注意,修改用戶密碼后需要重啟 MySQL 服務(wù)才能生效,否則仍是舊密碼。
2.5、忘記root用戶的密碼怎么辦
在 MySQL 中忘記了 root 用戶的密碼可以通過以下方式重新設(shè)置 root 的密碼:
- 用管理員運行 cmd,通過命令 net stop mysql 停止mysql服務(wù)
- 使用無驗證方式啟動mysql服務(wù),輸入命令:mysqld --skip-grant-tables
- 重新打開一個新的窗口,直接輸入mysql,就可以無用戶名,無密碼直接登陸
- 然后用用修改密碼的命令來修改root密碼。比如先選中 mysql 數(shù)據(jù)庫,然后通過 update 修改密碼:use mysql; UPDATE user SET Password = PASSWORD('新密碼') WHERE User = '用戶名';
- 關(guān)閉開啟的兩個窗口
- 打開任務(wù)管理器,手動結(jié)束 mysql.exe 的進程
- 重新啟動mysql服務(wù),這時就可以使用新密碼進行登陸了
3、權(quán)限管理
常用權(quán)限:
- 表數(shù)據(jù): select, update, delete, insert
- 表結(jié)構(gòu): create, alert, drop
- 外鍵: references
- 創(chuàng)建臨時表: create temporary tables
- 操作索引: index
- 視圖: create view, show view
- 存儲過程: create routine, alert routine, execute
- 所有權(quán)限: all
3.1、查看用戶權(quán)限
查看用戶權(quán)限命令:
SHOW GRANTS FOR '用戶名'@'主機名'; -- 實例: SHOW GRANTS FOR 'root'@'%';
比如,我們查看 root 用戶的權(quán)限:

可以看到,基本所有權(quán)限都列出來了。
查看 zhangsan 用戶的權(quán)限:

可以看到只有登錄的權(quán)限。
3.2、給用戶授予權(quán)限(grant)
在MySQL中使用GRANT命令給用戶授權(quán),如果用戶不存在,GRANT會自動創(chuàng)建用戶,并進行授權(quán)。
命令格式:
GRANT 權(quán)限列表 ON 數(shù)據(jù)庫名.表名 TO '用戶名'@'主機名'; -- 權(quán)限列表中如果有多個權(quán)限則用逗號,隔開 -- 授權(quán)所有庫的所有表的所有權(quán)限 GRANT ALL ON *.* TO '用戶名'@'主機名'; -- 示例:給張三賦予db_test數(shù)據(jù)庫students表的查詢權(quán)限 GRANT SELECT ON db_test.students TO 'zhangsan'@'localhost';
上面給張三授權(quán)之后,再次查看張三權(quán)限可以看到增加了查看 db_test.students 表的權(quán)限:

只有給某一用戶授予了指定數(shù)據(jù)庫或者指定表的權(quán)限之后,該用戶才能看到該數(shù)據(jù)庫和表,否則根本就無法查看到該數(shù)據(jù)庫或者表的存在。上面只授予了查詢的權(quán)限,所以使用 zhangsan 用戶來進行刪除、插入等操作一律不會執(zhí)行成功。
3.3、撤銷權(quán)限
可以通過命令撤銷某用戶的某種權(quán)限,格式如下:
REVOKE 權(quán)限列表 ON 數(shù)據(jù)庫名.表名 FROM '用戶名'@'主機名'; -- 示例:撤銷張三在db_test.students表的查詢權(quán)限 REVOKE SELECT ON db_test.students FROM 'zhangsan'@'localhost';

浙公網(wǎng)安備 33010602011771號