溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL創(chuàng)建、刪除以及更改用戶的方法與權(quán)限介紹

發(fā)布時間:2021-09-15 15:05:39 來源:億速云 閱讀:137 作者:chen 欄目:MySQL數(shù)據(jù)庫

本篇內(nèi)容介紹了“MySQL創(chuàng)建、刪除以及更改用戶的方法與權(quán)限介紹”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

1.創(chuàng)建用戶

官方推薦創(chuàng)建語法為:

CREATE USER [IF NOT EXISTS]
    user [auth_option] [, user [auth_option]] ...
    [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
    [WITH resource_option [resource_option] ...]
    [password_option | lock_option] ...

user:
    (see Section 6.2.4, “Specifying Account Names”)

auth_option: {
    IDENTIFIED BY 'auth_string'
  | IDENTIFIED WITH auth_plugin
  | IDENTIFIED WITH auth_plugin BY 'auth_string'
  | IDENTIFIED WITH auth_plugin AS 'auth_string'
  | IDENTIFIED BY PASSWORD 'auth_string'
}

tls_option: {
   SSL
 | X509
 | CIPHER 'cipher'
 | ISSUER 'issuer'
 | SUBJECT 'subject'
}

resource_option: {
    MAX_QUERIES_PER_HOUR count
  | MAX_UPDATES_PER_HOUR count
  | MAX_CONNECTIONS_PER_HOUR count
  | MAX_USER_CONNECTIONS count
}

password_option: {
    PASSWORD EXPIRE
  | PASSWORD EXPIRE DEFAULT
  | PASSWORD EXPIRE NEVER
  | PASSWORD EXPIRE INTERVAL N DAY
}

lock_option: {
    ACCOUNT LOCK
  | ACCOUNT UNLOCK
}

通常我們常用的創(chuàng)建語法為:

CREATE USER <用戶名> [ IDENTIFIED ] BY [ PASSWORD ] <口令>

語法說明如下:
1) <用戶名>
指定創(chuàng)建用戶賬號,格式為 'user_name'@'host_name'。這里user_name是用戶名,host_name為主機名,即用戶連接 MySQL 時所在主機的名字。若在創(chuàng)建的過程中,只給出了賬戶的用戶名,而沒指定主機名,則主機名默認為“%”,表示一組主機。
2) PASSWORD
可選項,用于指定散列口令,即若使用明文設(shè)置口令,則需忽略PASSWORD關(guān)鍵字;若不想以明文設(shè)置口令,且知道 PASSWORD() 函數(shù)返回給密碼的散列值,則可以在口令設(shè)置語句中指定此散列值,但需要加上關(guān)鍵字PASSWORD。
3) IDENTIFIED BY子句
用于指定用戶賬號對應(yīng)的口令,若該用戶賬號無口令,則可省略此子句。
4) <口令>
指定用戶賬號的口令,在IDENTIFIED BY關(guān)鍵字或PASSWOED關(guān)鍵字之后。給定的口令值可以是只由字母和數(shù)字組成的明文,也可以是通過 PASSWORD() 函數(shù)得到的散列值。

使用 CREATE USER 語句應(yīng)該注意以下幾點:

  • 如果使用 CREATE USER 語句時沒有為用戶指定口令,那么 MySQL 允許該用戶可以不使用口令登錄系統(tǒng),然而從安全的角度而言,不推薦這種做法。

  • 使用 CREATE USER 語句必須擁有 MySQL 中 mysql 數(shù)據(jù)庫的 INSERT 權(quán)限或全局 CREATE USER 權(quán)限。

  • 使用 CREATE USER 語句創(chuàng)建一個用戶賬號后,會在系統(tǒng)自身的 MySQL 數(shù)據(jù)庫的 user 表中添加一條新記錄。若創(chuàng)建的賬戶已經(jīng)存在,則語句執(zhí)行時會出現(xiàn)錯誤。

  • 新創(chuàng)建的用戶擁有的權(quán)限很少。他們可以登錄 MySQL,只允許進行不需要權(quán)限的操作,如使用 SHOW 語句查詢所有存儲引擎和字符集的列表等。

  • 如果兩個用戶具有相同的用戶名和不同的主機名,MySQL 會將他們視為不同的用戶,并允許為這兩個用戶分配不同的權(quán)限集合。

示例:

#注意:test_user@'%' 和 test_user@'localhost' 是兩個不同的用戶
CREATE USER 'test_user'@'%' identified by '123456';
CREATE USER 'test_user'@'localhost' identified by '123456789';
2.更改用戶

更改用戶信息主要包括重命名,改密碼,鎖定或解鎖用戶。下面將通過案例為大家展示這些用法:

#重命名用戶
RENAME USER 'test_user'@'%' to 'test'@'%';

#修改密碼
ALTER USER 'test'@'%' identified by '123456789';

