深入理解 MySQL 使用者和許可權
阿新 • • 發佈:2019-01-04
一. 使用者
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 | 特殊的 “無許可權” 許可權 |