mariadb 10.4 이후 버전에서 php mysqli를 이용해서 데이터베이스 접속시
기본 localhost로 접속을 하게 되면 정상적으로 접속이 되지 않는다
유저 생성시 ‘%’ 구성하면 되겠지만 보안상 좋지 않기 때문에
mariadb 10.4 버전에서 인증방식이 2가지로 변경되었는데 이때문인지 우선 유저를 추가하고 나서
1 2 3 4 5 |
-- 새로운 유저 생성 CREATE USER 'sourcetest'@'localhost' IDENTIFIED BY 'sourcetest7700'; -- 권한 부여 GRANT ALL PRIVILEGES ON sourcetest.* TO 'sourcetest'@'localhost'; |
오부접속 사용자도 동일하게 생성 패스워드는 다르게
1 2 3 4 5 |
-- 새로운 유저 생성 CREATE USER 'sourcetest'@'%' IDENTIFIED BY 'sourcetest7788'; -- 권한 부여 GRANT ALL PRIVILEGES ON sourcetest.* TO 'sourcetest'@'%'; |
확인
1 2 3 4 5 6 7 8 9 10 11 12 13 |
MariaDB [mysql]> select Host,User,Password,plugin from user; +-----------------------+-------------+-------------------------------------------+-----------------------+ | Host | User | Password | plugin | +-----------------------+-------------+-------------------------------------------+-----------------------+ | localhost | mariadb.sys | | mysql_native_password | | localhost | root | *8EA9D362916A13AFFE39F15CEC2EA4645A149139 | mysql_native_password | | | PUBLIC | | | | localhost | | | | | localhost.localdomain | | | | | localhost | sourcetest | *A3D78CDA091E10E2C289CFEE33C0059419162E03 | mysql_native_password | | % | sourcetest | *F5248C1E171D918D4F4912C830560582542256A5 | mysql_native_password | +-----------------------+-------------+-------------------------------------------+-----------------------+ 7 rows in set (0.001 sec) |
기본 plugin 방식을 확인해보면 mysql_native_password 이다
이제 sourcetest 에 테이블을 만들어서 데이터를 입력
1 2 3 4 5 6 7 8 |
CREATE TABLE `Users` ( `id` int(3) NOT NULL, `name` varchar(20) DEFAULT NULL, `email` varchar(20) DEFAULT NULL, `country` varchar(20) DEFAULT NULL, `password` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; |
테이블 데이터 입력
1 |
INSERT INTO `Users` VALUES (1,'Pankaj','pankaj@apple.com','India','pankaj123'),(4,'David','david@gmail.com','USA','david123'),(5,'Raman','raman@google.com','UK','raman123'),(6,'jsh','jsh@mailhosting.kr','KR','asfdf122'),(7,'jinsunghoon','jinsh82@gmail.com','KR','45213454'),(8,'jisungpark','love@nate.com','KR','1234134'),(9,'dbmaster','dbmaster@naver.com','KR','db11dd34'),(10,'system','system@hanmail.net','KR','iuzbvsdbs'); |
이제 해당 테이블의 내용을 간략하게 php 파일로 구성해서 출력해보자 test.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
<?php // 데이터베이스 연결 정보 $servername = "localhost"; $username = "sourcetest"; $password = "sourcetest7700"; $dbname = "sourcetest"; // MySQLi 객체 생성 및 연결 $conn = new mysqli($servername, $username, $password, $dbname); // 연결 확인 if ($conn->connect_error) { die("연결 실패: " . $conn->connect_error); } // Users 테이블에서 데이터 선택 쿼리 $sql = "SELECT id, name, email, country, password FROM Users"; $result = $conn->query($sql); // 결과 확인 및 출력 if ($result->num_rows > 0) { // 테이블 헤더 출력 echo "<table border='1'> <tr> <th>ID</th> <th>Name</th> <th>Email</th> <th>Country</th> <th>Password</th> </tr>"; // 결과 행 출력 while($row = $result->fetch_assoc()) { echo "<tr> <td>" . $row["id"] . "</td> <td>" . $row["name"] . "</td> <td>" . $row["email"] . "</td> <td>" . $row["country"] . "</td> <td>" . $row["password"] . "</td> </tr>"; } echo "</table>"; } else { echo "0 결과"; } // 연결 종료 $conn->close(); ?> |
웹에서 페이지 출력을 해보면 처음 시도에서 계속 커넥션 에러가 발생한다
정상적으로 mysql 명령어로 localhost 접속시 잘되는데 php에서만 접속이 localhsot로 진행이 안되는 경우
my.cnf 파일에 기본 패스워드 인증방식을 추가해주고 mariadb 재시작
1 2 3 4 5 6 |
[root@localhost jin]# vi /etc/my.cnf.d/server.cnf [mysqld] ### 인증방식 default-authentication-plugin = mysql_native_password |
mariadb 재시작
1 |
[root@localhost jin]# systemctl restart mariadb |
웹페이지에서 확인해보면 정상적으로 페이지 출력
ps : 추가적으로 한번 정상접속이 되면 그 이후부터는 해당 옵션이 없어도 정상적으로 연결이 된다
버그인지 ㅠㅠ