php를 사용하여 데이터베이스에 연결할 때 Connect () 함수 (예 : mysqli_connect () 또는 pdo connection)가 성공적으로 리턴하므로 데이터베이스 서버가 연결 요청을 성공적으로 수락했음을 의미합니다. 그러나 연결이 성공하더라도 권한이 충분하지 않아 특정 데이터베이스 테이블에 액세스 할 수 없을 수 있습니다. 이것은 데이터베이스 권한 문제를 디버깅 할 때 많은 개발자에게 공통적 인 혼란입니다.
이 기사는이 상황의 원인을 자세히 분석하고 불충분 한 권한 문제를 해결하고 해결하는 방법에 대한 아이디어를 제공합니다.
Connect () 함수는 데이터베이스 서버에 대한 연결을 설정하는 것만 담당합니다. 사용자의 사용자 이름과 비밀번호가 올바른지 여부와 서버에 액세스 할 수 있는지 여부를 확인합니다.
그러나 데이터베이스 액세스의 권한 제어는 다음을 포함하여보다 세밀하게 입증됩니다.
이 사용자는 데이터베이스에 액세스 할 수있는 권한이 있습니까?
테이블을 읽거나 쓰거나 수정할 수있는 권한이 있습니까?
특정 작업을 수행 할 수있는 권한이 있습니까 (예 : 저장 절차)
따라서 성공적인 연결은 첫 번째 단계 일 뿐이며 데이터베이스 테이블의 후속 작업에는 해당 권한 지원이 필요합니다.
<?php
$mysqli = new mysqli("m66.net", "username", "password", "database");
// 연결이 성공적으로 연결됩니다
if ($mysqli->connect_errno) {
echo "연결이 실패했습니다: " . $mysqli->connect_error;
exit();
}
// 테이블에 액세스하십시오
$result = $mysqli->query("SELECT * FROM sensitive_table");
if (!$result) {
echo "쿼리가 실패했습니다,오류 메시지:" . $mysqli->error;
}
?>
위 코드에서 Connect ()는 오류를보고하지 않지만 쿼리를 실행할 때 나타날 수 있습니다.
쿼리가 실패했습니다,오류 메시지:Access denied for user 'username'@'host' to database 'database'
또는:
쿼리가 실패했습니다,오류 메시지:SELECT command denied to user 'username'@'host' for table 'sensitive_table'
불충분 한 데이터베이스 사용자 권한 <br> 연결에 사용되는 사용자 계정 권한은 불완전합니다. 계정은 서버에 연결하거나 일부 데이터베이스에 액세스 할 수있는 권한이 있지만 특정 테이블에 액세스하거나 쿼리를 수행 할 수있는 권한이 없습니다.
데이터베이스 권한 설정은 세분성이 높습니다 <br> 데이터베이스 권한은 일반적으로 데이터베이스, 테이블, 열 및 조작 수준에 할당됩니다. 성공적인 연결은 단지 신원을 확인하는 것입니다. 실제 작업은 특정 객체에 대한 사용자의 권한에 따라 다릅니다.
사용자 연결은 운영 사용자와 일치하지 않습니다 <br> 때로는 데이터베이스에 대한 연결이 성공적이지만 쿼리의 실제 ID는 현재 사용자가 아니기 때문에 저장 프로 시저 및 트리거와 같은 내부 통화로 인해 권한 문제가 발생할 수 있습니다.
데이터베이스 관리 도구 또는 명령 줄을 사용하여 사용자의 권한을보십시오.
SHOW GRANTS FOR 'username'@'host';
사용자가 대상 데이터베이스 및 테이블에 올바른 권한이 있는지 확인하십시오.
GRANT SELECT, INSERT, UPDATE ON database.sensitive_table TO 'username'@'host';
FLUSH PRIVILEGES;
잘못된 계정 또는 데이터베이스에 연결하지 않기 위해 연결에 사용 된 사용자 이름, 비밀번호 및 호스트가 올바른지 확인하십시오.
요구에 따르면, 사용자는 과도한 승인을 피하고 정상적인 액세스를 보장하기 위해 해당 권한을 할당합니다.
데이터베이스 관리 도구에서 동일한 계정 테스트 권한을 사용하여 테이블에 액세스 할 수 있는지 확인하십시오.
다음은 MySQLI를 사용하여 PHP가있는 데이터베이스에 연결하고 권한 오류를 처리하는 예입니다.