1.登錄MySQL
mysql -u root -p
2.添加新用戶(允許所有ip訪問)
create user 'test'@'%' identified by '123456';
#test:用戶名,%:所有ip地址,123456:密碼
CREATE DATABASE test_db DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
grant all privileges on `test_db`.* to 'test'@'%' identified by '123456';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON TUTORIALS.* TO 'zara'@'localhost' IDENTIFIED BY 'zara123';
#分配特定的權限
flush privileges;
6. 修改用戶的IP訪問權限
use mysql;
update user set host = '%' where user ='test';
7. 授予管理員權限
grant all privileges on *.* to 'dba'@'1.2.3.4' IDENTIFIED BY 'mypassword' with grant option;
授予用戶dba訪問所有庫和表的權限,*.* 第一個*是所有的庫,第二個*是所有的表
1.2.3.4是可以訪問的IP地址,
with grant option是指允許用戶dba,傳遞其擁有的權限給其他的用戶
8. 授予只讀權限
grant select on *.* to 'select_only_user'@'%' IDENTIFIED BY 'your_password';
授予用戶select_only_user 所有庫和表的select 權限
9. 收回權限
revoke insert on *.* from 'someone'@'%';
收回用戶someone的所有庫和表的插入權限
revoke跟grant語法差不多,只需要把關鍵字 “to” 換成 “from” 即可,並且revoke語句中不需要跟密碼設置。
注意:revoke可以回收所有權限,也可以回收部分權限。
10. 要廢掉已經擁有的with grant option權限
revoke grant option on *.* from somebody;
11. 授予很多的權限
grant insert,select,update on test_db.test_tbl to someone@'localhost' identified by '123456';
grant 權限列表 on 數據庫名.數據表名 to '用戶名'@'主機' identified by '密碼' with grant option;
授予someone用戶insert,select, update等權限
12. 查看某個用戶的權限
show grants for 用戶名@主機;
13. 刪除用戶
drop user '用戶名'@'主機';
14. 刷新權限
flush privileges;
15.
如果給一個用戶設置的權限過大,除了上面使用revoke回收部分權限外,還可以使用grant進行權限修改!
也就是說,grant不僅可以添加權限,也可以修改權限(實際上就是對同一'用戶名'@'ip'設置權限,以覆蓋之前的權限);
grant修改后的權限將覆蓋之前的權限!
那么問題來了:授權后的密碼是密文形式保存的,如果記不住之前授權時的密碼,那么怎樣保證覆蓋后的權限跟之前的權限一致?
莫慌!
grant授權操作中其實不僅可以設置明文密碼,也可以設置密文密碼,如下:
1)grant 權限列表 on 庫.表.* to 用戶名@'ip' identified by "明文密碼"
2)grant 權限列表 on 庫.表.* to 用戶名@'ip' identified by password "密文密碼"
也就是說:
在grant重置權限的時候可以用查看的密文密碼當做新的密碼,然后去覆蓋之前的權限,這就保證了修改前后的密碼一致!
Mysql權限列表
權限 | 權限級別 | 權限說明 |
create | 數據庫、表或索引 | 創建數據庫、表或索引權限 |
drop | 數據庫或表 | 刪除數據庫或表權限 |
grant option | 數據庫、表或保存的程序 | 賦予權限選項 |
references | 數據庫或表 | 外鍵權限 |
alter | 表 | 更改表,比如添加字段、索引、修改字段等 |
delete | 表 | 刪除數據權限 |
index | 表 | 索引權限 |
insert | 表 | 插入權限 |
select | 表 | 查詢權限 |
update | 表 | 更新權限 |
create view | 視圖 | 創建視圖權限 |
show view | 視圖 | 查看視圖權限 |
alter routine | 存儲過程 | 更改存儲過程權限 |
create routine | 存儲過程 | 創建存儲過程權限 |
execute | 存儲過程 | 執行存儲過程權限 |
file | 服務器主機上的文件訪問 | 文件訪問權限 |
create temporary tables | 服務器管理 | 創建臨時表權限 |
lock tables | 服務器管理 | 鎖表權限 |
create user | 服務器管理 | 創建用戶權限 |
proccess | 服務器管理 | 查看進程權限 |
reload | 服務器管理 | 執行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的權限 |
replication client | 服務器管理 | 復制權限 |
replication slave | 服務器管理 | 復制權限 |
show databases | 服務器管理 | 查看數據庫權限 |
shutdown | 服務器管理 | 關閉數據庫權限 |
super | 服務器管理 | 執行kill線程權限 |