mysql相关指令
- 一. MySQL给用户添加远程访问权限
- 1. 创建或者修改用户权限
- 方法一:创建用户并授予远程访问权限
- 方法二:修改现有用户的访问限制
- 方法三:授予特定数据库的特定权限
- 2. 修改 MySQL 配置文件
- 3. 安全最佳实践
- 4. 测试远程连接
- 5. 撤销权限或删除用户
一. MySQL给用户添加远程访问权限
1. 创建或者修改用户权限
方法一:创建用户并授予远程访问权限
-- 创建新用户,允许从任何主机(%)连接
CREATE USER '用户名'@'%' IDENTIFIED BY '密码'-- 授予该用户对所有数据库的所有权限(生产环境慎用)
GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%'-- 刷新权限使更改立即生效
FLUSH PRIVILEGES;
语句解释:
- CREATE USER: 创建新用户账户
- ‘username’@‘%’: 用户名和允许连接的主机(%表示任何主机)
- IDENTIFIED BY: 设置用户密码
- GRANT ALL PRIVILEGES: 授予用户所有权限
- *.*: 第一个表示所有数据库,第二个表示所有表
- FLUSH PRIVILEGES: 重新加载权限表,使更改立即生效
方法二:修改现有用户的访问限制
-- 查看现有用户及其访问权限
SELECT user, host FROM mysql.user;-- 修改用户的host限制(从localhost改为任意主机)
UPDATE mysql.user SET host='%' WHERE user='username';-- 刷新权限
FLUSH PRIVILEGES;
语句解释:
-
SELECT user, host: 查看用户及其允许连接的主机
-
UPDATE mysql.user: 直接修改用户表
- 将host从’localhost’改为’%'允许远程连接
-
FLUSH PRIVILEGES: 使更改生效
方法三:授予特定数据库的特定权限
-- 授予用户对特定数据库的特定权限
GRANT SELECT, INSERT, UPDATE, DELETE ON dbname.* TO 'username'@'%';-- 查看已授予的权限
SHOW GRANTS FOR 'username'@'%';-- 刷新权限
FLUSH PRIVILEGES;
语句解释:
-
GRANT: 授予特定权限
-
SELECT, INSERT, UPDATE, DELETE: 只授予这些操作权限
-
dbname.*: 只对dbname数据库的所有表有效
-
-
SHOW GRANTS: 查看用户的权限
-
FLUSH PRIVILEGES: 使更改生效
2. 修改 MySQL 配置文件
-
找到MySQL配置文件位置:
-
Ubuntu/Debian: /etc/mysql/mysql.conf.d/mysqld.cnf
-
CentOS/RHEL: /etc/my.cnf 或 /etc/mysql/my.cnf
-
-
编辑配置文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
- 找到并修改以下行:
# 原内容可能是
bind-address = 127.0.0.1# 修改为(允许所有IP连接)
bind-address = 0.0.0.0# 或者注释掉这行
# bind-address = 127.0.0.1
- 重启MySQL服务:
sudo systemctl restart mysql
# 或
sudo service mysql restart
3. 安全最佳实践
- 最小权限原则:
-- 只授予必要的最小权限
GRANT SELECT ON dbname.tablename TO 'username'@'specific_ip';
- 限制访问IP:
-- 只允许特定IP连接
CREATE USER 'username'@'192.168.1.100' IDENTIFIED BY 'password';
- 定期审计权限:
-- 查看所有用户权限
SELECT user, host FROM mysql.user;-- 查看特定用户权限
SHOW GRANTS FOR 'username'@'%';
- 使用SSH隧道(更安全):
ssh -L 3306:localhost:3306 username@mysql-server-ip
- 修改默认端口(可选):
# 在my.cnf中添加
[mysqld]
port = 3307
4. 测试远程连接
在远程机器上测试:
mysql -u username -p -h mysql-server-ip
5. 撤销权限或删除用户
-- 撤销所有权限
REVOKE ALL PRIVILEGES ON *.* FROM 'username'@'%';-- 删除用户
DROP USER 'username'@'%';-- 刷新权限
FLUSH PRIVILEGES;