一. MySQL 權限的兩個階段
- 第一階段爲連接驗證,主要限制用戶連接 mysql-server 時使用的 ip及密碼。
- 第二階段爲操作檢查,主要檢查用戶執行的指令是否被允許,一般非管理員賬戶不被允許執行
drop、delete 等危險操作。
二. 權限控制安全準則
只授予能滿足需要的最小權限,防止用戶執行危險操作。
2. 限制用戶的登錄主機,防止不速之客登錄數據庫。
3. 禁止或刪除沒有密碼的用戶。
4. 禁止用戶使用弱密碼。
5. 定期清理無效的用戶,回收權限或者刪除用戶。
三.常用操作
1. 創建賬戶、權限授予
- 8.0 之前版本
GRANT ALL PRIVILEGES on
*.*
to'用戶名'
@'主機'
IDENTIFIED BY"密碼"
WITH
GRANT OPTION;
flush privileges;-- 刷新使權限生效
- ALL PRIVILEGES:
授予全部權限, 也可以指定
select
,insert
,update
,delete
,create
,drop
,index
,alter
,grant
,references
,reload
,shutdown
,process
,file
十四個權限。
WITH GRANT OPTION
: 帶有該子句說明允許用戶將自己擁有的權限授予別人。 *.* :
允許操作的數據庫和表- 主機名:
表示允許用戶從哪個主機登錄, % 表示允許從任意主機登錄 - 8.0 之後的版本
CREATE USER
用戶名
@主機
IDENTIFIED BY ‘密碼’; – 創建賬戶
GRANT ALL ON . TO用戶名
@主機
WITH GRANT OPTION; – 授權
2. 修改密碼
update user set authentication_string=password('你的密碼') where user="root"
或者
alter user '用戶名'@'主機' identified with mysql_native_password by '你的密碼';
3. 查看權限
show grants; -- 查看當前用戶的權限
show grants for 'abc'@'localhost'; -- 查看用戶 abc 的權限
4. 回收權限
revoke all privileges on *.* from 'abc'@'localhost'; -- 回收用戶 abc 的所有
權限
revoke grant option on *.* from 'abc'@'localhost'; -- 回收權限的傳遞
5. 刪除用戶
use mysql;
select host, user from user;
drop user 用戶名@'%';
6. 創建一個允許任意主機登錄的賬號
GRANT ALL PRIVILEGES on *.* to 'zhangsan'@'%' IDENTIFIED BY "密碼" WITH GRANT
OPTION;
flush privileges;
- 修改mysql配置文件(不同操作系統,不同MySql版本,配置文件存儲不同,ubuntu18.04配置文
件保存在/etc/mysql/mysql.conf.d/mysqld.cnf; Centos7.7 配合文件保存在 /etc/my.cnf)
sudo vim /etc/my.cnf
將 bind-address=127.0.0.1
代碼註釋掉(如果這段代碼存在的話),讓計算機允許mysql遠程登錄。
- 打開服務器的 3306 端口。
- 使用客戶端遠程登錄到mysql數據庫。
sudo mysql -uzhangsan -h 遠端服務器地址 -P 3306 -p