AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1164935
Accepted
Mark
Mark
Asked: 2024-09-08 02:45:53 +0800 CST2024-09-08 02:45:53 +0800 CST 2024-09-08 02:45:53 +0800 CST

Não é possível acessar o banco de dados do script PHP quando chamado da página da web

  • 772

Estou executando o Ubuntu 22.04, nginx 1.18.0, mariadb 15.1 e PHP 8.1.2. Aqui está o código do meu database.php:

<?php

$SERVER_APP = "localhost";
$DATABASE_APP = "mydb";
$USERNAME_APP = "root";
$PASSWORD_APP = "password";

function db_connect() {
    global $SERVER_APP, $DATABASE_APP, $USERNAME_APP, $PASSWORD_APP;

    try {
        $dbApp = new PDO("mysql:host=$SERVER_APP;dbname=$DATABASE_APP", $USERNAME_APP, $PASSWORD_APP);
        $dbApp->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $dbApp->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
        echo "Connected to db";
        return $dbApp;
    } catch (PDOException $e) {
        echo $e->getMessage();
    }
}

se eu executar este código a partir da linha de comando:

php -r "require 'database.php'; db_connect();"

funciona bem:

Conectado ao banco de dados

E também posso conectar ao banco de dados SQL usando:

mysql -u root -p

e inserindo a mesma senha. Mas quando a função acima é chamada de um script PHP, assim samples.php:

<?php header("Access-Control-Allow-Origin: *");
header("Content-type: application/json");
require 'database.php';

ini_set('display_errors', 1);
error_reporting(E_ALL);

$dbApp = db_connect();  
$stmt = $dbApp->prepare("SELECT * FROM sensors WHERE sampled > (now() - interval 24 hour) ORDER BY sampled;");
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($results);

$dbApp = null;

que, por sua vez, é chamado de index.php:

// url = 'samples.php'
function get_samples(url) {
    fetch(window.location.protocol + "//" + window.location.hostname + ":3001" + url, {
        method: "GET",
        headers: {
            "Content-Type": "application/json"
        },
    })
    .then(response => response.text())
    .then(text => {
        // do something
    })
    .catch(error => console.error(error))
}

a conexão com o banco de dados falha:

SQLSTATE[HY000] [1698] Acesso negado para o usuário 'root'@'localhost'

Claro que o banco de dados está no mesmo servidor, ou seja, localhost. O que poderia causar o erro de acesso negado se o mesmo script estiver funcionando quando chamado manualmente do console?

nginx
  • 1 1 respostas
  • 69 Views

1 respostas

  • Voted
  1. Best Answer
    kodu.cloud
    2024-09-08T16:10:35+08:002024-09-08T16:10:35+08:00

    mariadb 15.1 tem certeza?

    O problema que você está enfrentando provavelmente está relacionado à maneira como o usuário root do MySQL está configurado para autenticar no Ubuntu. Por padrão, em sistemas Ubuntu, o usuário root do MySQL geralmente usa autenticação baseada em soquete em vez de autenticação baseada em senha quando acessado da máquina local. Isso significa que quando você se conecta usando a linha de comando, o sistema autentica o usuário como root com base na sessão de login do sistema operacional, sem precisar de uma senha.

    Entretanto, quando o script PHP é executado por meio de um servidor web (como Nginx ou Apache), ele não é autenticado por meio do soquete e, portanto, não consegue autenticar com a senha que você forneceu.

    Em vez de usar o usuário root, o que não é recomendado para aplicativos web, crie um novo usuário MySQL específico para seu aplicativo e conceda a ele as permissões necessárias.

    CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'newpassword';
    GRANT ALL PRIVILEGES ON mydb.* TO 'newuser'@'localhost';
    FLUSH PRIVILEGES;
    
    • 1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve