mysql 添加賬號
要創建一個只能訪問特定數據庫并具有遠程訪問權限的 MySQL 用戶,可以按照以下步驟操作:
1. 登錄 MySQL
使用 root 用戶或具有 CREATE USER 和 GRANT 權限的用戶登錄 MySQL:
mysql -u root -p
2. 創建新用戶
創建一個名為app_user的用戶,密碼為SecurePass123,允許從任何 IP 地址連接:
CREATE USER 'app_user'@'%' IDENTIFIED BY 'SecurePass123';
3. 授予特定數據庫權限
授予用戶app_user對數據庫mydatabase的所有權限:
GRANT ALL PRIVILEGES ON mydatabase.* TO 'app_user'@'%';
如果需要更嚴格的權限控制,可以只授予必要的權限,例如:
GRANT SELECT, INSERT, UPDATE, DELETE ON mydatabase.* TO 'app_user'@'%';
4. 刷新權限
使權限立即生效:
FLUSH PRIVILEGES;
5. 驗證用戶權限
切換到新用戶并驗證是否只能訪問指定數據庫:
mysql -u app_user -p -h your_server_ip
SHOW DATABASES; # 應該只看到mydatabase和information_schema
USE mydatabase; # 可以訪問
USE another_database; # 會報錯:Access denied
6. 配置 MySQL 遠程訪問(如果需要)
確保 MySQL 服務器允許遠程連接:
修改配置文件
編輯/etc/mysql/mysql.conf.d/mysqld.cnf(Ubuntu/Debian)或/etc/my.cnf(CentOS/RHEL),注釋掉或修改綁定地址:
# 將bind-address修改為0.0.0.0或注釋掉此行
# bind-address = 127.0.0.1
重啟 MySQL 服務
sudo systemctl restart mysql # Ubuntu/Debian
sudo service mysql restart # CentOS/RHEL
7. 配置防火墻(如果需要)
開放 MySQL 端口(默認 3306):
sudo ufw allow 3306/tcp # Ubuntu/Debian
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload # CentOS/RHEL
安全建議
- 使用強密碼并定期更換
- 限制用戶的 IP 訪問范圍,例如:'app_user'@'192.168.1.%'
- 定期審計用戶權限
- 生產環境建議使用 SSH 隧道代替直接開放 3306 端口
完成以上步驟后,用戶app_user將只能訪問mydatabase,并可以從遠程連接到 MySQL 服務器。
要撤銷 MySQL 用戶的 DELETE 和 DROP 權限,可以使用 REVOKE 語句。以下是具體操作步驟:
1. 查看用戶當前權限
在撤銷權限前,建議先查看用戶當前的權限:
SHOW GRANTS FOR 'username'@'host';
- username:要修改權限的用戶名。
- host:用戶的連接主機(例如 '%' 表示任意主機,'localhost' 表示本地連接)。
2. 撤銷 DELETE 和 DROP 權限
根據用戶權限的范圍,執行以下命令:
撤銷對所有數據庫的權限
REVOKE DELETE, DROP ON *.* FROM 'username'@'host';
撤銷對特定數據庫的權限
REVOKE DELETE, DROP ON db_name.* FROM 'username'@'host';
- db_name:數據庫名(例如 mydatabase)。
3. 刷新權限
使權限變更立即生效:
FLUSH PRIVILEGES;
導出數據表
mysqldump -u root2 -p hotd_xxxx i5_rewrite_xxxx --no-create-info
這個命令的各個部分含義如下:
- -u root2:以用戶 root2 的身份連接到 MySQL。
- -p:提示輸入密碼。
- hotd_xxxx:數據庫名。
- i5_rewrite_xxxx:表名。
- --no-create-info:只導出表中的數據,不導出表結構。
對比示例
1. 不帶 --no-create-info(默認行為)
mysqldump -u root2 -p hotd_xxx i5_rewrite_xxxx > backup.sql
backup.sql 的內容會包含表結構和數據:
--
-- Table structure for table `i5_rewrite_xxxx`
--
CREATE TABLE `i5_rewrite_xxxx` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`url` varchar(255) DEFAULT NULL,
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- Dumping data for table `i5_rewrite_xxxx`
--
INSERT INTO `i5_rewrite_xxxx` VALUES (1,'https://example.com/1',...);
INSERT INTO `i5_rewrite_xxxx` VALUES (2,'https://example.com/2',...);

浙公網安備 33010602011771號