您好,登錄后才能下訂單哦!
本篇內容介紹了“MySQL創建、刪除以及更改用戶的方法與權限介紹”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
官方推薦創建語法為:
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 }
通常我們常用的創建語法為:
CREATE USER <用戶名> [ IDENTIFIED ] BY [ PASSWORD ] <口令>
語法說明如下:
1) <用戶名>
指定創建用戶賬號,格式為 'user_name'@'host_name'。這里user_name
是用戶名,host_name
為主機名,即用戶連接 MySQL 時所在主機的名字。若在創建的過程中,只給出了賬戶的用戶名,而沒指定主機名,則主機名默認為“%”,表示一組主機。
2) PASSWORD
可選項,用于指定散列口令,即若使用明文設置口令,則需忽略PASSWORD
關鍵字;若不想以明文設置口令,且知道 PASSWORD() 函數返回給密碼的散列值,則可以在口令設置語句中指定此散列值,但需要加上關鍵字PASSWORD
。
3) IDENTIFIED BY子句
用于指定用戶賬號對應的口令,若該用戶賬號無口令,則可省略此子句。
4) <口令>
指定用戶賬號的口令,在IDENTIFIED BY
關鍵字或PASSWOED
關鍵字之后。給定的口令值可以是只由字母和數字組成的明文,也可以是通過 PASSWORD() 函數得到的散列值。
使用 CREATE USER 語句應該注意以下幾點:
如果使用 CREATE USER 語句時沒有為用戶指定口令,那么 MySQL 允許該用戶可以不使用口令登錄系統,然而從安全的角度而言,不推薦這種做法。
使用 CREATE USER 語句必須擁有 MySQL 中 mysql 數據庫的 INSERT 權限或全局 CREATE USER 權限。
使用 CREATE USER 語句創建一個用戶賬號后,會在系統自身的 MySQL 數據庫的 user 表中添加一條新記錄。若創建的賬戶已經存在,則語句執行時會出現錯誤。
新創建的用戶擁有的權限很少。他們可以登錄 MySQL,只允許進行不需要權限的操作,如使用 SHOW 語句查詢所有存儲引擎和字符集的列表等。
如果兩個用戶具有相同的用戶名和不同的主機名,MySQL 會將他們視為不同的用戶,并允許為這兩個用戶分配不同的權限集合。
示例:
#注意:test_user@'%' 和 test_user@'localhost' 是兩個不同的用戶 CREATE USER 'test_user'@'%' identified by '123456'; CREATE USER 'test_user'@'localhost' identified by '123456789';
更改用戶信息主要包括重命名,改密碼,鎖定或解鎖用戶。下面將通過案例為大家展示這些用法:
#重命名用戶 RENAME USER 'test_user'@'%' to 'test'@'%'; #修改密碼 ALTER USER 'test'@'%' identified by '123456789'; #鎖定或解鎖用戶 ALTER USER 'test'@'%' ACCOUNT LOCK; ALTER USER 'test'@'%' ACCOUNT UNLOCK;
MySQL 數據庫中可以使用 DROP USER 語句來刪除一個或多個用戶賬號以及相關的權限。
官方推薦語法格式:
DROP USER [IF EXISTS] user [, user] ...
使用 DROP USER 語句應該注意以下幾點:
DROP USER 語句可用于刪除一個或多個 MySQL 賬戶,并撤銷其原有權限。
使用 DROP USER 語句必須擁有 MySQL 中的 mysql 數據庫的 DELETE 權限或全局 CREATE USER 權限。
在 DROP USER 語句的使用中,若沒有明確地給出賬戶的主機名,則該主機名默認為“%”。
當成功創建用戶后,還不能執行任何操作,需要為該用戶分配適當的訪問權限。可以使用 SHOW GRANT FOR 語句來查詢用戶的權限。
注意:新創建的用戶只有登錄 MySQL 服務器的權限,沒有任何其他權限,不能進行其他操作。
USAGE ON . 表示該用戶對任何數據庫和任何表都沒有權限。
對于新建的 MySQL 用戶,必須給它授權,可以用 GRANT 語句來實現對新建用戶的授權。官方推薦語法格式:
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 }
首先大家要知道,權限是分級別的。可以授予的權限有如下幾組:
列級別,和表中的一個具體列相關。例如,可以使用 UPDATE 語句更新表 students 中 student_name 列的值的權限。
表級別,和一個具體表中的所有數據相關。例如,可以使用 SELECT 語句查詢表 students 的所有數據的權限。
數據庫級別,和一個具體的數據庫中的所有表相關。例如,可以在已有的數據庫 mytest 中創建新表的權限。
全局,和 MySQL 中所有的數據庫相關。例如,可以刪除已有的數據庫或者創建一個新的數據庫的權限。
下表是所有可授予的權限及其意義:
權限 | 意義和可授予級別 |
---|---|
ALL [PRIVILEGES] | 授予在指定的訪問級別的所有權限,除了 GRANT OPTION 和 PROXY 。 |
ALTER | 啟用ALTER TABLE 。級別:全局,數據庫,表。 |
ALTER ROUTINE | 允許更改或刪除存儲過程。級別:全局,數據庫。 |
CREATE | 啟用數據庫和表創建。級別:全局,數據庫,表。 |
CREATE ROUTINE | 啟用存儲過程創建。級別:全局,數據庫。 |
CREATE TABLESPACE | 啟用要創建,更改或刪除的表空間和日志文件組。等級:全局。 |
CREATE TEMPORARY TABLES | 啟用CREATE TEMPORARY TABLE 。級別:全局,數據庫。 |
CREATE USER | 允許使用CREATE USER , DROP USER , RENAME USER ,和 REVOKE ALL PRIVILEGES 。等級:全球。 |
CREATE VIEW | 啟用要創建或更改視圖。級別:全局,數據庫,表。 |
DELETE | 啟用DELETE 。級別:全局,數據庫,表。 |
DROP | 啟用要刪除數據庫,表和視圖。級別:全局,數據庫,表。 |
EVENT | 啟用事件使用。級別:全局,數據庫。 |
EXECUTE | 使用戶能夠執行存儲過程。級別:全局,數據庫。 |
FILE | 使用戶能夠使服務器讀取或寫入文件。等級:全局。 |
GRANT OPTION | 啟用授予其他帳戶或從其他帳戶中刪除的權限。級別:全局,數據庫,表,代理。 |
INDEX | 啟用要創建或刪除索引。級別:全局,數據庫,表。 |
INSERT | 啟用INSERT 。級別:全局,數據庫,表,列。 |
LOCK TABLES | 允許使用LOCK TABLES 您擁有該SELECT 權限的表。級別:全局,數據庫。 |
PROCESS | 使用戶能夠查看所有進程SHOW PROCESSLIST 。等級:全局。 |
PROXY | 啟用用戶代理。級別:從用戶到用戶。 |
REFERENCES | 啟用外鍵創建。級別:全局,數據庫,表,列。 |
RELOAD | 啟用FLUSH 操作。等級:全局。 |
REPLICATION CLIENT | 使用戶可以詢問主服務器或從服務器的位置。等級:全局。 |
REPLICATION SLAVE | 啟用復制從屬以從主服務器讀取二進制日志。等級:全局。 |
SELECT | 啟用SELECT 。級別:全局,數據庫,表,列。 |
SHOW DATABASES | 啟用SHOW DATABASES 以顯示所有數據庫。等級:全局。 |
SHOW VIEW | 啟用SHOW CREATE VIEW 。級別:全局,數據庫,表。 |
SHUTDOWN | 啟用mysqladmin shutdown。等級:全局。 |
SUPER | 能夠使用如其他命令 CHANGE MASTER TO , KILL , PURGE BINARY LOGS , SET GLOBAL ,和中mysqladmin的調試命令。等級:全局。 |
TRIGGER | 啟用觸發操作。級別:全局,數據庫,表。 |
UPDATE | 啟用UPDATE 。級別:全局,數據庫,表,列。 |
USAGE | “ no privileges ”的同義詞 |
其實grant語句可以直接創建用戶并授權,這里建議大家先用create user語句創建好用戶之后再單獨進行授權。下面我將用示例為大家展示如何授權:
#全局權限 GRANT super,select on *.* to 'test_user'@'%'; #庫權限 GRANT select,insert,update,delete,create,alter,execute on `testdb`.* to 'test_user'@'%'; #表權限 GRANT select,insert on `testdb`.tb to 'test_user'@'%'; #列權限 GRANT select (col1), insert (col1, col2) ON `testdb`.mytbl to 'test_user'@'%';
在MySQL中,可以使用 REVOKE 語句回收一個用戶的權限,此用戶不會被刪除。
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 語句的語法格式相似,但具有相反的效果。
第一種語法格式用于回收某些特定的權限。
第二種語法格式用于回收特定用戶的所有權限。
要使用 REVOKE 語句,必須擁有 MySQL 數據庫的全局 CREATE USER 權限或 UPDATE 權限。
一般情況下我們先會使用show grants語法查詢該用戶的權限,如果發現權限過大,會用revoke語法回收權限。示例如下:
#查看用戶權限 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) #發現權限過大,想回收drop,alter權限 則可以這樣回收: REVOKE drop,alter on `testdb`.* from 'test_user'@'%';
“MySQL創建、刪除以及更改用戶的方法與權限介紹”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。