創(chuàng)建用戶(hù)
數(shù)據(jù)庫(kù)權(quán)限適用于一個(gè)給定數(shù)據(jù)庫(kù)中的所有目標(biāo)朱盐。這些權(quán)限存儲(chǔ)在mysql.db和mysql.host表中似嗤。GRANT ALL PRIVILEGES ON db_name 和REVOKE ALL PRIVILEGES ON db_name只授予和撤銷(xiāo)數(shù)據(jù)庫(kù)權(quán)限。
//創(chuàng)建用戶(hù)test鸦列,'test'@'%'表示可以被遠(yuǎn)程訪問(wèn)
//如果是‘test’@'localhost'发乔,表示只能本地訪問(wèn)
mysql> create user 'test'@'%' identified by '111111';
Query OK, 0 rows affected (0.13 sec)
//為用戶(hù)test授予對(duì)數(shù)據(jù)庫(kù)db_one 的操作權(quán)限
mysql> grant all privileges on db_one to 'test'@'%';
Query OK, 0 rows affected (0.14 sec)
//刷新權(quán)限
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
查看權(quán)限
使用mysql> show grants for 'test'@'%';
或者mysql> show grants for test;
都可以
//授權(quán)之前
mysql> show grants for 'test'@'%';
+-----------------------------------+
| Grants for test@% |
+-----------------------------------+
//這里可以看到默認(rèn)授權(quán)是USAGE茄螃,指的是無(wú)權(quán)限气筋;
| GRANT USAGE ON *.* TO `test`@`%` |
+-----------------------------------+
1 row in set (0.00 sec)
//授權(quán)之后
mysql> show grants for test2;
+---------------------------------------------------+
| Grants for test2@% |
+---------------------------------------------------+
| GRANT USAGE ON *.* TO `test`@`%`
// 從這里可以看出,用戶(hù)test旋圆,對(duì)數(shù)據(jù)庫(kù)db_one,用戶(hù)所有權(quán)限(增宠默、刪、改灵巧、查) |
| GRANT ALL PRIVILEGES ON `db_one`.* TO `test`@`%` |
+---------------------------------------------------+
2 rows in set (0.00 sec)
MySQL授權(quán)命令grant的使用方法
本文實(shí)例搀矫,運(yùn)行于 MySQL 8.0.12 。
查看mysql版本號(hào)mysql> select version();
MySQL 賦予用戶(hù)權(quán)限命令的簡(jiǎn)單格式可概括為:
grant 權(quán)限 on 數(shù)據(jù)庫(kù)對(duì)象 to 用戶(hù)
一刻肄、grant (授權(quán))普通數(shù)據(jù)用戶(hù)瓤球,查詢(xún)、插入敏弃、更新卦羡、刪除 數(shù)據(jù)庫(kù)中所有表數(shù)據(jù)的權(quán)利。
grant select on testdb.* to test@'%' ;
grant insert on testdb.* to test@'%' ;
grant update on testdb.* to test@'%';
grant delete on testdb.* to test@'%';
或者麦到,用一條 MySQL 命令來(lái)替代:
grant select, insert, update, delete on testdb.* to test@'%';
二绿饵、grant (授權(quán))數(shù)據(jù)庫(kù)開(kāi)發(fā)人員,創(chuàng)建表瓶颠、索引拟赊、視圖、存儲(chǔ)過(guò)程粹淋、函數(shù)吸祟。瑟慈。。等權(quán)限屋匕。
- grant 創(chuàng)建葛碧、修改、刪除 MySQL 數(shù)據(jù)表結(jié)構(gòu)權(quán)限炒瘟。
grant create on testdb.* to developer@'192.168.0.%';
grant alter on testdb.* to developer@'192.168.0.%';
grant drop on testdb.* to developer@'192.168.0.%';
- grant 操作 MySQL 外鍵權(quán)限吹埠。
grant references on testdb.* to developer@'192.168.0.%';
- grant 操作 MySQL 臨時(shí)表權(quán)限。
grant create temporary tables on testdb.* to developer@'192.168.0.%';
- grant 操作 MySQL 索引權(quán)限疮装。
grant index on testdb.* to developer@'192.168.0.%';
- grant 操作 MySQL 視圖缘琅、查看視圖源代碼 權(quán)限。
grant create view on testdb.* to developer@'192.168.0.%';
grant show view on testdb.* to developer@'192.168.0.%';
- grant 操作 MySQL 存儲(chǔ)過(guò)程廓推、函數(shù) 權(quán)限刷袍。
grant create routine on testdb.* to developer@'192.168.0.%'; -- now, can show procedure status grant alter routine on testdb.* to developer@'192.168.0.%'; -- now, you can drop a procedure grant execute on testdb.* to developer@'192.168.0.%';
三、grant 普通 DBA 管理 某一個(gè) MySQL 數(shù)據(jù)庫(kù)
的權(quán)限樊展。
grant all privileges on testdb to dba@'localhost'
其中呻纹,關(guān)鍵字 privileges
可以省略。
四专缠、grant 高級(jí) DBA 管理 MySQL 中所有數(shù)據(jù)庫(kù)
的權(quán)限雷酪。
grant all on *.* to dba@'%'
五、MySQL grant 權(quán)限涝婉,分別可以作用在多個(gè)層次上哥力。
- grant 作用在整個(gè) MySQL 服務(wù)器上:
//用戶(hù)test可以查詢(xún) MySQL 中所有數(shù)據(jù)庫(kù)中的表。
grant select on *.* to test@'%';
//用戶(hù)test 可以管理 MySQL 中的所有數(shù)據(jù)庫(kù)墩弯。
grant all on *.* to test@'%';
- . grant 作用在單個(gè)數(shù)據(jù)庫(kù)上:
//test可以查詢(xún) testdb 中的表吩跋。
grant select on testdb.* to test@'%';
- .grant 作用在單個(gè)數(shù)據(jù)表上:
grant select, insert, update, delete on testdb.orders to test@'%';
這里在給一個(gè)用戶(hù)授權(quán)多張表時(shí),可以多次執(zhí)行以上語(yǔ)句渔工。例如:
grant select(user_id,username) on smp.users to mo_user@'%' identified by '123345';
grant select on smp.mo_sms to mo_user@'%' identified by '123345';
- grant 作用在表中的列上:
grant select(id, se, rank) on testdb.apache_log to test@'%';
- grant 作用在存儲(chǔ)過(guò)程锌钮、函數(shù)上:
grant execute on procedure testdb.pr_add to 'test'@''%''
grant execute on function testdb.fn_add to 'test'@''%''
六、查看 MySQL 用戶(hù)權(quán)限
查看當(dāng)前用戶(hù)(自己)權(quán)限:
show grants;
查看其他 MySQL 用戶(hù)權(quán)限:
show grants for test@'%';
或者
show grants for test;
撤銷(xiāo)已經(jīng)賦予給 MySQL 用戶(hù)權(quán)限的權(quán)限引矩。
revoke 跟 grant 的語(yǔ)法差不多梁丘,只需要把關(guān)鍵字 “to” 換成 “from” 即可:
grant all on *.* to test@'%';
revoke all on *.* from test@'%';
MySQL grant、revoke 用戶(hù)權(quán)限注意事項(xiàng)
1. grant, revoke 用戶(hù)權(quán)限后脓魏,該用戶(hù)只有重新連接 MySQL 數(shù)據(jù)庫(kù)兰吟,權(quán)限才能生效。
2. 如果想讓授權(quán)的用戶(hù)茂翔,也可以將這些權(quán)限 grant 給其他用戶(hù)混蔼,需要選項(xiàng) “grant option“
grant select on testdb.* to test@'%' with grant option;
這個(gè)特性一般用不到。實(shí)際中珊燎,數(shù)據(jù)庫(kù)權(quán)限最好由 DBA 來(lái)統(tǒng)一管理惭嚣。