以alter为词根的单词Accessdenied错误的原因
当你试着联接MySQL服务器时,如果你碰到Access denied错误,显⽰在下⾯的表指出⼀些你能⽤来更正这个问题的动作:浮点数的阶码怎么计算
  你是在安装MySQL以后运⾏mysql_install_db的脚本,来设置初始授权表内容吗?如果不是,这样做。见6.10 设置初始MySQL权限。通过执⾏这个命令测试初始权限:
shell> mysql -u root test
  服务器应该让你⽆误地连接。你也应该保证你在MySQL数据库⽬录有⼀个⽂件“user.MYD”。通常,它是“PATH/var/mysql/user.MYD”,在此PATH是MySQL安装根⽬录的路径。
  在⼀个新的安装以后,你应该连接服务器并且设置你的⽤户及其存取许可: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”⽂件为你的主机增加⼀个条⽬。
combining翻译
  如果你从⼀个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句法指定⼝令。)
  如果你不能让⼝令⼯作,记得如果你⽤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;fischer
  结果应该包含⼀个有Host和User列的条⽬匹配你的计算机主机名和你的MySQL⽤户名。
  Access denied错误消息将告诉你,你正在⽤哪个⽤户尝试登录,你正在试图⽤连接哪个主机,并且你是否正在使⽤⼀个⼝令。通常,你应该在user表中有⼀个条⽬,正确地匹配在错误消息给出的主机名和⽤户名。
  如果当你试着从⼀个不是MySQL服务器正在运⾏的主机上连接时,你得到下列错误,那么在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权限。
  记住,客户程序将使⽤在配置⽂件或环境变量被指定了的连接参数。如果当你不在命令⾏上指定他们时,⼀个客户似乎正在发送错误的缺省连接参数,检查你的环境和在你的主⽬录下的“.myf”⽂件。你也可以检查系统范围的MySQL配置⽂件,尽管更不可能将在那⾥指定那个客户的连接参数。见4.15.4 选项⽂件。如果当你没有任何选项运⾏⼀个客户时,你得到Access denied,确认你没在任何选
项⽂件⾥指定⼀个旧的⼝令!见4.15.4 选项⽂件。
搭建app  如果任何其它事情失败,⽤调试选项(例如,--debug=d,general,query)启动mysqld守护进程。这将打印有关尝试连接的主机和⽤户信息,和发出的每个命令的信息。见G.1 调试⼀个MySQL服务器。
  如果你有任何与MySQL授权表的其它问题,⽽且觉得你必须邮寄这个问题到邮寄表,总是提供⼀个MySQL授权表的倾倒副本(dump)。你可⽤mysqldump mysql命令倾倒数据库表。象平时⼀样,⽤mysqlbug脚本邮寄你的问题。在⼀些情况下你可能⽤--skip-grant-tables重启mysqld以便能运⾏mysqldump。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。