MySQL数据库
完成条件
MySQL 用户权限和密码管理
1. GRANT 命令
GRANT
命令用于为特定用户授予权限。
语法示例:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES
ON database.*
TO 'user'@'localhost';
- 说明:
- 此命令授予用户
user
(仅限于localhost
)对database
数据库的选择、插入、更新、删除等权限。 - 可以根据需要调整权限范围。
- 此命令授予用户
2. DROP USER
DROP USER
用于删除用户账户。
语法示例:
DROP USER 'mediawiki';
DROP USER 'mediawiki'@'host';
- 从 MySQL 5.0.2 开始,
DROP USER
会自动删除与用户关联的权限。 - 在更早的版本中,需要手动使用
REVOKE
删除权限。
3. REVOKE 命令
REVOKE
用于撤销已授予用户的权限。
语法示例:
REVOKE ALL PRIVILEGES ON database.* FROM 'user'@'host';
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'user'@'host';
- 第一条语句撤销用户对特定数据库的所有权限。
- 第二条语句撤销用户所有权限,包括授予其他用户权限的能力。
4. SET PASSWORD
SET PASSWORD
用于设置或更改用户密码。
语法:
SET PASSWORD [FOR 'user'@'host'] = PASSWORD('your_password');
- 如果未指定用户,则默认修改当前用户的密码。
示例:
SET PASSWORD FOR 'mediawiki'@'localhost' = PASSWORD('ifda8GQg');
命令行替代方法:
mysqladmin password 'your_password'
-
注意:在命令行中使用密码存在安全风险,因为其他用户可以通过
ps
等命令查看进程列表并获取密码。
避免示例:user$ ps aux | grep mysqladmin root 7768 0.0 0.1 7044 1516 pts/1 S+ 16:57 0:00 mysqladmin password K2ekiEk3
-
建议避免直接使用
mysqladmin password
设置密码。
5. 生成安全密码
可以使用工具 pwgen
(如 Debian 系统中可用的包)生成安全或易记的密码。
示例:
$ pwgen
ooGoo7ba ir4Raeje Ya2veigh zaXeero8
$ pwgen -s # 生成更安全的密码
zCRhn8LH EJtzzLRE G4Ezb5BX e7hQ88In
6. MySQL 4.1 的密码问题
从 MySQL 4.1 开始,引入了新的密码加密机制,可能导致以下错误:
Client does not support authentication protocol requested by server; consider upgrading MySQL client.
解决方法:
-
使用旧版密码加密:
SET PASSWORD [FOR user] = OLD_PASSWORD('your_pass');
-
配置旧版密码支持:
在my.cnf
文件中添加以下内容:[mysqld] old_passwords=1
-
如果客户端依赖较新的
libmysqlclient14
或更高版本,则同时支持旧版和新版密码格式。
总结
- 使用
GRANT
和REVOKE
管理用户权限。 - 使用
SET PASSWORD
设置安全密码,避免在命令行中暴露密码。 - 对于旧版客户端,启用旧密码加密格式以确保兼容性。
- 生成复杂密码时,可借助工具如
pwgen
。
最后修改: 2025年01月17日 星期五 19:33