在管理级别,你决不能将mysql.user表的访问权限授予任何非管理账户。
当你运行客户端程序连接MySQL服务器时,以一种暴露的可被其他用户发现的方式指定你的密码是不妥当的。当你运行客户端程序时,你可以使用下列方法指定你的密码,还有每个方法的风险评估:
· 使用一个在命令行上-pyour_pass或--password=your_pass的选项。例如:
· shell> mysql -u francis -pfrank db_name
这很方便但是不安全,因为你的密码对系统状态程序(例如ps)变得可见,它可以被其他的用户调用来显示命令行。一般MySQL客户在他们的初始化顺序期间用零覆盖命令行参数,但是仍然有一个短暂间隔时间内参数值可见的。
· 使用一个-p或--password选项(没有指定密码)。在这种情况下,客户端程序请求来自终端的密码:
· shell> mysql -u francis -p db_name
· Enter password: ********
“*”字符指示输入密码的地方。输入密码时密码看不见。
因为它对其他用户不可见,与在命令行上指定它相比,这样进入你的密码更安全。然而,这个输入一个密码的方法仅仅为你交互式运行程序是合适的。如果你想要从非交互式运行的一个脚本调用一个客户端,就没有从终端输入入密码的机会。在某些系统中,你甚至会发现脚本的第一行被(错误地)读并解释为你的密码!
· 在一个配置文件中存储你的密码。例如,在Unix中,你可在主目录的“.my.cnf”文件中的[client]节列出你的密码:
· [client]
· password=your_pass
如果你在“.my.cnf”里面存储密码,除了你本人其它人不能访问该文件。保证文件的访问模式是400或600。例如:
shell> chmod 600 .my.cnf
关于选项文件的详细讨论参见4.3.2节,“使用选项文件”。
· 你可在MYSQL_PWD环境变量中存储密码。但是这种指定MySQL密码的方法是极不安全的,不应该使用。ps的某些版本包括显示运行进程的环境的选项;如果你设定MYSQL_PWD,你的密码将被运行ps的所有人看见,甚至在没有这样一个版本的ps的系统上,没有其它方法观察到进程环境的假设是不明智的。参见附录F:环境变量。
总之,最安全的方法是让客户端程序提示输入密码或在适当保护的选项文件中指定密码。