mysql常用命令使用手冊

funnyok發表於2021-09-09

先說一點總結的話。

mysql server所有的使用者都儲存在mysql.user表中(dabase=mysql,table=user),user表就是一個使用者的記錄,就像linux把所有的使用者都放在/etc/passwd一樣。我們可以使用以下命令查詢所有的使用者:
select host,user from mysql.user;
也可以更新欄位
update mysq.user set host = 'localhost' where user = 'cc';
不要在mysql.sql中執行insert命令,如果需要插入一條資料,可以使用create user命令。

但是這個表(mysql.user)並不能顯式的查詢到每個使用者的許可權。這就是為什麼新建一個使用者(create user)的時候,雖然指定了host%,但還是不能遠端連線。

要想查詢指定使用者的許可權,需要使用show grants命令,

show grants for cc,
有多個使用者都叫cc時,要指定host,
show grants for 'cc'@'localhost'

在mysql.user中,使用者名稱是可以重複的,只要host不同就可以,也就是說,mysql server把使用者名稱相同但host不同的使用者看作是不同的使用者。

在mysql server的命令中,經常用到幾個介詞 on,to,for,from,為了方便記憶,提示下,通常情況下,on後面跟資料庫和表的名稱(當然,也可能是用萬用字元表示的庫和表),to後面跟使用者(使用者通常指定了host),for後面也是跟使用者,這樣說來,tofor的用法很相似,如何區分呢,答案是onto通常會成對出現,不出現on但是要指定使用者時,就用forfrom在僅在執行revoke操作時才會用到,是to的相反操作。分析語法好像很複雜哈,建議還是敲幾遍命令,這樣你自己都會總結出規律了。

總結完畢了,總結是為了歸納和方便記憶,下面是詳細的命令。


登入:
mysql -u root -p
檢視所有的database:
show databases;
檢視所有的table:
show tables;
使用一個叫animal的資料庫:
use animal
檢視當前登入使用者(開了好了幾個視窗操作mysql時很有用):
select user();
檢視自己選擇了哪個database:
select database();
檢視mysql的版本:
select version();

後三個命令的執行結果:

mysql> select version();
+-----------------------+| version()             |+-----------------------+| 5.7.22-0ubuntu18.04.1 |+-----------------------+1 row in set (0.00 sec)

mysql> select user();
+--------------+| user()       |+--------------+| cc@localhost |+--------------+1 row in set (0.00 sec)

mysql> select database();
+------------+| database() |+------------+| catalog       |+------------+1 row in set (0.00 sec)

以上幾個命令是比較基本的,不涉及到具體操作,但是需要的時候幾乎都會去baidu(google)的東西。

建立一個新使用者:
create user 'cc'@'%' identified by '123456';
如果我們不想設定密碼:
create user 'cc'@'%'
修改密碼:
set password for 'c'@'%' = password('123456');
授權使用者對所有表的select許可權:
grant select on *.* to 'c'@'%';
授權使用者對庫animal所有表的select許可權:
grant select on animal.* to 'c'@'%';
授權使用者對庫animal中cat表的select許可權:
grant select on animal.cat to 'c'@'%';
授權使用者對所有表的update許可權:
grant update on *.* to 'c'@'%';
授權使用者對所有表的delete許可權:
grant delete on *.* to 'c'@'%';
當然也可以這樣:
grant select,update,delete on *.* to 'c'@'%';
授予所有許可權:
grant all privileges on *.* to 'c'@'%';
如果你不想寫privileges也是可以的:
授權使用者對所有表的update許可權:
grant all on *.* to 'c'@'%';
修改了許可權之後,一定不要忘記:
flush privileges;是授權即時生效
如果cc使用者已經連線mysql server,還需要重新連線下才能生效。
現在檢視下cc使用者的所有許可權吧:
show grants for 'cc'@'%';

mysql> show grants for cc; //我確定自己只有一個cc使用者,所以就不寫成'cc'@'%'了
+-------------------------------------------------+
| Grants for cc@%                                 |
+-------------------------------------------------+
| GRANT SELECT, UPDATE, DELETE ON *.* TO 'cc'@'%' |
| GRANT ALL PRIVILEGES ON `haha`.* TO 'cc'@'%'    |
+-------------------------------------------------+

好像一切都很完美,突然想起來,怎麼能讓使用者有delete許可權呢,太危險了,要撤銷一下:
revoke delete on *.* from 'cc'@'%';

刪除剛才建立的使用者:
drop user 'cc'@'%';

mysql的命令在修改和撤銷的時候,幾乎需要把授權的命令完整的敲一遍,只是關鍵字不同。非常希望mysql的許可權可以有索引,按照id撤銷就好了(只是一個希望,這句話請讀者略過)。


還有一些高階功能,作為附錄:

grant create on  建立
grant alter on  修改表
grant drop on 刪除表
grant references on 操作外來鍵
grant create temporary tables on 臨時表許可權
grant index on 建立索引
grant create view on 建立檢視
grant show view on 檢視檢視
grant create routine on 建立儲存過程
grant alter routine on 修改儲存過程
grant execute on 函式



作者:EdisonChia
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3137/viewspace-2821071/,如需轉載,請註明出處,否則將追究法律責任。

相關文章