先說一點總結(jié)的話草慧。
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中執(zhí)行insert
命令署尤,如果需要插入一條數(shù)據(jù)蝶锋,可以使用create user
命令挑庶。
但是這個表(mysql.user
)并不能顯式的查詢到每個用戶的權(quán)限言秸。這就是為什么新建一個用戶(create user
)的時候,雖然指定了host
為%
,但還是不能遠程連接迎捺。
要想查詢指定用戶的權(quán)限举畸,需要使用show grants
命令,
show grants for cc,
有多個用戶都叫cc時凳枝,要指定host抄沮,
show grants for 'cc'@'localhost'
在mysql.user中,用戶名是可以重復(fù)的,只要host
不同就可以合是,也就是說,mysql server把用戶名相同但host不同的用戶看作是不同的用戶锭环。
在mysql server的命令中聪全,經(jīng)常用到幾個介詞 on,to,for,from
,為了方便記憶辅辩,提示下难礼,通常情況下,on
后面跟數(shù)據(jù)庫和表的名稱(當(dāng)然玫锋,也可能是用通配符表示的庫和表)蛾茉,to
后面跟用戶(用戶通常指定了host),for
后面也是跟用戶撩鹿,這樣說來谦炬,to
和for
的用法很相似,如何區(qū)分呢节沦,答案是on
和to
通常會成對出現(xiàn)键思,不出現(xiàn)on
但是要指定用戶時,就用for
甫贯。from
在僅在執(zhí)行revoke
操作時才會用到吼鳞,是to
的相反操作。分析語法好像很復(fù)雜哈叫搁,建議還是敲幾遍命令赔桌,這樣你自己都會總結(jié)出規(guī)律了。
總結(jié)完畢了渴逻,總結(jié)是為了歸納和方便記憶疾党,下面是詳細的命令。
登錄:
mysql -u root -p
查看所有的database
:
show databases;
查看所有的table:
show tables;
使用一個叫animal
的數(shù)據(jù)庫:
use animal
查看當(dāng)前登錄用戶(開了好了幾個窗口操作mysql時很有用):
select user();
查看自己選擇了哪個database:
select database();
查看mysql的版本:
select version();
后三個命令的執(zhí)行結(jié)果:
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)的東西。
創(chuàng)建一個新用戶:
create user 'cc'@'%' identified by '123456';
如果我們不想設(shè)置密碼:
create user 'cc'@'%'
修改密碼:
set password for 'c'@'%' = password('123456');
授權(quán)用戶對所有表的select
權(quán)限:
grant select on *.* to 'c'@'%';
授權(quán)用戶對庫animal所有表的select
權(quán)限:
grant select on animal.* to 'c'@'%';
授權(quán)用戶對庫animal中cat表的select
權(quán)限:
grant select on animal.cat to 'c'@'%';
授權(quán)用戶對所有表的update
權(quán)限:
grant update on *.* to 'c'@'%';
授權(quán)用戶對所有表的delete
權(quán)限:
grant delete on *.* to 'c'@'%';
當(dāng)然也可以這樣:
grant select,update,delete on *.* to 'c'@'%';
授予所有權(quán)限:
grant all privileges on *.* to 'c'@'%';
如果你不想寫privileges
也是可以的:
授權(quán)用戶對所有表的update
權(quán)限:
grant all on *.* to 'c'@'%';
修改了權(quán)限之后墓贿,一定不要忘記:
flush privileges;
是授權(quán)即時生效茧泪。
如果cc
用戶已經(jīng)連接mysql server,還需要重新連接下才能生效聋袋。
現(xiàn)在查看下cc
用戶的所有權(quán)限吧:
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
權(quán)限呢嗜侮,太危險了,要撤銷一下:
revoke delete on *.* from 'cc'@'%';
刪除剛才創(chuàng)建的用戶:
drop user 'cc'@'%';
mysql的命令在修改和撤銷的時候,幾乎需要把授權(quán)的命令完整的敲一遍锈颗,只是關(guān)鍵字不同顷霹。非常希望mysql的權(quán)限可以有索引,按照id撤銷就好了(只是一個希望击吱,這句話請讀者略過)淋淀。
還有一些高級功能,作為附錄:
grant create on 創(chuàng)建
grant alter on 修改表
grant drop on 刪除表
grant references on 操作外鍵
grant create temporary tables on 臨時表權(quán)限
grant index on 創(chuàng)建索引
grant create view on 創(chuàng)建視圖
grant show view on 查看視圖
grant create routine on 創(chuàng)建存儲過程
grant alter routine on 修改存儲過程
grant execute on 函數(shù)