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',...);
posted @ 2025-07-08 16:37  Lafite-1820  阅读(14)  评论(0)    收藏  举报