MySQL創建用戶

在本教學中,您將學習如何使用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.tabletestdb.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語句。


上一篇: MySQL管理 下一篇: MySQL全文搜索