在开始权限设置前,需先登录MySQL并进行基础安全配置。
mysql命令行工具,以root用户身份登录(root是MySQL的超级管理员账户,拥有最高权限):sudo mysql -u root -p
输入密码后即可进入MySQL命令行界面。mysql_secure_installation脚本,完成以下安全设置:更改root密码、移除匿名用户、禁止root远程登录、删除测试数据库、重新加载权限表。这一步能有效降低数据库被非法访问的风险。权限设置的第一步是创建用户,MySQL用户由用户名+主机名组成(如'username'@'localhost'表示仅允许本地连接)。
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';
CREATE USER 'newuser'@'192.168.1.100' IDENTIFIED BY 'StrongPassword123!';
-- 或允许从任意IP登录(生产环境慎用,需配合防火墙限制)
CREATE USER 'newuser'@'%' IDENTIFIED BY 'StrongPassword123!';
注:
IDENTIFIED BY用于设置用户密码,建议使用包含大小写字母、数字和符号的强密码。
MySQL权限分为全局权限(影响整个MySQL服务器)、数据库权限(影响特定数据库)、表权限(影响特定表)和列权限(影响特定列)。需根据用户需求分配最小必要权限,避免过度授权。
| 权限类型 | 说明 |
|---|---|
ALL PRIVILEGES |
授予所有权限(慎用) |
SELECT |
允许查询数据 |
INSERT |
允许插入数据 |
UPDATE |
允许更新数据 |
DELETE |
允许删除数据 |
CREATE |
允许创建数据库/表 |
DROP |
允许删除数据库/表 |
GRANT OPTION |
允许用户将自身权限授予他人(超级管理员权限) |
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON mydatabase.* TO 'dbadmin'@'localhost';
GRANT SELECT, INSERT, UPDATE ON mydatabase.users TO 'devuser'@'localhost';
GRANT SELECT, INSERT ON mydatabase.products TO 'remoteuser'@'%';
注:
WITH GRANT OPTION需谨慎使用,它会允许用户将自身权限授予他人,增加安全风险。
执行GRANT或REVOKE命令后,需通过以下命令刷新权限表,使更改立即生效:
FLUSH PRIVILEGES;
注:MySQL 8.0及以上版本中,
FLUSH PRIVILEGES并非必须(权限更改会自动生效),但显式执行可确保权限及时更新。
若需确认用户的权限设置,可使用SHOW GRANTS命令:
SHOW GRANTS FOR CURRENT_USER();
SHOW GRANTS FOR 'newuser'@'localhost';
示例输出:+--------------------------------------------------------------+
| Grants for newuser@localhost |
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO `newuser`@`localhost` |
| GRANT SELECT, INSERT ON `mydatabase`.`users` TO `newuser`@`localhost` |
+--------------------------------------------------------------+
这表明newuser@localhost拥有mydatabase.users表的SELECT和INSERT权限,以及全局的USAGE权限(默认权限,无实际操作权限)。若需修改用户密码,可使用ALTER USER命令:
ALTER USER 'newuser'@'localhost' IDENTIFIED BY 'NewStrongPassword456!';
注:修改密码后无需刷新权限,新密码会立即生效。
若需收回用户的某些权限,可使用REVOKE命令(语法与GRANT相反):
REVOKE INSERT ON mydatabase.users FROM 'devuser'@'localhost';
REVOKE ALL PRIVILEGES ON mydatabase.* FROM 'dbadmin'@'localhost';
REVOKE GRANT OPTION ON *.* FROM 'admin'@'localhost';
撤销权限后需执行FLUSH PRIVILEGES;使更改生效。若不再需要某用户,可使用DROP USER命令彻底删除:
DROP USER 'newuser'@'localhost';
注:删除用户会同时移除其所有权限,删除前需确认该用户不再被使用。
SELECT、INSERT权限,无需DROP权限)。root账户。%替换为具体IP地址,并通过防火墙限制访问来源。通过以上步骤,您可在Ubuntu系统中高效管理MySQL用户权限,确保数据库的安全性与灵活性。