在 Linux 下使用 MySQL(或 MariaDB)设置权限,通常是通过 MySQL 的用户权限系统 来完成的。下面从常用命令到实际示例给你一个清晰说明。
mysql -u root -p
输入 root 密码后即可进入 MySQL 命令行。
MySQL 权限是基于:
用户格式通常是:
'用户名'@'主机'
例如:
'test'@'localhost' → 只能本机连接'test'@'%' → 允许任意 IP 连接CREATE USER 'test'@'localhost' IDENTIFIED BY 'password';
允许远程连接:
CREATE USER 'test'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON testdb.* TO 'test'@'localhost';
GRANT SELECT ON testdb.* TO 'test'@'localhost';
GRANT SELECT, INSERT, UPDATE ON testdb.* TO 'test'@'localhost';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'test'@'localhost';
REVOKE INSERT ON testdb.* FROM 'test'@'localhost';
DROP USER 'test'@'localhost';
| 权限 | 说明 |
|---|---|
| SELECT | 查询 |
| INSERT | 插入 |
| UPDATE | 更新 |
| DELETE | 删除 |
| CREATE | 建表/库 |
| DROP | 删表/库 |
| ALL PRIVILEGES | 所有权限 |
# 开放 3306 端口
ufw allow 3306
# 或
firewall-cmd --add-port=3306/tcp --permanent
vim /etc/mysql/my.cnf
# 或
vim /etc/my.cnf
确保:
bind-address = 0.0.0.0
修改后重启:
systemctl restart mysqld
CREATE USER 'app'@'%' IDENTIFIED BY 'App@123';
GRANT SELECT, INSERT, UPDATE ON appdb.* TO 'app'@'%';
FLUSH PRIVILEGES;
如果你有具体场景(如:只允许某 IP、只读账号、Docker 环境),可以告诉我,我可以给你更精确的配置。