MySQL建立使用者

2019-10-16 22:55:40

在本教學中,您將學習如何使用MySQL的CREATE USER語句在MySQL中建立一個使用者帳戶。

MySQL中的使用者帳戶簡介

在MySQL中,不僅可以指定誰可以連線到資料庫伺服器,還可以指定使用者連線的主機。因此,MySQL中的使用者帳號由使用者名,以及使用@字元分隔的主機名組成。

例如,如果admin使用者從localhost主機連線到MySQL資料庫伺服器,則使用者帳戶是書寫形式是:admin@localhost,其中@符號是一個固定的分隔符。

admin使用者只能從本地主機(localhost)連線到MySQL資料庫伺服器,而不是遠端主機(如:tw511.com),這使得MySQL資料庫伺服器更加安全。

注意:如要限制admin使用者只能從tw511.com主機登入,那麼可以書寫為:[email protected] , 如果想要允許從任意主機登入,那麼可以書寫為: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 [email protected] 
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使用者帳戶從tw511.com主機的任何子域連線到資料庫伺服器,請使用百分比萬用字元%,如下所示:

CREATE USER mysqladmin@'%.tw511.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語句。