#鎖定或解鎖用戶
ALTER USER 'test'@'%' ACCOUNT LOCK;
ALTER USER 'test'@'%' ACCOUNT UNLOCK;
3.刪除用戶

MySQL 數(shù)據(jù)庫中可以使用 DROP USER 語句來刪除一個或多個用戶賬號以及相關(guān)的權(quán)限。
官方推薦語法格式:

DROP USER [IF EXISTS] user [, user] ...

使用 DROP USER 語句應(yīng)該注意以下幾點:

  • DROP USER 語句可用于刪除一個或多個 MySQL 賬戶,并撤銷其原有權(quán)限。

  • 使用 DROP USER 語句必須擁有 MySQL 中的 mysql 數(shù)據(jù)庫的 DELETE 權(quán)限或全局 CREATE USER 權(quán)限。

  • 在 DROP USER 語句的使用中,若沒有明確地給出賬戶的主機名,則該主機名默認為“%”。

4.用戶授權(quán)

當(dāng)成功創(chuàng)建用戶后,還不能執(zhí)行任何操作,需要為該用戶分配適當(dāng)?shù)脑L問權(quán)限??梢允褂?SHOW GRANT FOR 語句來查詢用戶的權(quán)限。

注意:新創(chuàng)建的用戶只有登錄 MySQL 服務(wù)器的權(quán)限,沒有任何其他權(quán)限,不能進行其他操作。
USAGE ON . 表示該用戶對任何數(shù)據(jù)庫和任何表都沒有權(quán)限。

對于新建的 MySQL 用戶,必須給它授權(quán),可以用 GRANT 語句來實現(xiàn)對新建用戶的授權(quán)。官方推薦語法格式:

GRANT
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    TO user [auth_option] [, user [auth_option]] ...
    [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
    [WITH {GRANT OPTION | resource_option} ...]

GRANT PROXY ON user
    TO user [, user] ...
    [WITH GRANT OPTION]

object_type: {
    TABLE
  | FUNCTION
  | PROCEDURE
}

priv_level: {
    *
  | *.*
  | db_name.*
  | db_name.tbl_name
  | tbl_name
  | db_name.routine_name
}

user:
    (see Section 6.2.4, “Specifying Account Names”)

auth_option: {
    IDENTIFIED BY 'auth_string'
  | IDENTIFIED WITH auth_plugin
  | IDENTIFIED WITH auth_plugin BY 'auth_string'
  | IDENTIFIED WITH auth_plugin AS 'auth_string'
  | IDENTIFIED BY PASSWORD 'auth_string'
}

tls_option: {
    SSL
  | X509
  | CIPHER 'cipher'
  | ISSUER 'issuer'
  | SUBJECT 'subject'
}

resource_option: {
  | MAX_QUERIES_PER_HOUR count
  | MAX_UPDATES_PER_HOUR count
  | MAX_CONNECTIONS_PER_HOUR count
  | MAX_USER_CONNECTIONS count
}

首先大家要知道,權(quán)限是分級別的??梢允谟璧臋?quán)限有如下幾組:

  • 列級別,和表中的一個具體列相關(guān)。例如,可以使用 UPDATE 語句更新表 students 中 student_name 列的值的權(quán)限。

  • 表級別,和一個具體表中的所有數(shù)據(jù)相關(guān)。例如,可以使用 SELECT 語句查詢表 students 的所有數(shù)據(jù)的權(quán)限。

  • 數(shù)據(jù)庫級別,和一個具體的數(shù)據(jù)庫中的所有表相關(guān)。例如,可以在已有的數(shù)據(jù)庫 mytest 中創(chuàng)建新表的權(quán)限。

  • 全局,和 MySQL 中所有的數(shù)據(jù)庫相關(guān)。例如,可以刪除已有的數(shù)據(jù)庫或者創(chuàng)建一個新的數(shù)據(jù)庫的權(quán)限。

下表是所有可授予的權(quán)限及其意義:

