MySQL的安全機制
Mysql用戶管理
mysql -h 192.168.1.17 -P 3306 -uroot -p123 mysql -e ‘select user,host from user’
[root@master-node ~]# mysql -h192.168.1.17 -P3306 -uroot -p123456 mysql -e 'select user,host from user'
+--------+----------------+
| user | host |
+--------+----------------+
| root | % |
| root | 127.0.0.1 |
| root | 192.168.1.0/24 |
| root | ::1 |
| root | localhost |
| zabbix | localhost |
+--------+----------------+
[root@master-node ~]#
-h 主機名
-P 服務器端口
-u 用戶名
-p 密碼
-e 連接sql語句
\s獲取當前服務器狀態信息
Quit退出登錄
創建用戶
方法一 create user語句創建
實例:create user user1@’localhost’ identified by ‘123456’;
方法二 insert語句創建 不常用
實例:insert into mysql.user(user,host,password,ssl_cipher,x509_issuer,x509_subject)
Values (‘user2’,’localhost’,’password(‘123456’),’’,’’);
flush privileges;
方法三 grant語句創建 //同時授權,最常用
GRANT ALL ON db1.* TO 'username'@'localhost' IDENTIFIED BY 'mypass' WITH GRANT OPTION
刪除用戶
方法一drop user語句刪除
drop user user1@’localhost’;
方法二delect語句刪除
delect from mysql.user where user=’user2’ and host=’localhsot’;
flush privileges;
修改密碼
- root修改自己密碼
方法一
mysqladmin -uroot -p1234567 password '123456'
方法二
Update mysql.user set password=password(‘new password’) where user=’root’ and host=’localhost’;
Flush privileges;
方法三,不用刷新的
set password=password(‘new password’);
- Root修改其他用戶密碼
方法一
Set password for 'user3'@'localhost'=password('new_password');
方法二
Update mysql.user set password=password('new passowrd') where user='’'user3' and host='localhost';
Flush privileges;
方法三
Grant select on '*' to 'user3'@'localhost' identified by 'mypass';
Flush privileges;
- 普通用戶修改密碼
set password=password('new passowrd');
丟失root用戶密碼
Vim /etc/my.cnf
[mysqld]
Skip-grant-tables //增加這一句表示跳過授權表也就是跳過密碼驗證
...
保存退出
Service mysqld restart //重啓mysq服務器
登陸mysql
Mysql -uroot
Update mysql.user set password=password(‘new password’) where user=’root’ and host=’localhost’;
Flush privileges;
Mysql權限管理
權限應用的順序:
user(Y/N)==>DB==>tables_priv==>colums_priv
語法格式
grant 權限列表 on 庫名.表名 to 用戶名@'客戶端主機' [identified by '密碼' with grant option]
1)權限列表 all 所有權限(不包括授權權限)
select update
2)庫名.表名 *.* 所有數據庫下的所有表
數據庫.* 指定數據庫下的所有表 (最常用)
數據庫名稱.表名稱 指定數據庫的指定表
select(clo1),insert(col1,col2) on mydb.mytable 只能對這個庫下的這張表第一列有讀權限,第一第二列有插入權限
3)客戶端主機
對象列表(爲誰賦值了上面的增刪改查的這些權限)
% 所有主機
192.168.2.% 192.168.2.0網段的所有主機
192.168.2.8(localhost) 指定主機
4)With_option參數
grant option 授權選項
Max_queries_per_hour; 定義每小時允許查詢的查詢數
Max_updates_per_hour; 定義每小時允許更新的查詢數
Max_connections_per_hour; 定義每小時可以建立的連接數
Max_user_connections; 定義單個用戶同時可以建立的連接數
示例:
# 給tom1用戶所有庫所有表的權限,沒有授權權限,允許任何ip通過此用戶連接數據庫
grant all on *.* to tom1@'%' identified by '123123';
# 給tom2用戶所有庫所有表的權限,有授權權限,相當於root用戶,允許任何ip通過此用戶連接數據庫
grant all on *.* to tom2@'%' identified by '123123' with grant option;
# 給tom3用戶db1庫下所有表的權限,允許任何ip通過此用戶連接數據庫
grant all on db1.* to tom3@'%' identified by '123123';
# 給tom4用戶db1庫下所有表的權限,允許任何192.168.1.0網段的主機通過此用戶連接數據庫
grant all on db1.* to tom4@'192.168.1.%' identified by '123123';
....
刪除收回權限
# 查看權限
show grants\G;
show grants for zabbix@'localhost'\G;
# 回收權限
revoke 權限列表 on 對象列表 from 用戶列表
revoke all on pro.* from lisi@localhost; //回收所有權限
grant select,delete on *.* to tom4@'%'; //回收部分權限
# 權限回收後在刪除用戶
drop user tom4@'192.168.1.%';
注意:
5.6版本以前在日常管理中在刪除用戶之前應該是先刪除該用戶所有權限,再刪除該用戶,不然以後如果再創建相同的用戶的話權限就還是存在的,這是不可以的,5.7後刪除用戶是權限也一併自動刪除了。