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.

解决方法:

  1. 使用旧版密码加密:

    SET PASSWORD [FOR user] = OLD_PASSWORD('your_pass');
    
  2. 配置旧版密码支持:
    my.cnf 文件中添加以下内容:

    [mysqld]
    old_passwords=1
    
  3. 如果客户端依赖较新的 libmysqlclient14 或更高版本,则同时支持旧版和新版密码格式。


总结

  • 使用 GRANTREVOKE 管理用户权限。
  • 使用 SET PASSWORD 设置安全密码,避免在命令行中暴露密码。
  • 对于旧版客户端,启用旧密码加密格式以确保兼容性。
  • 生成复杂密码时,可借助工具如 pwgen
Last modified: Friday, 17 January 2025, 7:33 PM