2024年6月14日发(作者:)

当你试着联接MySQL服务器时,如果你碰到Access denied错误,显示在下面的表

指出一些你能用来更正这个问题的动作:

你是在安装MySQL以后运行mysql_install_db的脚本,来设置初始授权表内容吗?

如果不是,这样做。见6.10 设置初始MySQL权限。通过执行这个命令测试初始权限:

shell> mysql -u root test

服务器应该让你无误地连接。你也应该保证你在MySQL数据库目录有一个文件

“”。通常,它是“PATH/var/mysql/”,在此PATH是MySQL安

装根目录的路径。

在一个新的安装以后,你应该连接服务器并且设置你的用户及其存取许可:

shell> mysql -u root mysql

服务器应该让你连接,因为MySQL root用户初始时没有口令。既然那也是一个安全

风险,当你正在设置其他MySQL用户时,设定root口令是一件重要的事请。如果你作为

root尝试连接并且得到这个错误:

Access denied for user: '@unknown' to database mysql

这意味着,你没有一个条目在user表中的一个User列值为'root'并且mysqld不能为

你的客库解析主机名。在这种情况下,你必须用--skip-grant-tables选项重启服务器并且

编辑你的“/etc/hosts”或“windowshosts”文件为你的主机增加一个条目。

如果你从一个3.22.11以前的版本更新一个现存的MySQL安装到3.22.11版或以后

版本,你运行了mysql_fix_privilege_tables脚本吗?如果没有,运行它。在GRANT语

句变得能工作时,授权表的结构用MySQL 3.22.11修改 。

如果你直接对授权表做修改(使用INSERT或UPDATE语句)并且你的改变似乎被忽略,

记住,你必须发出一个FLUSH PRIVILEGES语句或执行一个mysqladmin flush-privileges

命令导致服务器再次读入表,否则你的改变要道下一次服务器被重启时再生效。记住在你

设定root口令以后,你将不需要指定它,直到在你清洗(flush)权限以后,因为服务器仍然

不会知道你改变了口令!

如果你的权限似乎在一个会话(session)当中改变了,可能是一个超级用户改变了他们。

再次装入授权表作用于新客户连接,但是它也影响现存的连接,如6.9 权限改变何时生效

小节所述。

为了测试,用--skip-grant-tables选项启动mysqld守护进程,然后你可以改变

MySQL授权表并且使用mysqlaccess脚本检查你的修改是否有如期的效果。当你对你的

改变满意时,执行mysqladmin flush-privileges告诉mysqld服务器开始使用新的权限

表。注意:再次装入授权表覆盖了--skip-grant-tables选项。这允许你告诉服务器开始使

用授权表,而不用停掉并重启它。

如果你有一个Perl、Python或ODBC程序的存取问题,试着用mysql -u user_name

db_name或mysql -u user_name -pyour_pass db_name与服务器连接。如果你能用

mysql客户连接,这是你程序的一个问题而不是存取权限的问题。(注意在-p和口令之间

没有空格;你也能使用--password=your_pass句法指定口令。)