在本教學中,您將學習如何使用MySQL的CREATE USER
語句在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
語句,允許您建立一個新的使用者帳戶。 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.table
,testdb.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
語句。