문제

내 MySQL 설정에서 MySQL 루트 사용자에 문제가 있는데 평생 동안 문제를 해결하는 방법을 찾을 수 없습니다.루트 사용자를 엉망으로 만든 것 같으며 데이터베이스에 대한 액세스가 이제 매우 불규칙합니다.

참고로 저는 OS X에서 MAMP를 사용하여 MySQL 서버를 제공하고 있습니다.하지만 그것이 얼마나 중요한지는 잘 모르겠습니다. 제가 한 일이 무엇이든 이를 해결하려면 명령줄 수정이 필요할 것이라고 추측합니다.

평소처럼 MAMP를 사용하여 MySQL을 시작할 수 있고, PHP 앱용으로 생성한 '표준' 사용자를 사용하여 데이터베이스에 액세스할 수 있습니다.그러나 MySQL GUI 클라이언트와 phpMyAdmin에서 사용하는 루트 사용자는 "information_schema" 데이터베이스와 내가 수동으로 생성한 두 데이터베이스에만 액세스할 수 있으며 아마도 (그리고 실수로) 권한이 활짝 열려 있는 것 같습니다.내 15개 정도의 다른 데이터베이스는 루트 사용자로 액세스할 수 없습니다.phpMyAdmin을 로드하면 홈 화면에 다음과 같이 표시됩니다."새 데이터베이스 만들기:특권 없음."

나는 어떤 단계에서 MAMP 대화 상자를 사용하여 루트 사용자의 비밀번호를 변경했습니다.하지만 이 문제를 일으킬 수 있는 다른 작업을 수행했는지 기억이 나지 않습니다.비밀번호를 다시 변경해 보았는데 문제에는 변화가 없는 것 같습니다.

또한 --skip-grant-tables를 사용하여 수동으로 mysql을 시작한 다음 개인 정보를 플러시하는 등 명령줄을 사용하여 루트 비밀번호를 재설정하려고 시도했지만 문제가 해결되지 않는 것 같습니다.

내 아이디어가 끝났으며 여기 전문가 중 한 사람의 단계별 조언과 진단에 진심으로 감사하겠습니다!

도움을 주셔서 감사합니다.

도움이 되었습니까?

해결책

이는 MAMP와 명령줄 mysql(및 MAMP를 제외한 모든 mysql)이 다르기 때문입니다.

MAMP에는 mysql이 내장되어 있으며 명령줄을 통해서는 접근할 수 없고 phpmyadmin의 빌드로만 접근할 수 있습니다.

이것은 내 경험이었습니다. 저는 MAMP를 가지고 있고 Ruby on Rails 및 기타 작업에 다른 mysql을 사용합니다.

다른 팁

나는 같은 문제가 있었다 :단 하나의 사용자 계정만 관리 콘솔이나 쿼리 브라우저를 통해 mysql 데이터베이스에 액세스했습니다.Skip-grant-table을 사용했을 때 갑자기 루트를 포함한 모든 계정이 로그인할 수 있었습니다.

나는 그것을 보았다 2006년까지 거슬러 올라가는 버그로, 그러나 마지막 항목에는 Skip-grant-tables 모드에서 실행할 수 있는 명령이 없으므로 여전히 문제를 해결하지 못했습니다.

나에게 도움이 된 것
이 답변은 Ben Bakelaar가 설명한 것과 유사합니다. 위 링크에서.문제는 당신이 my.ini 이름 확인 플래그가 비활성화되어 있습니다(skip-name-resolve).이로 인해 'localhost'를 확인하는 mysql의 기능이 중단되고 mysql.user 테이블에는 localhost/root에 대한 항목만 있습니다.

대신 mysql.user 테이블의 localhost 항목을 127.0.0.1로 업데이트하면 Skip-name-resolve 기능이 활성화된 경우에도 로컬 콘솔에 로그인할 수 있습니다.

--skip-grant-tables를 사용하여 서버를 시작한 다음 mysql 데이터베이스의 권한 테이블을 확인해 보십시오.

select * from user where User='root';
select * from tables_priv where User='root';
select * from db where User='root';

다음을 시도해 볼 수도 있습니다.

show grants for root@localhost;
show grants for root@'%';
show grants for root@'hostname';

일단 루트에 전체 권한을 부여하려면 다음을 수행할 수 있습니다.

grant all privileges on *.* to root@localhost identified by 'password' with grant option;

귀하의 의견은 귀하의 현재 루트 권한을 보여줍니다(--skip-grant-tables 제외).'root'@'%'에 대한 항목이 없어도 괜찮습니다. 기본적으로 항목이 없으므로 보안 조치로 간주할 수 있습니다.

네 일을 망친 것 같구나 'root'@'localhost' 특권. GRANT ALL PRIVILEGES ON . 이상해요.일반적으로 다음과 같은 것이 있습니다. GRANT ALL PRIVILEGES ON *.* 또는 GRANT ALL PRIVILEGES ON myDatabase.myTable.당신의 GRANT 권한을 부여할 데이터베이스 및/또는 테이블을 지정하지 않습니다.나는 당신의 고객이 그것을 어떻게 생산했는지 전혀 모릅니다.mysql 명령줄 클라이언트로 이를 재현할 수 없습니다(빈 문자열, 공백, 모든 종류의 따옴표 등을 시도함). mysql은 GRANT 문(물론 올바른 동작임)을 거부합니다.MAMP가 정말 이상한 일을 하고 있는 것 같습니다.재현할 수 없기 때문에 GRANT 당신처럼 mysql이 그것을 어떻게 해석하는지 말할 수는 없지만 권한을 다음과 같이 설정한 것 같습니다. 'N' 글로벌 수준에서.

이 문제를 해결하려면 적절한 권한을 가진 사용자가 필요합니다.일반적으로 사용자가 있습니다. 'root'@'localhost' 그리고 'root'@'your-hostname'.운이 좋다면, 'root'@'your-hostname' 아직 괜찮아요.Apair, mysql 연결은 다음과 같이 작동합니다.에 연결하면 localhost, 다음으로 연결합니다 'root'@'localhost' (확실하지 않음 127.0.0.1, 그것도 그럴 것 같아 'root'@'localhost').에 연결하면 your-hostname, 다음으로 연결합니다 'root'@'your-hostname'.이 사용자의 권한이 여전히 괜찮다면 다음에 대한 권한을 업데이트할 수 있습니다. 'root'@'localhost' 그리고 당신은 끝났습니다.

귀하의 의견에 다음을 통해 연결할 수 없다고 말합니다. 127.0.0.1 소켓이 특이한 위치에 있기 때문입니다.오류를 잘못 해석하신 것 같습니다.IIRC에 연결하면 소켓을 통해 연결됩니다. 'localhost', 그러나 다음에 연결하는 경우 TCP/IP를 통해 127.0.0.1 또는 your-hostname.mysql이 소켓을 통해 연결을 시도하고 소켓을 찾을 수 없는 경우(올바른 위치를 지정하지 않았기 때문에) mysql이 소켓을 찾으려고 시도한 위치가 오류 메시지에 표시됩니다.오류 메시지는 그렇지 않습니다.귀하의 오류는 네트워킹 오류인 것 같습니다.아마도 당신은 mysql-server를 다음과 같이 시작했을 것입니다. --skip-networking 옵션이거나 구성이 잘못된 바인드 주소를 지정합니다.먼저 문제를 해결해야 합니다. 그렇지 않으면 연결할 수 없습니다. 'root'@'your-hostname'.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top