MySQL必知必會—概念篇mysql
推薦幾個 MySQL 安裝和鏈接的經驗文章git
鏈接數據庫須要如下信息:github
例以下面的指令:sql
mysql -u root -h localhost -P 3306 -p
複製代碼
MySQL 服務器的安全基礎是:用戶應該對他們須要的數據具備適當的訪問權,既不能多也不能少。數據庫
須要給用戶提供他們所需的訪問權,且僅提供他們所需的訪問權。這就是所謂的訪問控制。訪問控制的目的不單單是防止用戶的惡意企圖,訪問控制也有助於避免很常見的無心識錯誤的結果,如錯打 MySQL 語句,在不合適的數據庫中操做或其餘一些用戶錯誤。安全
MySQL 用戶帳號和信息存儲在名爲 mysql 的 MySQL數據庫中。通常只有在須要得到全部用戶帳號列表時纔會直接訪問。bash
# 輸入
USE mysql;
SELECT user FROM user;
# 輸出
+------------------+
| user |
+------------------+
| test |
| root |
+------------------+
複製代碼
一、使用 CREATE USER 語句(推薦)服務器
# 輸入
CREATE USER chenfangxu IDENTIFIED BY '123456';
SELECT user FROM user;
#輸出
+------------------+
| user |
+------------------+
| chenfangxu |
| test |
| root |
+------------------+
複製代碼
二、GRANT 語句也能夠建立用戶帳號。(MySQL 8.0以上的新版本已經將建立帳戶和賦予權限分開了,因此不能再用這種方法建立用戶了)post
# mysql8.0如下
GRANT SELECT ON *.* TO chenfangxu@'%' IDENTIFIED BY '123456';
複製代碼
三、使用 INSERT 直接插入行到 user 表來增長用戶(不建議)ui
在建立用戶帳號後,必須接着分配訪問權限。新建立的用戶帳號沒有訪問權限。他們能登陸 MySQL ,但不能看到數據,不能執行任何數據庫操做。
查看賦予用戶帳號的權限
SHOW GRANTS FOR
# 輸入
SHOW GRANTS FOR chenfangxu;
# 輸出
+----------------------------------------+
| Grants for chenfangxu@% |
+----------------------------------------+
| GRANT USAGE ON *.* TO `chenfangxu`@`%` |
+----------------------------------------+
複製代碼
權限 USAGE ON *.*
,USAGE表示根本沒有權限,這句話就是說在任意數據庫和任意表上對任何東西沒有權限。
chenfangxu@%
由於用戶定義爲 user@host
, MySQL的權限用用戶名和主機名結合定義,若是不指定主機名,則使用默認的主機名%
(即授予用戶訪問權限而無論主機名)。
添加(更新)用戶權限
GRANT privileges ON databasename.tablename TO 'username'@'host';
# 輸入
GRANT SELECT ON performance_schema.* TO chenfangxu@'%';
SHOW GRANTS FOR chenfangxu;
# 輸出
+------------------------------------------------------------+
| Grants for chenfangxu@% |
+------------------------------------------------------------+
| GRANT USAGE ON *.* TO `chenfangxu`@`%` |
| GRANT SELECT ON `performance_schema`.* TO `chenfangxu`@`%` |
+------------------------------------------------------------+
複製代碼
撤銷用戶的權限
REVOKE privileges ON databasename.tablename FROM 'username'@'host';
# 輸入
REVOKE SELECT ON performance_schema.* FROM chenfangxu@'%';
SHOW GRANTS FOR chenfangxu;
#輸出
+----------------------------------------+
| Grants for chenfangxu@% |
+----------------------------------------+
| GRANT USAGE ON *.* TO `chenfangxu`@`%` |
+----------------------------------------+
複製代碼
重命名:
RENAME USER 'username' TO 'newusername';
# 輸入
RENAME USER test TO test1;
SELECT user FROM user;
# 輸出
+------------------+
| user |
+------------------+
| test1 |
| root |
+------------------+
複製代碼
更改用戶密碼:
SET PASSWORD FOR 'username'@'host' = 'newpassword';
SET PASSWORD FOR chenfangxu@'%' = '654321';
# 更改root密碼
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpasswd';
複製代碼
刪除用戶:
DROP USER 'username'@'host';
# 輸入
DROP USER chenfangxu@'%';
SELECT user FROM user;
#輸出
+------------------+
| user |
+------------------+
| test |
| root |
+------------------+
複製代碼
MySQL 5 之前, DROP USER 只能用來刪除用戶帳號,不能刪除相關的權限。所以,若是使用舊版的 MySQL 須要先用 REVOKE 刪除與帳號相關的權限,而後再用 DROP USER 刪除帳號。
# 建立數據庫,如建立 learnsql 數據庫
CREATE DATABASE learnsql;
# 選擇數據庫,如選擇 learnsql 數據庫
USE learnsql;
# 顯示數據庫列表
SHOW DATABASES;
# 顯示數據庫內的表的列表
SHOW TABLES;
# 顯示錶中每一列的詳細信息
SHOW COLUMNS FROM customers;
複製代碼
MySQL 中 DESCRIBE 能夠做爲 SHOW COLUMNS FROM 的快捷方式。
# 如下兩種命令結果相同
SHOW COLUMNS FROM customers;
DESCRIBE customers;
複製代碼
一個持續更新的github筆記,連接地址:Front-End-Basics,能夠watch,也能夠star。
此篇文章的地址:MySql必知必會