WEB开发网
开发学院数据库MSSQL Server MySQL中文参考手册7(MySQL存取权限系统)grant设置... 阅读

MySQL中文参考手册7(MySQL存取权限系统)grant设置密码password

 2007-11-11 11:38:16 来源:WEB开发网   
核心提示: 6.13 Access denied错误的原因当你试着联接MySQL(和PHP搭配之最佳组合)服务器时,如果你碰到Access denied错误,MySQL中文参考手册7(MySQL存取权限系统)grant设置密码password(9),显示在下面的表指出一些你能用来更正这个问题的动作: 你是在安装MySQL(和PH
6.13 Access denied错误的原因


  • 当你试着联接MySQL(和PHP搭配之最佳组合)服务器时,如果你碰到Access denied错误,显示在下面的表指出一些你能用来更正这个问题的动作: 

    你是在安装MySQL(和PHP搭配之最佳组合)以后运行MySQL(和PHP搭配之最佳组合)_install_db的脚本,来设置初始授权表内容吗?如果不是,这样做。见6.10 设置初始MySQL(和PHP搭配之最佳组合)权限。通过执行这个命令测试初始权限: 
    shell> MySQL(和PHP搭配之最佳组合) -u root test 

    服务器应该让你无误地连接。你也应该保证你在MySQL(和PHP搭配之最佳组合)数据库目录有一个文件“user.MYD”。通常,它是“PATH/var/MySQL(和PHP搭配之最佳组合)/user.MYD”,在此PATH是MySQL(和PHP搭配之最佳组合)安装根目录的路径。 

  • 在一个新的安装以后,你应该连接服务器并且设置你的用户及其存取许可: 
    shell> MySQL(和PHP搭配之最佳组合) -u root MySQL(和PHP搭配之最佳组合) 

    服务器应该让你连接,因为MySQL(和PHP搭配之最佳组合) root用户初始时没有口令。既然那也是一个安全风险,当你正在设置其他MySQL(和PHP搭配之最佳组合)用户时,设定root口令是一件重要的事请。如果你作为root尝试连接并且得到这个错误: 

    Access denied for user: '@unknown' to database MySQL(和PHP搭配之最佳组合) 

    这意味着,你没有一个条目在user表中的一个User列值为'root'并且MySQL(和PHP搭配之最佳组合)d不能为你的客库解析主机名。在这种情况下,你必须用--skip-grant-tables选项重启服务器并且编辑你的“/etc/hosts”或“windowshosts”文件为你的主机增加一个条目。 

  • 如果你从一个3.22.11以前的版本更新一个现存的MySQL(和PHP搭配之最佳组合)安装到3.22.11版或以后版本,你运行了MySQL(和PHP搭配之最佳组合)_fix_privilege_tables脚本吗?如果没有,运行它。在GRANT语句变得能工作时,授权表的结构用MySQL(和PHP搭配之最佳组合) 3.22.11修改 。 
  • 如果你直接对授权表做修改(使用INSERT或UPDATE语句)并且你的改变似乎被忽略,记住,你必须发出一个FLUSH PRIVILEGES语句或执行一个MySQL(和PHP搭配之最佳组合)admin flush-privileges命令导致服务器再次读入表,否则你的改变要道下一次服务器被重启时再生效。记住在你设定root口令以后,你将不需要指定它,直到在你清洗(flush)权限以后,因为服务器仍然不会知道你改变了口令! 
  • 如果你的权限似乎在一个会话(session)当中改变了,可能是一个超级用户改变了他们。再次装入授权表作用于新客户连接,但是它也影响现存的连接,如6.9 权限改变何时生效小节所述。 
  • 为了测试,用--skip-grant-tables选项启动MySQL(和PHP搭配之最佳组合)d守护进程,然后你可以改变MySQL(和PHP搭配之最佳组合)授权表并且使用MySQL(和PHP搭配之最佳组合)access脚本检查你的修改是否有如期的效果。当你对你的改变满意时,执行MySQL(和PHP搭配之最佳组合)admin flush-privileges告诉MySQL(和PHP搭配之最佳组合)d服务器开始使用新的权限表。注意:再次装入授权表覆盖了--skip-grant-tables选项。这允许你告诉服务器开始使用授权表,而不用停掉并重启它。 
  • 如果你有一个Perl、Python或ODBC程序的存取问题,试着用MySQL(和PHP搭配之最佳组合) -u user_name db_name或MySQL(和PHP搭配之最佳组合) -u user_name -pyour_pass db_name与服务器连接。如果你能用MySQL(和PHP搭配之最佳组合)客户连接,这是你程序的一个问题而不是存取权限的问题。(注意在-p和口令之间没有空格;你也能使用--password=your_pass句法指定口令。) 
  • 如果你不能让口令工作,记得如果你用INSERT, UPDATE或SET PASSWORD语句设置口令,你必须使用PASSWORD()函数。如果你用GRANT ... INDENTIFIED BY语句或MySQL(和PHP搭配之最佳组合)admin password命令指定口令,PASSWORD()函数是不需要的。见6.12 怎样设置口令。 
  • localhost是你本地主机名的一个同义词,并且也是如果你不明确地指定主机而客户尝试连接的缺省主机。然而,如果你正在运行于一个使用MIT-pthreads的系统上,连接localhost是不行的(localhost连接使用Unix套接字进行,它没被 MIT-pthreads支持),为了在这样的系统上避免这个问题,你应该使用--host选项明确地命名服务器主机,这将做一个 TCP/IP连接到MySQL(和PHP搭配之最佳组合)d服务器。在这种情况下,你必须有在服务器主机上的user表中条目的你真实的主机名。(即使你在服务器同一台的主机上运行一个客户程序,这也是真的。) 
  • 当尝试用MySQL(和PHP搭配之最佳组合) -u user_name db_name与数据库连接时,如果你得到一个Access denied错误,你可能有与user桌有关的问题,通过执行MySQL(和PHP搭配之最佳组合) -u root MySQL(和PHP搭配之最佳组合)并且发出下面的SQL语句检查: 
    MySQL(和PHP搭配之最佳组合)> SELECT * FROM user; 

    结果应该包含一个有Host和User列的条目匹配你的计算机主机名和你的MySQL(和PHP搭配之最佳组合)用户名。 

  • Access denied错误消息将告诉你,你正在用哪个用户尝试登录,你正在试图用连接哪个主机,并且你是否正在使用一个口令。通常,你应该在user表中有一个条目,正确地匹配在错误消息给出的主机名和用户名。 
  • 如果当你试着从一个不是MySQL(和PHP搭配之最佳组合)服务器正在运行的主机上连接时,你得到下列错误,那么在user表中没有匹配那台主机行: 
    Host ... is not allowed to connect to this MySQL(和PHP搭配之最佳组合) server 

    你可以通过使用MySQL(和PHP搭配之最佳组合)命令行工具(在服务器主机上!)修正它,把你正在试图连接的用户/主机名组合新加一行到user表中。如果你不在运行MySQL(和PHP搭配之最佳组合) 3.22并且你不知道你正在从它连接的机器的IP数字或主机名,你应该把一个'%'条目作为Host列值放在user表中并且在服务器机器上使用--log选项重启MySQL(和PHP搭配之最佳组合)d。在试图从客户机器连接以后,在MySQL(和PHP搭配之最佳组合)记录文件中的信息将显示你如何真正进行连接。(然后用在记录文件上面显示出的实际的主机名代替user表中的'%'条目。否则,你将有一个不安全的系统。)

  • 如果MySQL(和PHP搭配之最佳组合) -u root test工作但是MySQL(和PHP搭配之最佳组合) -h your_hostname -u root test导致Access denied,那么在user表中你可能没有你的主机的正确名字。这里的一个普遍的问题是在user表条目中的Host值指定一个唯一的主机名,但是你系统的名字解析例程返回一个完全正规的域名(或相反)。例如,如果你在user表中有一个主机是'tcx'的条目,但是你的 DNS告诉MySQL(和PHP搭配之最佳组合)你的主机名是'tcx.subnet.se',条目将不工作。尝试把一个条目加到user表中,它包含你主机的IP数字作为Host列的值。(另外,你可以把一个条目加到user表中,它有包含一个通配符如'tcx.%'的Host值。然而,使用以“%”结尾的主机名是不安全的并且不推荐!) 
  • 如果MySQL(和PHP搭配之最佳组合) -u user_name test工作但是MySQL(和PHP搭配之最佳组合) -u user_name other_db_name不工作,对other_db_name,你在db表中没有没有一个条目列出。 
  • 当在服务器机器上执行MySQL(和PHP搭配之最佳组合) -u user_name db_name时,它工作,但是在其它客户机器上执行MySQL(和PHP搭配之最佳组合) -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权限。 

  • 记住,客户程序将使用在配置文件或环境变量被指定了的连接参数。如果当你不在命令行上指定他们时,一个客户似乎正在发送错误的缺省连接参数,检查你的环境和在你的主目录下的“.my.cnf”文件。你也可以检查系统范围的MySQL(和PHP搭配之最佳组合)配置文件,尽管更不可能将在那里指定那个客户的连接参数。见4.15.4 选项文件。如果当你没有任何选项运行一个客户时,你得到Access denied,确认你没在任何选项文件里指定一个旧的口令!见4.15.4 选项文件。 
  • 如果任何其它事情失败,用调试选项(例如,--debug=d,general,query)启动MySQL(和PHP搭配之最佳组合)d守护进程。这将打印有关尝试连接的主机和用户信息,和发出的每个命令的信息。见G.1 调试一个MySQL(和PHP搭配之最佳组合)服务器。 
  • 如果你有任何与MySQL(和PHP搭配之最佳组合)授权表的其它问题,而且觉得你必须邮寄这个问题到邮寄表,总是提供一个MySQL(和PHP搭配之最佳组合)授权表的倾倒副本(dump)。你可用MySQL(和PHP搭配之最佳组合)dump MySQL(和PHP搭配之最佳组合)命令倾倒数据库表。象平时一样,用MySQL(和PHP搭配之最佳组合)bug脚本邮寄你的问题。在一些情况下你可能用--skip-grant-tables重启MySQL(和PHP搭配之最佳组合)d以便能运行MySQL(和PHP搭配之最佳组合)dump。 

上一页  4 5 6 7 8 9 10  下一页

Tags:MySQL 参考

编辑录入:coldstar [复制链接] [打 印]
赞助商链接