前言:MySQL創建用戶的方法分成三種:INSERT USER表的方法、CREATE USER的方法、GRANT的方法。
一、賬號名稱的構成方式
賬號的組成方式:用戶名+主機(所以可以出現重復的用戶名,跟其他的數據庫不一樣)
用戶名:16字符以內.
主機名:可以用主機名和IP地址,也可以用通配符
通配符說明:172.18.10.%(IP地址為172.18.10段的所有IP地址都可以訪問)
二、通過CREATE USER命令進行創建用戶
腳本:CREATE USER 'username@host' [IDENTIFIED BY 'PASSWORD'] 其中密碼是可選項;
例子:CREATE USER 'john@192.168.189.71' IDENTIFIED BY "123";
CREATE USER 'john@192.168.189.%' IDENTIFIED BY "123";
CREATE USER 'john@' ;
說明:該方法創建出來的用戶只有連接數據庫的權限,需要后續繼續授權;
注意:用戶與@后主機地址是一體的,用一個分號連接,否則會報錯,ERROR 1396 (HY000): Operation CREATE USER failed for 'remote'@'%'
三、通過GRANT命令創建用戶
當數據庫存在用戶的時候GRANT會對用戶進行授權,但當數據庫不存在該用戶的時候,就會創建相應的用戶並進行授權。(說明上面那步是多余的)
腳本:
GRANT <ALL|priv1,priv2,.....privn> ON
[object] [IDENTIFIED BY 'password']
[WITH GRANT OPTION];
MAX_QUERIES_PER_HOUR count
MAX_UPDATES_PER_HOUR count
MAX_CONNECTIONS_PER_HOUR count
MAX_USER_CONNECTIONS count
說明:priv代表權限select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14個權限
例子:mysql>grant select,insert,update,delete,create,drop on test.hr to john@192.168.10.1 identified by '123';
說明:給主機為192.168.10.1的用戶john分配可對數據庫test的hr表進行select,insert,update,delete,create,drop等操作的權限,並設定口令為123。
mysql>grant all privileges on test.* to joe@192.168.10.1 identified by '123';
說明:給主機為192.168.10.1的用戶john分配可對數據庫test所有表進行所有操作的權限,並設定口令為123。
mysql>grant all privileges on *.* to john@192.168.10.1 identified by '123';
說明:給主機為192.168.10.1的用戶john分配可對所有數據庫的所有表進行所有操作的權限,並設定口令為123。
mysql>grant all privileges on *.* to john@localhost identified by '123';
說明:用戶john分配可對所有數據庫的所有表進行所有操作的權限,並設定口令為123。
查看權限:
撤銷權限:
revoke all on *.* from dba@localhost;
四、直接向mysql.user表插入記錄(該方法個人很少用)
因為數據庫的用戶信息都是保存在mysql.user這張表的,所以直接對該表進行插入語句,即可完成用戶的創建;
mysql> insert into user (host,user,password) values ('%','john',password('123'));
五、完成用戶的創建后,請記得刷新系統權限表;
mysql>flush privileges;
總結:雖然創建用戶的方法有三種,個人還是傾向於第二種方法,一步到位,簡單明了;
其他的兩種方法只是有助於理解數據庫的原理而已。