MySQL必知必會—概念篇mysql
推薦幾個 MySQL 安裝和鏈接的經驗文章git
鏈接數據庫須要如下信息:github
例以下面的指令:sql
mysql -u root -h localhost -P 3306 -p
MySQL 服務器的安全基礎是:用戶應該對他們須要的數據具備適當的訪問權,既不能多也不能少。數據庫
須要給用戶提供他們所需的訪問權,且僅提供他們所需的訪問權。這就是所謂的訪問控制。訪問控制的目的不單單是防止用戶的惡意企圖,訪問控制也有助於避免很常見的無心識錯誤的結果,如錯打 MySQL 語句,在不合適的數據庫中操做或其餘一些用戶錯誤。segmentfault
MySQL 用戶帳號和信息存儲在名爲 mysql 的 MySQL數據庫中。通常只有在須要得到全部用戶帳號列表時纔會直接訪問。安全
# 輸入 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以上的新版本已經將建立帳戶和賦予權限分開了,因此不能再用這種方法建立用戶了)
# mysql8.0如下 GRANT SELECT ON *.* TO chenfangxu@'%' IDENTIFIED BY '123456';
三、使用 INSERT 直接插入行到 user 表來增長用戶(不建議)
在建立用戶帳號後,必須接着分配訪問權限。新建立的用戶帳號沒有訪問權限。他們能登陸 MySQL ,但不能看到數據,不能執行任何數據庫操做。服務器
查看賦予用戶帳號的權限
SHOW GRANTS FOR
# 輸入 SHOW GRANTS FOR chenfangxu; # 輸出 +----------------------------------------+ | Grants for chenfangxu@% | +----------------------------------------+ | GRANT USAGE ON *.* TO `chenfangxu`@`%` | +----------------------------------------+
權限 USAGE ON *.*
,USAGE表示根本沒有權限,這句話就是說在任意數據庫和任意表上對任何東西沒有權限。ui
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必知必會