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号