zoukankan      html  css  js  c++  java
  • MySQL Access denied错误的缘故情由

    作者:天极软件 起原:天极软件

    当你试着联接MySQL效劳器时,如果你遇到Access denied错误,显示在下面的表指出一些你能用来纠正这个成绩的举措:

    • 你是在安装MySQL当前运转mysql_install_db的剧本,来设置初始授权表内容吗?如果不是,如许做。见6.10 设置初始MySQL权限。经过过程实验这个命令测试初始权限:
      shell> mysql -u root test 
      

      效劳器应该让你无误地毗连。你也应该保证你在MySQL数据库目录有一个文件“user.MYD”。屡屡,它是“PATH/var/mysql/user.MYD”,在此PATHMySQL安装根目录的途径。

    • 在一个新的安装当前,你应该毗连效劳器而且设置你的用户及其存取答应:
      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批改 。
    • 如果你间接对授权表做批改(使用INSERTUPDATE语句)而且你的改动似乎被忽略,记取,你必须收回一个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_namemysql -u user_name -pyour_pass db_name与效劳器毗连。如果你能用mysql客户毗连,这是你步调的一个成绩而不是存取权限的成绩。(详尽在-p和口令之间没有空格;你也能使用--password=your_pass句法指定口令。)
    • 如果你不克不及让口令事项,记得如果你用INSERT, UPDATESET 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; 
      

      成绩应该包罗一个有HostUser列的条款受室你的盘算机主机名和你的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=''条款。
    • 如果你掉掉下列错误,你可以有一个与dbhost表有关的成绩:
      Access to database denied
      

      如果从db表中选择了在Host列有空值的条款,保证在host表中有一个或多个呼应的条款,指定运用db表中的哪些主机。如果在使用SQL命令SELECT ... INTO OUTFILELOAD DATA INFILE时,你掉掉错误,在user表中的你的条款可以启用file权限。

    • 记取,客户步调将使用在设置装备陈设文件或情况变量被指定了的毗连参数。如果当你不在命令行上指定他们时,一个客户似乎正在发送错误的缺省毗连参数,反省你的情况和在你的主目录下的“.my.cnf”文件。你也可以反省系统范畴的MySQL设置装备陈设文件,当然更不可能将在哪里指定那个客户的毗连参数。见4.15.4 选项文件。如果当你没有任何选项运转一个客户时,你掉掉Access denied,确认你没在任何选项文件里指定一个旧的口令!见4.15.4 选项文件。
    • 如果任何别的事项掉败,用调试选项(例如,--debug=d,general,query)启动mysqld守护过程。这将打印有关考试考试毗连的主机和用户信息,和收回的每个命令的信息。见G.1 调试一个MySQL效劳器。
    • 如果你有任何与MySQL授权表的别的成绩,而且感受感染你必须邮寄这个成绩到邮寄表,总是供应一个MySQL授权表的倾倒正本(dump)。你可用mysqldump mysql命令倾倒数据库表。象伟大年夜一样,用mysqlbug剧本邮寄你的成绩。在一些状态下你可以用--skip-grant-tables重启mysqld以便能运转mysqldump





    版权声明: 原创作品,答应转载,转载时请务必以超链接形式标明文章 原始情由 、作者信息和本声明。否则将清查规律责任。

  • 相关阅读:
    kubernetes概述与入门
    kubernetes入门到放弃-docker基础篇
    Git远程仓库☞GitLab的使用
    Git远程仓库☞GitHub的使用
    Git版本控制系统
    持续集成-DevOps概念篇
    持续集成扫盲篇
    Centos7系统介绍
    LNMP架构说明
    dynamic_cast c++
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1975255.html
Copyright © 2011-2022 走看看