MySQL用户授权
成功創(chuàng)建用戶賬戶后,還不能執(zhí)行任何操作,需要為該用戶分配適當(dāng)?shù)脑L問(wèn)權(quán)限。可以使用 SHOW GRANT FOR 語(yǔ)句來(lái)查詢用戶的權(quán)限。
注意:新創(chuàng)建的用戶只有登錄 MySQL 服務(wù)器的權(quán)限,沒(méi)有任何其他權(quán)限,不能進(jìn)行其他操作。
USAGE ON*.* 表示該用戶對(duì)任何數(shù)據(jù)庫(kù)和任何表都沒(méi)有權(quán)限。
授予用戶權(quán)限
對(duì)于新建的 MySQL 用戶,必須給它授權(quán),可以用 GRANT 語(yǔ)句來(lái)實(shí)現(xiàn)對(duì)新建用戶的授權(quán)。
語(yǔ)法格式:
GRANT <權(quán)限類型> [ ( <列名> ) ] [ , <權(quán)限類型> [ ( <列名> ) ] ] ON <對(duì)象> <權(quán)限級(jí)別> TO <用戶> 其中<用戶>的格式: <用戶名> [ IDENTIFIED ] BY [ PASSWORD ] <口令> [ WITH GRANT OPTION] | MAX_QUERIES_PER_HOUR <次數(shù)> | MAX_UPDATES_PER_HOUR <次數(shù)> | MAX_CONNECTIONS_PER_HOUR <次數(shù)> | MAX_USER_CONNECTIONS <次數(shù)>語(yǔ)法說(shuō)明如下:
1 <列名>
可選項(xiàng)。用于指定權(quán)限要授予給表中哪些具體的列。
2 ON 子句
用于指定權(quán)限授予的對(duì)象和級(jí)別,如在 ON 關(guān)鍵字后面給出要授予權(quán)限的數(shù)據(jù)庫(kù)名或表名等。
3 <權(quán)限級(jí)別>
用于指定權(quán)限的級(jí)別。可以授予的權(quán)限有如下幾組:
對(duì)應(yīng)地,在 GRANT 語(yǔ)句中可用于指定權(quán)限級(jí)別的值有以下幾類格式:
*:表示當(dāng)前數(shù)據(jù)庫(kù)中的所有表。*.*:表示所有數(shù)據(jù)庫(kù)中的所有表。db_name.*:表示某個(gè)數(shù)據(jù)庫(kù)中的所有表,db_name 指定數(shù)據(jù)庫(kù)名。db_name.tbl_name:表示某個(gè)數(shù)據(jù)庫(kù)中的某個(gè)表或視圖,db_name 指定數(shù)據(jù)庫(kù)名,tbl_name 指定表名或視圖名。tbl_name:表示某個(gè)表或視圖,tbl_name 指定表名或視圖名。db_name.routine_name:表示某個(gè)數(shù)據(jù)庫(kù)中的某個(gè)存儲(chǔ)過(guò)程或函數(shù),routine_name 指定存儲(chǔ)過(guò)程名或函數(shù)名。TO 子句:用來(lái)設(shè)定用戶口令,以及指定被賦予權(quán)限的用戶 user。若在 TO 子句中給系統(tǒng)中存在的用戶指定口令,則新密碼會(huì)將原密碼覆蓋;如果權(quán)限被授予給一個(gè)不存在的用戶,MySQL 會(huì)自動(dòng)執(zhí)行一條 CREATE USER 語(yǔ)句來(lái)創(chuàng)建這個(gè)用戶,但同時(shí)必須為該用戶指定口令。GRANT語(yǔ)句中的<權(quán)限類型>的使用說(shuō)明如下:
1 授予數(shù)據(jù)庫(kù)權(quán)限時(shí),<權(quán)限類型>可以指定為以下值:
SELECT:表示授予用戶可以使用 SELECT 語(yǔ)句訪問(wèn)特定數(shù)據(jù)庫(kù)中所有表和視圖的權(quán)限。INSERT:表示授予用戶可以使用 INSERT 語(yǔ)句向特定數(shù)據(jù)庫(kù)中所有表添加數(shù)據(jù)行的權(quán)限。DELETE:表示授予用戶可以使用 DELETE 語(yǔ)句刪除特定數(shù)據(jù)庫(kù)中所有表的數(shù)據(jù)行的權(quán)限。UPDATE:表示授予用戶可以使用 UPDATE 語(yǔ)句更新特定數(shù)據(jù)庫(kù)中所有數(shù)據(jù)表的值的權(quán)限。REFERENCES:表示授予用戶可以創(chuàng)建指向特定的數(shù)據(jù)庫(kù)中的表外鍵的權(quán)限。CREATE:表示授權(quán)用戶可以使用 CREATE TABLE 語(yǔ)句在特定數(shù)據(jù)庫(kù)中創(chuàng)建新表的權(quán)限。ALTER:表示授予用戶可以使用 ALTER TABLE 語(yǔ)句修改特定數(shù)據(jù)庫(kù)中所有數(shù)據(jù)表的權(quán)限。SHOW VIEW:表示授予用戶可以查看特定數(shù)據(jù)庫(kù)中已有視圖的視圖定義的權(quán)限。CREATE ROUTINE:表示授予用戶可以為特定的數(shù)據(jù)庫(kù)創(chuàng)建存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)的權(quán)限。ALTER ROUTINE:表示授予用戶可以更新和刪除數(shù)據(jù)庫(kù)中已有的存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)的權(quán)限。INDEX:表示授予用戶可以在特定數(shù)據(jù)庫(kù)中的所有數(shù)據(jù)表上定義和刪除索引的權(quán)限。DROP:表示授予用戶可以刪除特定數(shù)據(jù)庫(kù)中所有表和視圖的權(quán)限。CREATE TEMPORARY TABLES:表示授予用戶可以在特定數(shù)據(jù)庫(kù)中創(chuàng)建臨時(shí)表的權(quán)限。CREATE VIEW:表示授予用戶可以在特定數(shù)據(jù)庫(kù)中創(chuàng)建新的視圖的權(quán)限。EXECUTE ROUTINE:表示授予用戶可以調(diào)用特定數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程和存儲(chǔ)函數(shù)的權(quán)限。LOCK TABLES:表示授予用戶可以鎖定特定數(shù)據(jù)庫(kù)的已有數(shù)據(jù)表的權(quán)限。ALL 或 ALL PRIVILEGES:表示以上所有權(quán)限。2 授予表權(quán)限時(shí),<權(quán)限類型>可以指定為以下值:
SELECT:授予用戶可以使用 SELECT 語(yǔ)句進(jìn)行訪問(wèn)特定表的權(quán)限。INSERT:授予用戶可以使用 INSERT 語(yǔ)句向一個(gè)特定表中添加數(shù)據(jù)行的權(quán)限。DELETE:授予用戶可以使用 DELETE 語(yǔ)句從一個(gè)特定表中刪除數(shù)據(jù)行的權(quán)限。DROP:授予用戶可以刪除數(shù)據(jù)表的權(quán)限。UPDATE:授予用戶可以使用 UPDATE 語(yǔ)句更新特定數(shù)據(jù)表的權(quán)限。ALTER:授予用戶可以使用 ALTER TABLE 語(yǔ)句修改數(shù)據(jù)表的權(quán)限。REFERENCES:授予用戶可以創(chuàng)建一個(gè)外鍵來(lái)參照特定數(shù)據(jù)表的權(quán)限。CREATE:授予用戶可以使用特定的名字創(chuàng)建一個(gè)數(shù)據(jù)表的權(quán)限。INDEX:授予用戶可以在表上定義索引的權(quán)限。ALL 或 ALL PRIVILEGES:所有的權(quán)限名。3 授予列權(quán)限時(shí),<權(quán)限類型>的值只能指定為 SELECT、INSERT 和 UPDATE,同時(shí)權(quán)限的后面需要加上列名列表 column-list。
4 最有效率的權(quán)限是用戶權(quán)限。
授予用戶權(quán)限時(shí),<權(quán)限類型>除了可以指定為授予數(shù)據(jù)庫(kù)權(quán)限時(shí)的所有值之外,還可以是下面這些值:
使用 GRANT 語(yǔ)句創(chuàng)建一個(gè)新的用戶 testUser,密碼為 testPwd。用戶 testUser 對(duì)所有的數(shù)據(jù)有查詢、插入權(quán)限,并授予 GRANT 權(quán)限。輸入的 SQL 語(yǔ)句和執(zhí)行過(guò)程如下所示。
mysql> GRANT SELECT,INSERT ON *.*-> TO 'testUser'@'localhost'-> IDENTIFIED BY 'testPwd'-> WITH GRANT OPTION; Query OK, 0 rows affected, 1 warning (0.05 sec)使用 SELECT 語(yǔ)句查詢用戶 testUser 的權(quán)限,如下所示。
mysql> SELECT Host,User,Select_priv,Grant_priv-> FROM mysql.user-> WHERE User='testUser'; +-----------+----------+-------------+------------+ | Host | User | Select_priv | Grant_priv | +-----------+----------+-------------+------------+ | localhost | testUser | Y | Y | +-----------+----------+-------------+------------+ 1 row in set (0.01 sec)總結(jié)
- 上一篇: Redis中使用Lua语言
- 下一篇: MySQL修改数据表