在Linux系统中管理MySQL权限前,需完成以下基础步骤:
mysql -u root -p,输入密码后进入命令行界面。mysql数据库的user表中,可通过SELECT user, host FROM mysql.user;查看现有用户及允许连接的主机。使用CREATE USER语句创建用户,需指定用户名、主机限制(决定用户可从哪些主机连接)和密码。常见格式:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'StrongPassword';CREATE USER 'username'@'192.168.1.100' IDENTIFIED BY 'StrongPassword';CREATE USER 'username'@'%' IDENTIFIED BY 'StrongPassword';注:
localhost表示仅本地连接,%表示允许任意主机连接(需配合防火墙设置,避免未授权访问)。
创建用户后,需执行FLUSH PRIVILEGES;命令使权限表立即生效(MySQL 5.7.6及以上版本会自动刷新,但显式执行更安全)。
使用GRANT语句为用户分配权限,权限可分为全局权限(作用于所有数据库)、数据库级权限(作用于特定数据库)、表级权限(作用于特定表)甚至列级权限(作用于特定列)。常见示例:
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';GRANT SELECT, INSERT ON database_name.table_name TO 'username'@'localhost';GRANT USAGE ON *.* TO 'username'@'localhost' WITH MAX_QUERIES_PER_HOUR 30 MAX_CONNECTIONS_PER_HOUR 6;注:权限应遵循最小化原则,仅授予用户完成工作所需的最小权限。
使用SHOW GRANTS语句查看用户的权限详情,格式为SHOW GRANTS FOR 'username'@'host';。例如:SHOW GRANTS FOR 'username'@'localhost';将显示该用户的所有授权规则。
使用REVOKE语句撤销用户的特定权限,格式与GRANT相反。例如:
REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'localhost';REVOKE SELECT, INSERT ON database_name.table_name FROM 'username'@'localhost';撤销后需执行FLUSH PRIVILEGES;使更改生效。
使用DROP USER语句彻底删除用户,格式为DROP USER 'username'@'host';。例如:DROP USER 'username'@'localhost';将删除该用户及其所有权限。
使用ALTER USER语句修改用户密码,格式为ALTER USER 'username'@'host' IDENTIFIED BY 'NewPassword';。例如:ALTER USER 'username'@'localhost' IDENTIFIED BY 'NewStrongPassword';
注:MySQL 5.7.6及以上版本推荐使用此命令,旧版本可使用
SET PASSWORD语句(如SET PASSWORD FOR 'username'@'localhost' = PASSWORD('NewPassword');)。
127.0.0.1(修改/etc/mysql/my.cnf或/etc/my.cnf中的bind-address = 127.0.0.1),并设置skip-name-resolve禁用DNS解析。ufw或iptables限制MySQL端口(默认3306)的访问,仅允许可信IP连接(如sudo ufw allow from 192.168.1.0/24 to any port 3306)。mysql_secure_installation工具清理默认账户、移除匿名用户、禁止root远程登录,并定期检查mysql.user表中的异常账户。FLUSH PRIVILEGES;(除非使用MySQL 5.7.6及以上版本,其会自动刷新)。username@localhost的权限优先于username@%)。general_log)记录用户操作,便于追溯异常行为(需权衡性能影响)。