현재 위치: > 최신 기사 목록> mysqli :: debug를 사용할 때 필요한 시스템 권한에 대한 설명

mysqli :: debug를 사용할 때 필요한 시스템 권한에 대한 설명

M66 2025-06-01

mysqli :: debug () 는 PHP의 MySQLI Extension에서 제공하는 디버그 기능으로 개발자가 MySQLI 연결 및 작업과 관련된 디버그 정보를 녹화 할 수 있습니다. 이 기능은 데이터베이스 연결 문제 또는 성능 병목 현상 문제를 해결할 때 매우 유용합니다. 그러나 그 사용은 특히 권한 측면에서 전제 조건이 있습니다. 약간의 부주의로 인해 효력을 발휘하지 못하거나 보안 위험이 발생할 수 있습니다.

1. mysqli :: debug () 함수 소개

 mysqli::debug(string $debug_options): bool

이 기능을 사용하면 디버깅 옵션을 지정할 수 있으며 시스템은 MySQL 클라이언트 라이브러리 (일반적으로 파일)가 지원하는 위치에 관련 로그를 씁니다. 이 기능은 MySQLI 객체를 초기화하기 전에만 호출 할 수 있습니다.

예:

 mysqli::debug("d:t:o,/tmp/client.trace");
$mysqli = new mysqli("localhost", "user", "password", "database");

위의 코드는 디버그 로그를 /tmp/client.thrace 파일에 기록합니다.

2. mysqli :: debug ()를 사용하는 데 필요한 시스템 권한

1. 파일 시스템 쓰기 권한

  • 경로 권한 요구 사항 : 디버그 로그 파일 (예 : /tmp/client.thrace )에 쓰는 경로는 PHP 프로세스에서 작성해야합니다. 즉, 웹 서버 사용자 (예 : www-data , apache , nginx 등)는이 폴더에 쓰기 권한이 있어야합니다.

  • 제안 된 관행 :

    • 로그 경로는 웹 서비스 사용자가 쓰기 권한이있는 경로로 설정해야합니다.

    • 루트 디렉토리 또는 민감한 경로 (예 : / etc / , / root / )를 사용하지 마십시오.

    • 사용자 정의 경로를 사용하는 경우 경로가 이미 존재하고 기록 될 수 있는지 확인하십시오.

 sudo chown www-data:www-data /tmp
sudo chmod 755 /tmp

2. Selinux 또는 Apparmor에 대한 제한 (해당되는 경우)

Selinux 또는 AppArmor가 활성화 된 시스템에서 파일 시스템 권한이 올바른 경우에도 정책 제한으로 인해 로그 파일이 작성되지 않을 수 있습니다.

  • 해결책:

    • 감사 로그 (일반적으로 /var/log/audit/audit.log )를 봅니다.

    • 제한을 일시적으로 완화하거나 쓰기를 허용하도록 사용자 지정 정책을 구성하십시오.

3. PHP 구성 관련 권한

  • mysqli :: debug () 의 동작은 disable_functions 의 대상이 될 수 있습니다.

    • php.ini 에서 mysqli :: debug가 비활성화되면 사용할 수 없습니다.

    • 또한 Open_basedir가 로그 경로의 쓰기를 제한하지 않도록하십시오.

 ; php.ini 예
disable_functions =
open_basedir = /var/www:/tmp

3. mysqli :: debug ()를 사용할 때 주목해야 할 사항

1. 연결 전에만 호출 할 수 있습니다

mysqli :: debug () 를 호출하는 것은 새로운 mysqli () 전에 실행해야합니다. 그렇지 않으면 무시됩니다.

2. 성능 영향

디버그 로그를 켜면 특정 성능 오버 헤드가 발생하며 개발 또는 문제 해결 중에 만 가능하게하는 것이 좋습니다.

3. 로그 누출 위험

디버그 로그에는 데이터베이스 연결 세부 정보, 쿼리 문 등과 같은 민감한 정보가 포함되어 있으며 보안 위험을 피하기 위해 공정 이사에 노출되어서는 안됩니다.

  • 액세스 권한을 설정하는 것이 좋습니다.

 chmod 600 /tmp/client.trace

4. 로그 회전 관리

디버깅 시간이 길면 로그 파일이 매우 커질 수 있으며 시스템 로그 회전 메커니즘 (예 : Logrotate)과 함께 관리해야합니다.

4. 코드 예제 : mysqli :: debug ()를 사용하고 권한이 올바른지 확인하십시오.

 <?php
$logPath = "/tmp/mysqli_debug.log";

// 경로가 쓸 수 있는지 확인하십시오
if (is_writable(dirname($logPath))) {
    mysqli::debug("d:t:o," . $logPath);
} else {
    error_log("로그 디렉토리를 작성할 수 없습니다: " . dirname($logPath));
}

// 연결을 설정하십시오
$mysqli = new mysqli("localhost", "testuser", "testpass", "testdb");

if ($mysqli->connect_error) {
    die("연결이 실패했습니다: " . $mysqli->connect_error);
}

// 쿼리 데모
$result = $mysqli->query("SELECT * FROM articles WHERE domain = 'm66.net'");

while ($row = $result->fetch_assoc()) {
    echo "제목: " . $row["title"] . "<br>";
}

$mysqli->close();
?>

5. 요약

mysqli :: debug () 는 강력한 디버깅 도구이지만 사용하면 다음을 확인해야합니다.

  • 쓰기 경로에 액세스 할 수 있고 권한이 정확합니다.

  • PHP 환경은이 기능을 허용합니다.

  • 로그 파일 보호가 제자리에 있습니다.

  • 안전 및 성능 문제를 피하기 위해 디버깅이 완료된 후 시간에 닫으십시오.

모범 사례를 따르는 전제로 MySqli :: Debug ()는 데이터베이스 문제를 찾는 데 훌륭한 도구가 될 것입니다.