1. 程式人生 > >深入理解 MySQL 使用者和許可權

深入理解 MySQL 使用者和許可權

一. 使用者

1 建立使用者(這裡的使用者不可使用,在分配許可權後可正常登陸)
  • 只建立使用者

    CREATE USER username IDENTIFIED BY 'password';
  • 建立使用者的同時授予許可權

    GRANT ALL ON databasename.* TO [email protected]'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
2 刪除使用者
DROP USER [email protected];
3 修改使用者密碼
  • 命令修改
SET PASSWORD
FOR username@localhost = password('newpassword');
  • 更新 User 表
use mysql;
UPDATE USER SET password=password('newpassword') WHERE user='username' and host='localhost';
FLUSH PRIVILEGES;
  • mysqladmin
mysqladmin -uroot -pold_password password new_password
4 解決忘記root密碼
  • 關閉 mysql 服務

  • 進入mysql/bin 目錄

  • 輸入mysqld --skip-grant-tables

    • –skip-grant-tables :啟動MySQL服務的時候跳過許可權表認證
  • 開啟新終端,進入mysql/bin 目錄

  • 開啟mysql命令列

    use mysql;
    UPDATE USER SET password=password('newpassword') WHERE user='username' and host='localhost';
    FLUSH PRIVILEGES;

二. 許可權

!!!注意:在每次執行完分配許可權命令後,需要重新整理許可權

FLUSH PRIVILEGES;
1 在多個層次上授予許可權
  • 伺服器

    GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';
  • 資料庫

    GRANT ALL PRIVILEGES ON databasename.* TO 'username'@'localhost';
  • 資料表

    GRANT ALL PRIVILEGES ON databasename.tablename TO 'username'@'localhost';
  • 資料表的列

    GRANT SELECT(id, col1, col2) ON databasename.tablename TO 'username'@'localhost';
  • 儲存過程

    GRANT EXECUTE ON PROCEDURE databasename.tablename TO 'username'@'localhost';
  • 函式

    GRANT EXECUTE ON FUNCTION databasename.tablename TO 'username'@'localhost';
2 對不同使用者角色的授權(許可權可自選,這裡只是參考)
  • 為普通使用者新增許可權

    GRANT SELECT, INSERT, UPDATE, DELETE ON databasename.* TO 'username'@'%';
  • 為開發者新增許可權

    GRANT CREATE, ALTER, DROP, REFERENCES ON databasename.* TO 'username'@'192.168.0.%';
  • 為普通 DBA 新增許可權

    GRANT ALL PRIVILEGES ON databasename.* TO 'username'@'localhost';
  • 為高階 DBA 新增許可權

    GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';
3 檢視授權
 SHOW GRANTS FOR username;
4 撤銷在所有資料庫上的許可權
REVOKE ALL PRIVILEGES ON *.* FROM 'username'@'localhost';
5 命令分析
  • GRANT :執行命令詞,一般為動詞
  • ALL:賦予許可權名,參考下面的許可權列表
  • *.*:前者表示資料庫名,後者表示資料表名
    • databasename.*:表示在databasename中的所有表
    • databasename.tablename:表示在databasename中的tablename表
  • 'username'@'localhost':前者為使用者名稱,後者為接入的IP

    • 'username'@'%':可以從任何地點接入

    • 'username'@'192.168.1.%':192.168.1 IP下的區域網都可接入

    • 'username'@'%.website.com':可以從website.com接入

    • 'username'@'localhost': 只可以本機登入

    • localhost 通過UNIXsocket連線,不會被解析為IP地址

      127.0.0.1 通過TCP/IP協議連線,只能本機訪問

      ::1 ::1 支援ipv6,等同於ipv4的127.0.0.1

6 許可權列表
許可權名 含義
ALTER 修改表和索引
CREATE 建立資料庫和表
DELETE 刪除表中已有的記錄
DROP 拋棄(刪除)資料庫和表
INDEX 建立或拋棄索引
INSERT 向表中插入新行
REFERENCE 外來鍵許可權
SELECT 檢索表中的記錄
UPDATE 修改現存表記錄
FILE 讀或寫伺服器上的檔案
PROCESS 檢視伺服器中執行的執行緒資訊或殺死執行緒
RELOAD 過載授權表或清空日誌、主機快取或表快取
SHUTDOWN 關閉伺服器
ALL 所有許可權,ALL PRIVILEGES同義詞
USAGE 特殊的 “無許可權” 許可權