MySQL數據庫的權限管理

一. MySQL 權限的兩個階段

  1. 第一階段爲連接驗證,主要限制用戶連接 mysql-server 時使用的 ip及密碼。
  2. 第二階段爲操作檢查,主要檢查用戶執行的指令是否被允許,一般非管理員賬戶不被允許執行
    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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章