【问题标题】:mysqli access denied (42000/1044) linux permissions?mysqli 访问被拒绝 (42000/1044) linux 权限?
【发布时间】:2014-03-16 17:54:21
【问题描述】:

我收到 php 错误

mysqli::mysqli(): (42000/1044): 拒绝用户访问 'sec_user01'@'localhost' 到数据库 'secure_login'

我创建了数据库:

CREATE DATABASE `secure_login`;
I created the user with 
CREATE USER 'sec_user'@'localhost' IDENTIFIED BY '**********************';
GRANT SELECT, INSERT, UPDATE ON `secure_login`.* TO 'sec_user'@'localhost';

我使用

连接到数据库
 include_once 'web_psl-config.php';   // As functions.php is not included
    $mysqli = new mysqli(HOST, USER, PASSWORD, DATABASE);

配置文件已成功包含。 这一直有效到几个小时前。 我唯一能想到的改变是,在我的 php 脚本中,我创建了一些具有 755 访问权限的文件夹。执行此脚本的文件的权限是否可能导致此错误?

我真的很难过。

编辑:我使用 ADODB 连接对此进行了测试

require('../scripts/adodb5/adodb.inc.php');
$ADODB_CACHE_DIR = 'adodb5cache'; 

$Host = "localhost";
$Database = "secure_login";
$Databasetype ="mysql";

// lijst users en passwd
$DbAdminUser="sec_user01";
$DbAdminUserPassword="**************";

$debug = true; //debug on
//$debug = false; //debug off
//admin connection
$dbconn = ADONewConnection($Databasetype);
$dbconn->Connect($Host, $DbAdminUser, $DbAdminUserPassword, $Database);

$query="SELECT * FROM members;";
$ammount=$dbconn->GetAll($query);
print_r($ammount);

这行得通。这是 mysqli 中的某种错误吗? 我真的希望我不必重写就可以使用 ADODB。

【问题讨论】:

    标签: php linux mysqli permissions


    【解决方案1】:
    1. 登录您的 cpanel (www.example.com/cpanel)
    2. 转到 MySQL 添加数据库向导
    3. 类似于“添加数据库”,“add_user”你会有一个按钮 添加用户”到“数据库”。
    4. 点击它,
    5. 添加的用户应在该“数据库”的“特权用户”下列出。

    【讨论】:

      【解决方案2】:

      尝试使用这些凭据登录 phpmyadmin。如果不成功,那么您的凭据可能不匹配。

      【讨论】:

      • 当我登录到 phpmyadmin 时,我可以登录但我看不到数据库。在表 USER_PRIVILEGES 我看到 GRANTEE TABLE_CATALOG PRIVILEGE_TYPE IS_GRANTABLE 'sec_user01'@'localhost' def USAGE NO 但我不明白为什么我使用 ADODB 连接没有问题,但 mysqli 连接给了我这个错误。
      • 在 phpmyadmin 中使用您的 root 登录并从那里获得特权!
      【解决方案3】:

      授权声明格式错误

      GRANT SELECT, INSERT, UPDATE ON `secure_login`.* TO 'sec_user'@'localhost'; is wrong
      GRANT SELECT, INSERT, UPDATE ON secure_login.* TO 'sec_user'@'localhost'; works.
      

      为什么第一次我不知道它会起作用。

      【讨论】:

        【解决方案4】:

        我之前遇到过几次这个错误,据我了解,这个错误的局限性在于很多事情都可能导致它,首先尝试重置您的密码,您这样做的方式是进入终端并输入。

        $ mysqladmin -u root -p'oldpassword' 密码新密码

        请注意在旧密码、密码和新密码的位置填写您的凭据。

        然后尝试我制作的 php 脚本,它会显示您留空的字段,如果它们仍然为空,将为它们使用默认参数。弹出的cmets也会在10秒内消失。

        文件 1

        index.php

        <!DOCTYPE html>
        <html>
        <head>
        <meta http-equiv="content-type" content="text/html; charset=UTF-8" /><meta http-equiv="content-language" content="en-US" />
        <title>MySQL Connection test</title>
        <script type="text/javascript">
        window.onload = function()
        {
            timedHide(document.getElementById('messages'), 10);
        }
        
        function timedHide(element, seconds)
        {
            if (element) {
                setTimeout(function() {
                    element.style.display = 'none';
                }, seconds*1000);
            }
        }
        </script>
        </head>
        <body>
        <span id="messages">
        
        <?php include "constant.php"; ?>
        
        </span>
        </body>
        </html>
        

        文件 2

        常量.php

        <?php
        $database_ip = ""; //database ip adress goes inside quotes
        $database_port = ""; //database port goes inside quotes
        $database_name = ""; //database name goes inside quotes
        
        $database_admin_user = ""; //admin username goes inside quotes
        $database_admin_pass = ""; //admin password goes inside quotes
        
        //do not modify anything past this point unless you know php well.
        
        $database_link = null;
        
        $database_defaults = array("127.0.0.","3306","MySQL","root","");
        $error_defaults = array("error_no_101" => "required field *IP is empty, using default parameters!",
                                "error_no_102" => "required field *PORT is empty, using default parameters!",
                                "error_no_103" => "required field *NAME is empty, using default parameters!",
                                "error_no_104" => "required field *USER is empty, using default parameters!",
                                "error_no_105" => "required field *PASS is empty, using default parameters!");
        
        if(empty($database_ip)){
            $database_ip = $database_defaults[0];
            echo $error_defaults["error_no_101"] . "<br/>";
        }
        
        if(empty($database_port)){
            $database_port = $database_defaults[1];
            echo $error_defaults["error_no_102"] . "<br/>";
        }
        
        if(empty($database_name)){
            $database_name = $database_defaults[2];
            echo $error_defaults["error_no_103"] . "<br/>";
        }
        
        if(empty($database_admin_user)){
            $database_admin_user = $database_defaults[3];
            echo $error_defaults["error_no_104"] . "<br/>";
        }
        
        if(empty($database_admin_pass)){
            $database_admin_pass = $database_defaults[4];
            echo $error_defaults["error_no_105"] . "<br/>";
        }
        
        $database_link = mysqli_connect($database_ip, $database_admin_user, $database_admin_pass, $database_admin_pass);
        
        if (!$database_link) {
            die('Connect Error (' . mysqli_connect_errno() . ') '
                    . mysqli_connect_error());
        }
        
        echo 'Success... ' . mysqli_get_host_info($database_link) . "\n";
        
        mysqli_close($database_link);
        
        ?>
        

        我希望这会有所帮助(=

        【讨论】:

          【解决方案5】:

          当您在用户权限中添加除插入选择更新之外的一些权限时,此错误消失! 所以去用用户名和数据库名在cpanel中添加所有权限。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-04-06
            • 2019-08-23
            • 2013-12-24
            • 2014-08-10
            • 2013-08-23
            • 2021-07-26
            • 1970-01-01
            相关资源
            最近更新 更多