權(quán)限意義和可授予級別
ALL [PRIVILEGES]授予在指定的訪問級別的所有權(quán)限,除了 GRANT OPTION和 PROXY。
ALTER啟用ALTER TABLE。級別:全局,數(shù)據(jù)庫,表。
ALTER ROUTINE允許更改或刪除存儲過程。級別:全局,數(shù)據(jù)庫。
CREATE啟用數(shù)據(jù)庫和表創(chuàng)建。級別:全局,數(shù)據(jù)庫,表。
CREATE ROUTINE啟用存儲過程創(chuàng)建。級別:全局,數(shù)據(jù)庫。
CREATE TABLESPACE啟用要創(chuàng)建,更改或刪除的表空間和日志文件組。等級:全局。
CREATE TEMPORARY TABLES啟用CREATE TEMPORARY TABLE。級別:全局,數(shù)據(jù)庫。
CREATE USER允許使用CREATE USER, DROP USER, RENAME USER,和 REVOKE ALL PRIVILEGES。等級:全球。
CREATE VIEW啟用要創(chuàng)建或更改視圖。級別:全局,數(shù)據(jù)庫,表。
DELETE啟用DELETE。級別:全局,數(shù)據(jù)庫,表。
DROP啟用要刪除數(shù)據(jù)庫,表和視圖。級別:全局,數(shù)據(jù)庫,表。
EVENT啟用事件使用。級別:全局,數(shù)據(jù)庫。
EXECUTE使用戶能夠執(zhí)行存儲過程。級別:全局,數(shù)據(jù)庫。
FILE使用戶能夠使服務(wù)器讀取或?qū)懭胛募?。等級:全局?/td>
GRANT OPTION啟用授予其他帳戶或從其他帳戶中刪除的權(quán)限。級別:全局,數(shù)據(jù)庫,表,代理。
INDEX啟用要創(chuàng)建或刪除索引。級別:全局,數(shù)據(jù)庫,表。
INSERT啟用INSERT。級別:全局,數(shù)據(jù)庫,表,列。
LOCK TABLES允許使用LOCK TABLES您擁有該SELECT 權(quán)限的表。級別:全局,數(shù)據(jù)庫。
PROCESS使用戶能夠查看所有進程SHOW PROCESSLIST。等級:全局。
PROXY啟用用戶代理。級別:從用戶到用戶。
REFERENCES啟用外鍵創(chuàng)建。級別:全局,數(shù)據(jù)庫,表,列。
RELOAD啟用FLUSH操作。等級:全局。
REPLICATION CLIENT使用戶可以詢問主服務(wù)器或從服務(wù)器的位置。等級:全局。
REPLICATION SLAVE啟用復(fù)制從屬以從主服務(wù)器讀取二進制日志。等級:全局。
SELECT啟用SELECT。級別:全局,數(shù)據(jù)庫,表,列。
SHOW DATABASES啟用SHOW DATABASES以顯示所有數(shù)據(jù)庫。等級:全局。
SHOW VIEW啟用SHOW CREATE VIEW。級別:全局,數(shù)據(jù)庫,表。
SHUTDOWN啟用mysqladmin shutdown。等級:全局。
SUPER能夠使用如其他命令 CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL,和中mysqladmin的調(diào)試命令。等級:全局。
TRIGGER啟用觸發(fā)操作。級別:全局,數(shù)據(jù)庫,表。
UPDATE啟用UPDATE。級別:全局,數(shù)據(jù)庫,表,列。
USAGE“ no privileges ”的同義詞

其實grant語句可以直接創(chuàng)建用戶并授權(quán),這里建議大家先用create user語句創(chuàng)建好用戶之后再單獨進行授權(quán)。下面我將用示例為大家展示如何授權(quán):

#全局權(quán)限
GRANT super,select on *.* to 'test_user'@'%';

#庫權(quán)限
GRANT select,insert,update,delete,create,alter,execute on `testdb`.* to 'test_user'@'%';

#表權(quán)限
GRANT select,insert on `testdb`.tb to 'test_user'@'%';

#列權(quán)限
GRANT select (col1), insert (col1, col2) ON `testdb`.mytbl to 'test_user'@'%';
5.回收權(quán)限

在MySQL中,可以使用 REVOKE 語句回收一個用戶的權(quán)限,此用戶不會被刪除。

REVOKE
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    FROM user [, user] ...

REVOKE ALL [PRIVILEGES], GRANT OPTION
    FROM user [, user] ...

語法說明如下:

  • REVOKE 語法和 GRANT 語句的語法格式相似,但具有相反的效果。

  • 第一種語法格式用于回收某些特定的權(quán)限。

  • 第二種語法格式用于回收特定用戶的所有權(quán)限。

  • 要使用 REVOKE 語句,必須擁有 MySQL 數(shù)據(jù)庫的全局 CREATE USER 權(quán)限或 UPDATE 權(quán)限。

一般情況下我們先會使用show grants語法查詢該用戶的權(quán)限,如果發(fā)現(xiàn)權(quán)限過大,會用revoke語法回收權(quán)限。示例如下:

#查看用戶權(quán)限
mysql> show grants for 'test_user'@'%';
+-----------------------------------------------------------------------------------------------------+
| Grants for test_user@%                                                                              |
+-----------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test_user'@'%'                                                               |
| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, EXECUTE ON `testdb`.* TO 'test_user'@'%' |
+-----------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

#發(fā)現(xiàn)權(quán)限過大,想回收drop,alter權(quán)限 則可以這樣回收:
REVOKE drop,alter on `testdb`.* from 'test_user'@'%';

“MySQL創(chuàng)建、刪除以及更改用戶的方法與權(quán)限介紹”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI