扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
当你试着联接MySQL服务器时,如果你碰到Access denied
错误,显示在下面的表指出一些你能用来更正这个问题的动作:
mysql_install_db
的脚本,来设置初始授权表内容吗?如果不是,这样做。见6.10 设置初始MySQL权限。通过执行这个命令测试初始权限: shell> mysql -u root test
服务器应该让你无误地连接。你也应该保证你在MySQL数据库目录有一个文件“user.MYD”。通常,它是“PATH/var/mysql/user.MYD”,在此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”或“\windows\hosts”文件为你的主机增加一个条目。
mysql_fix_privilege_tables
脚本吗?如果没有,运行它。在GRANT
语句变得能工作时,授权表的结构用MySQL 3.22.11修改 。
INSERT
或UPDATE
语句)并且你的改变似乎被忽略,记住,你必须发出一个FLUSH PRIVILEGES
语句或执行一个mysqladmin flush-privileges
命令导致服务器再次读入表,否则你的改变要道下一次服务器被重启时再生效。记住在你设定root
口令以后,你将不需要指定它,直到在你清洗(flush)权限以后,因为服务器仍然不会知道你改变了口令!
--skip-grant-tables
选项启动mysqld
守护进程,然后你可以改变MySQL授权表并且使用mysqlaccess
脚本检查你的修改是否有如期的效果。当你对你的改变满意时,执行mysqladmin flush-privileges
告诉mysqld
服务器开始使用新的权限表。注意:再次装入授权表覆盖了--skip-grant-tables
选项。这允许你告诉服务器开始使用授权表,而不用停掉并重启它。
mysql -u user_name db_name
或mysql -u user_name -pyour_pass db_name
与服务器连接。如果你能用mysql
客户连接,这是你程序的一个问题而不是存取权限的问题。(注意在-p
和口令之间没有空格;你也能使用--password=your_pass
句法指定口令。)
INSERT
, UPDATE
或SET PASSWORD
语句设置口令,你必须使用PASSWORD()
函数。如果你用GRANT ... INDENTIFIED BY
语句或mysqladmin password
命令指定口令,PASSWORD()
函数是不需要的。见6.12 怎样设置口令。
localhost
是你本地主机名的一个同义词,并且也是如果你不明确地指定主机而客户尝试连接的缺省主机。然而,如果你正在运行于一个使用MIT-pthreads的系统上,连接localhost
是不行的(localhost
连接使用Unix套接字进行,它没被 MIT-pthreads支持),为了在这样的系统上避免这个问题,你应该使用--host
选项明确地命名服务器主机,这将做一个 TCP/IP连接到mysqld
服务器。在这种情况下,你必须有在服务器主机上的user
表中条目的你真实的主机名。(即使你在服务器同一台的主机上运行一个客户程序,这也是真的。)
mysql -u user_name db_name
与数据库连接时,如果你得到一个Access denied
错误,你可能有与user
桌有关的问题,通过执行mysql -u root mysql
并且发出下面的SQL语句检查: mysql> SELECT * FROM user;
结果应该包含一个有Host
和User
列的条目匹配你的计算机主机名和你的MySQL用户名。
Access denied
错误消息将告诉你,你正在用哪个用户尝试登录,你正在试图用连接哪个主机,并且你是否正在使用一个口令。通常,你应该在user
表中有一个条目,正确地匹配在错误消息给出的主机名和用户名。
user
表中没有匹配那台主机行: Host ... is not allowed to connect to this MySQL server
你可以通过使用mysql
命令行工具(在服务器主机上!)修正它,把你正在试图连接的用户/主机名组合新加一行到user
表中。如果你不在运行MySQL 3.22并且你不知道你正在从它连接的机器的IP数字或主机名,你应该把一个'%'
条目作为Host
列值放在user
表中并且在服务器机器上使用--log
选项重启mysqld
。在试图从客户机器连接以后,在MySQL记录文件中的信息将显示你如何真正进行连接。(然后用在记录文件上面显示出的实际的主机名代替user
表中的'%'
条目。否则,你将有一个不安全的系统。)
mysql -u root test
工作但是mysql -h your_hostname -u root test
导致Access denied
,那么在user
表中你可能没有你的主机的正确名字。这里的一个普遍的问题是在user
表条目中的Host
值指定一个唯一的主机名,但是你系统的名字解析例程返回一个完全正规的域名(或相反)。例如,如果你在user
表中有一个主机是'tcx'
的条目,但是你的 DNS告诉MySQL你的主机名是'tcx.subnet.se'
,条目将不工作。尝试把一个条目加到user
表中,它包含你主机的IP数字作为Host
列的值。(另外,你可以把一个条目加到user
表中,它有包含一个通配符如'tcx.%'
的Host
值。然而,使用以“%”结尾的主机名是不安全的并且不推荐!)
mysql -u user_name test
工作但是mysql -u user_name other_db_name
不工作,对other_db_name
,你在db
表中没有没有一个条目列出。
mysql -u user_name db_name
时,它工作,但是在其它客户机器上执行mysql -h host_name -u user_name db_name
时,它却不工作,你没有把客户机器列在user
表或db
表中。
Access denied
,从user
表中删除所有Host
包含通配符值的条目(包含“%”或“_”的条目)。一个很普遍的错误是插入用Host
='%'
和User
='some user'
插入一个新条目,认为这将允许你指定localhost
从同一台机器进行连接。它不工作的原因是缺省权限包括一个有Host
='localhost'
和User
=''
的条目,因为那个条目一个比'%'
更具体的Host
值'localhost'
,当从localhost
连接时,它用于指向新条目!正确的步骤是插入Host
='localhost'
和User
='some_user'
的第2个条目,或删除Host
='localhost'
和User
=''
条目。
db
或host
表有关的问题: Access to database denied
如果从db
表中选择了在Host
列有空值的条目,保证在host
表中有一个或多个相应的条目,指定运用db
表中的哪些主机。如果在使用SQL命令SELECT ... INTO OUTFILE
或LOAD DATA INFILE
时,你得到错误,在user
表中的你的条目可能启用file权限。
Access denied
,确认你没在任何选项文件里指定一个旧的口令!见4.15.4 选项文件。
--debug=d,general,query
)启动mysqld
守护进程。这将打印有关尝试连接的主机和用户信息,和发出的每个命令的信息。见G.1 调试一个MySQL服务器。
mysqldump mysql
命令倾倒数据库表。象平时一样,用mysqlbug
脚本邮寄你的问题。在一些情况下你可能用--skip-grant-tables
重启mysqld
以便能运行mysqldump
。 如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者