利用 GRANT 語(yǔ)句進(jìn)行授權(quán):
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),社旗企業(yè)網(wǎng)站建設(shè),社旗品牌網(wǎng)站建設(shè),網(wǎng)站定制,社旗網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,社旗網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專(zhuān)業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
grant select on testdb.* to root@'%';
上述語(yǔ)句意思為只將對(duì)數(shù)據(jù)庫(kù)testdb的查詢權(quán)限授予root用戶
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
上述語(yǔ)句意思為將對(duì)所有數(shù)據(jù)庫(kù)的所有權(quán)限都授權(quán)給root用戶!
1,Mysql下創(chuàng)建新的用戶
語(yǔ)法:
1.create user 用戶名 identified by '密碼';
例:create user xiaogang identified by '123456';
新創(chuàng)建的用戶,默認(rèn)情況下是沒(méi)有任何權(quán)限的。
2. 如何給用戶分配權(quán)限
語(yǔ)法:
1.grant 權(quán)限 on 數(shù)據(jù)庫(kù).數(shù)據(jù)表 to '用戶' @ '主機(jī)名';
例:給 xiaogang 分配所有的權(quán)限
grant all on *.* to 'xiaogang'@'%';
這個(gè)時(shí)候 xiaogang 就擁有了 所有權(quán)限了
3 如何更精準(zhǔn)的控制用戶的權(quán)限呢?
1.grant 權(quán)限 on 數(shù)據(jù)庫(kù).數(shù)據(jù)表 to '用戶' @ '主機(jī)名';
例:讓 xiaogang 有查詢 tmp 數(shù)據(jù)庫(kù) tmp1 表的權(quán)限;
grant select on temp.temp1 to 'xiaogang'@'%'; //這個(gè)時(shí)候 xiaogang 就具有查詢temp小的temp1的權(quán)限了。
背景
在了解動(dòng)態(tài)權(quán)限之前,我們先回顧下 MySQL 的權(quán)限列表。
權(quán)限列表大體分為服務(wù)級(jí)別和表級(jí)別,列級(jí)別以及大而廣的角色(也是MySQL 8.0 新增)存儲(chǔ)程序等權(quán)限。我們看到有一個(gè)特殊的 SUPER 權(quán)限,可以做好多個(gè)操作。比如 SET 變量,在從機(jī)重新指定相關(guān)主機(jī)信息以及清理二進(jìn)制日志等。那這里可以看到,SUPER 有點(diǎn)太過(guò)強(qiáng)大,導(dǎo)致了僅僅想實(shí)現(xiàn)子權(quán)限變得十分困難,比如用戶只能 SET 變量,其他的都不想要。那么 MySQL 8.0 之前沒(méi)法實(shí)現(xiàn),權(quán)限的細(xì)分不夠明確,容易讓非法用戶鉆空子。
那么 MySQL 8.0 把權(quán)限細(xì)分為靜態(tài)權(quán)限和動(dòng)態(tài)權(quán)限,下面我畫(huà)了兩張?jiān)敿?xì)的區(qū)分圖,圖 1 為靜態(tài)權(quán)限,圖 2 為動(dòng)態(tài)權(quán)限。
圖 1- MySQL 靜態(tài)權(quán)限的權(quán)限管理圖
圖 2-動(dòng)態(tài)權(quán)限圖
那我們看到其實(shí)動(dòng)態(tài)權(quán)限就是對(duì) SUPER 權(quán)限的細(xì)分。 SUPER 權(quán)限在未來(lái)將會(huì)被廢棄掉。
我們來(lái)看個(gè)簡(jiǎn)單的例子,
比如, 用戶 'ytt2@localhost', 有 SUPER 權(quán)限。
mysql show grants for ytt2@'localhost';+---------------------------------------------------------------------------------+| Grants for ytt2@localhost ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |+---------------------------------------------------------------------------------+| GRANT INSERT, UPDATE, DELETE, CREATE, ALTER, SUPER ON *.* TO ytt2@localhost |+---------------------------------------------------------------------------------+1 row in set (0.00 sec)
但是現(xiàn)在我只想這個(gè)用戶有 SUPER 的子集,設(shè)置變量的權(quán)限。那么單獨(dú)給這個(gè)用戶賦予兩個(gè)能設(shè)置系統(tǒng)變量的動(dòng)態(tài)權(quán)限,完了把 SUPER 給拿掉。
mysql grant session_variables_admin,system_variables_admin on *.* to ytt2@'localhost';Query OK, 0 rows affected (0.03 sec)mysql revoke super on *.* from ytt2@'localhost';Query OK, 0 rows affected, 1 warning (0.02 sec)
我們看到這個(gè) WARNINGS 提示 SUPER 已經(jīng)廢棄了。
mysql show warnings;
+---------+------+----------------------------------------------+
| Level ? | Code | Message ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|
+---------+------+----------------------------------------------+
| Warning | 1287 | The SUPER privilege identifier is deprecated |
+---------+------+----------------------------------------------+
1 row in set (0.00 sec)`
mysql show grants for ytt2@'localhost';
+-----------------------------------------------------------------------------------+
| Grants for ytt2@localhost ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? |
+-----------------------------------------------------------------------------------+
| GRANT INSERT, UPDATE, DELETE, CREATE, ALTER ON *.* TO ytt2@localhost ? ? ? ? ?|
| GRANT SESSION_VARIABLES_ADMIN,SYSTEM_VARIABLES_ADMIN ON *.* TO ytt2@localhost |
+-----------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
當(dāng)然圖 2 上還有其它的動(dòng)態(tài)權(quán)限,這里就不做特別說(shuō)明了。