常用的 MySQL 指令

查看 MySQL 帳號的權限

1
2
3
4
5
6
7
8
9
10
11
12
# 連線
mysql -u root -p

# 列出所有 user
SELECT user,host FROM mysql.user;

# 列出目前 user 的權限
SHOW GRANTS;

# 列出指定 user 的權限
SHOW GRANTS FOR 'user'@'host';
SHOW GRANTS FOR 'root'@'localhost';

帳號權限的設定

基本格式:

1
GRANT SELECT,INSERT,UPDATE,DELETE ON DB_NAME.TABLE_NAME TO 'user_name'@'host' IDENTIFIED BY 'password';

host 可以是 ‘localhost’ 或是 ‘%’ 表示所有 ip

看一些範例:

1
2
3
4
5
6
7
8
9
10
11
# 設定 root 可以訪問資料庫 test 的權限,密碼為空
GRANT ALL PRIVILEGES ON test.* TO 'root'@'%';

# 設定 root 訪問全部資料庫的權限,* 表示所有資料庫
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

# 設定使用者 tracy 訪問所有資料庫的權限
GRANT ALL PRIVILEGES ON *.* TO 'tracy'@'localhost' IDENTIFIED BY 'mypwd';

# 指定 ip 的訪問權限
GRANT ALL PRIVILEGES ON *.* TO 'tracy'@'10.2.1.11' IDENTIFIED BY 'mypwd';

改完權限,別忘了更新授權

1
FLUSH PRIVILEGES;

移除 MySQL 帳號權限

1
2
REVOKE ALL PRIVILEGES ON *.* FROM 'tracy'@'localhost';
FLUSH PRIVILEGES;

刪除 user

1
DROP USER 'testuser'@'localhost';

權限列表

僅列幾個權限,詳細可參考 官網:6.2.2 Privileges Provided by MySQL

權限 說明
GRANT OPTION 可把本帳號的許可權授予其它使用者
LOCK TABLES 鎖定指定資料表
SHOW DATABASES 可執行 SHOW DATABASES 指令
CREATE 建立資料庫和資料表
INDEX 建立或刪除索引
ALL 所有許可權,但不包括 GRANT
USAGE 無許可權許可權

遠端連線 MySQL

在 MySQL 設定裡註解掉 bind-address。

設定檔的位置 /etc/mysql/my.cnf 或是 /etc/mysql/mysql.conf.d

1
# bind-address = 127.0.0.1

Reference

Connect to a MySQL database remotely

無法遠端連接MySQL:message from server: “Host xxx is not allowed to connect to this MySQL server”

查詢 MySQL 對 此帳號 開放(GRANT)哪些權限