在本教學中,您將學習如何使用MySQL的CREATE USER
語句在MySQL中創建一個用戶帳戶。
MySQL中的用戶帳戶簡介
在MySQL中,不僅可以指定誰可以連接到資料庫伺服器,還可以指定用戶連接的主機。因此,MySQL中的用戶帳號由用戶名,以及使用@
字元分隔的主機名組成。
例如,如果admin
用戶從localhost
主機連接到MySQL資料庫伺服器,則用戶帳戶是書寫形式是:admin@localhost
,其中@
符號是一個固定的分隔符號。
admin
用戶只能從本地主機(localhost
)連接到MySQL資料庫伺服器,而不是遠程主機(如:xuhuhu.com),這使得MySQL資料庫伺服器更加安全。
注意:如要限制
admin
用戶只能從xuhuhu.com
主機登錄,那麼可以書寫為:admin@xuhuhu.com
, 如果想要允許從任意主機登錄,那麼可以書寫為:admin@%
。
此外,通過組合用戶名和主機,可以設置多個具有相同名稱的帳戶,但可以從具有不同許可權的不同主機進行連接。
MySQL將用戶帳戶授權存儲在mysql
資料庫的user
表中。
使用MySQL CREATE USER語句創建用戶帳戶
MySQL提供了CREATE USER
語句,允許您創建一個新的用戶帳戶。 CREATE USER
語句的語法如下:
CREATE USER user_account IDENTIFIED BY password;
用戶帳號(user_account
)是以username@hostname
格式跟在CREATE USER
子句之後。
密碼(password
)在IDENTIFIED BY
子句中指定。password
必須是明文。 在將用戶帳戶保存到用戶表之前,MySQL將加密明文密碼。
例如,要創建一個新的用戶dbadmin
,這個用戶只允許從localhost
主機並使用密碼為pwd123
連接到MySQL資料庫伺服器,使用CREATE USER
語句,如下所示:
CREATE USER dbadmin@localhost
IDENTIFIED BY 'pwd123';
如果用戶dbadmin
還可以從IP為192.168.1.100
的主機連接到MySQL資料庫伺服器,使用CREATE USER
語句,如下所示:
CREATE USER dbadmin@192.168.1.100
IDENTIFIED BY 'pwd123';
要查看用戶帳戶的許可權,請使用SHOW GRANTS
語句,如下所示:
SHOW GRANTS FOR dbadmin@localhost;
執行上面查詢語句,得到以下結果 -
mysql> SHOW GRANTS FOR dbadmin@localhost;
+---------------------------------------------+
| Grants for dbadmin@localhost |
+---------------------------------------------+
| GRANT USAGE ON *.* TO 'dbadmin'@'localhost' |
+---------------------------------------------+
1 row in set
上面結果中的*.*
顯示dbadmin
用戶帳戶只能登錄到資料庫伺服器,沒有其他許可權。 要授予用戶許可權,您可以使用GRANT語句,有關Grant
語句,我們將在下一個教程仲介紹。
請注意,點(.
)之前的部分表示資料庫,點(.
)後面的部分表示表,例如database.table
,testdb.offices
等等。
要允許用戶帳戶從任何主機連接,請使用百分比(%
)通配符,如以下示例所示:
CREATE USER superadmin@'%' IDENTIFIED BY 'mypassword';
百分比通配符%
與LIKE運算符中使用的效果相同,例如,要允許mysqladmin
用戶帳戶從xuhuhu.com
主機的任何子域連接到資料庫伺服器,請使用百分比通配符%
,如下所示:
CREATE USER mysqladmin@'%.xuhuhu.com'
IDENTIFIED by 'mypassword';
請注意,也可以在
CREATE USER
語句中使用下劃線通配符_
。
如果您省略了用戶帳戶的主機名部分,MySQL也會接受它,並允許用戶從任何主機進行連接。 例如,以下語句創建一個名為remote_user
的新用戶帳戶,可以從任何主機連接到資料庫伺服器:
CREATE USER remote_user;
可以看到授予遠程用戶帳戶(remote_user
)的許可權如下:
SHOW GRANTS FOR remote_user;
執行上面查詢語句,得到以下結果 -
mysql> SHOW GRANTS FOR remote_user;
+-----------------------------------------+
| Grants for remote_user@% |
+-----------------------------------------+
| GRANT USAGE ON *.* TO 'remote_user'@'%' |
+-----------------------------------------+
1 row in set
要注意,引用是非常重要的,特別是當用戶帳戶包含特殊字元(如_
或%
)時。
如果您不小心引用"username@hostname"
這樣的用戶帳戶,MySQL將創建一個username@hostname
的用戶,並允許用戶從任何主機進行連接,這可能不是您預期的。
例如,以下語句創建可以從任何主機連接到MySQL資料庫伺服器的新用戶api@localhost
(這是用戶名,並非用戶帳號)。
-- 常用創建用戶為:CREATE USER api@'localhost' 與下麵語句不同 -
CREATE USER 'api@localhost';
查看上面創建的用戶的許可權 -
mysql> SHOW GRANTS FOR 'api@localhost';
+-------------------------------------------+
| Grants for api@localhost@% |
+-------------------------------------------+
| GRANT USAGE ON *.* TO 'api@localhost'@'%' |
+-------------------------------------------+
1 row in set
如果創建一個已經存在的用戶,MySQL會發出一個錯誤。 例如,以下語句創建一個名為remote_user
的用戶帳戶已經存在:
CREATE USER remote_user;
上面語句執行後,MySQL發出以下錯誤資訊:
1396 - Operation CREATE USER failed for 'remote_user'@'%'
請注意,CREATE USER
語句只是創建一個沒有任何許可權的新用戶帳戶。如果要向用戶授予使用權限,則使用GRANT
語句。