우분투 저장소에서 설치된 mysql-server 패키지에 기본적으로 설치된 ‘debian-sys-maint’사용자가 여러 번 물었습니다.
일반적으로 발생하는 문제는 문제 해결 또는 새로운 개발을 위해 프로덕션 데이터베이스 (Debian / Ubuntu에서 실행되지 않음)의 새로운 사본을 가져 와서 mysql.user 테이블을 제외하여 debian-sys-maint 사용자를 잃는 것입니다.
어떤 이유로 든 새로운 mysql 사용자를 추가하면 테이블을 오버레이하는 대신 개발 환경에 이들을 ‘병합’해야합니다.
사용자가 없으면 내 시스템은 여전히 작동하는 것처럼 보이지만 다음과 같은 오류가 발생했습니다.
sudo /etc/init.d/mysql restart
Stopping MySQL database server: mysqld...failed.
error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
- debian-sys-maint는 무엇을 위해 사용됩니까?
- 패키지 관리자가 수행하려는 작업을 수행하는 더 좋은 방법이 있습니까?
- 분실 한 후 복원하는 가장 쉬운 방법은 무엇입니까?
- 이 사용자에 대한 올바른 / 최소 권한 세트는 무엇입니까?
- ‘*. * …에 대한 모든 권한을 부여하는 것’이 잘못된 생각 인 것 같습니다.
편집하다
추가 질문-/etc/mysql/debian.cnf의 비밀번호가 이미 해시되었거나 일반 텍스트 비밀번호입니까? 사용자를 다시 만들 때 중요하며 첫 번째 시도에서 제대로하지 않는 것 같습니다.
감사
답변
debian-sys-maint는 무엇을 위해 사용됩니까?
사용되는 한 가지 중요한 것은 서버에게 로그를 롤링하도록 지시하는 것입니다. 최소한 재로드 및 종료 권한이 필요합니다.
/etc/logrotate.d/mysql-server 파일을 참조하십시오
/etc/init.d/mysql
스크립트가 서버의 상태를 얻기 위해 사용 합니다. 서버를 정상적으로 종료 / 재로드하는 데 사용됩니다.
README의 인용문은 다음과 같습니다.
* MYSQL WON'T START OR STOP?:
=============================
You may never ever delete the special mysql user "debian-sys-maint". This user
together with the credentials in /etc/mysql/debian.cnf are used by the init
scripts to stop the server as they would require knowledge of the mysql root
users password else.
분실 한 후 복원하는 가장 쉬운 방법은 무엇입니까?
가장 좋은 계획은 단순히 그것을 잃지 않는 것입니다. 비밀번호를 잊어 버린 경우 다른 계정을 사용하여 비밀번호를 재설정하십시오. mysql 서버에서 모든 관리자 권한을 잃은 경우 가이드에 따라 루트 비밀번호를 재설정 한 다음을 복구하십시오 debian-sys-maint
.
이와 같은 명령을 사용하여 나중에 계정을 다시 만드는 데 사용할 수있는 SQL 파일을 작성할 수 있습니다.
mysqldump --complete-insert --extended-insert=0 -u root -p mysql | grep 'debian-sys-maint' > debian_user.sql
/etc/mysql/debian.cnf의 비밀번호가 이미 해시되어 있습니까?
비밀번호는 설치시 해시 / 암호화되지 않지만 새로운 버전의 mysql은 이제 자격 증명을 암호화 할 수 있습니다 ( https://serverfault.com/a/750363 참조 ).
답변
데비안-SYS-MAINT의 사용자는 기본적으로 인 루트에 해당 . 데비안 시스템의 특정 유지 관리 스크립트에서 사용되며 부작용으로 상자에 루트 액세스 권한이있는 사용자가 /etc/mysql/debian.cnf의 일반 텍스트 비밀번호를 볼 수 있습니다 (좋거나 나쁨).
다음을 통해 사용자를 다시 만들 수 있습니다.
GRANT ALL PRIVILEGES on *.* TO `debian-sys-maint`@`localhost` IDENTIFIED BY 'your password' WITH GRANT OPTION;
그냥 암호가 일치하는지 확인 /etc/mysql/debian.cnf에 있음
답변
당신은 또한 할 수 있습니다 :
sudo dpkg-reconfigure mysql-server-5.0
debian-sys-maint 사용자를 재 작성할 수있는 옵션이 제공됩니다. 기존 사용자와 데이터베이스는 안전합니다.
답변
나는 단지 의견을 말하고 싶었지만 올바른 구문 은 그 자체의 항목 이라고 생각 합니다 . debian-sys-maint 사용자 가 생성됩니다 :
mysql> GRANT ALL PRIVILEGES on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'plaintextpassword' WITH GRANT OPTION; FLUSH PRIVILEGES;
여전히 /etc/mysql/debian.cnf 파일이 있으면 여기에 비밀번호를 사용하십시오.
더 편집증적인 보안 솔루션 을 생각해보십시오 .
답변
당신은 추가해야하는 경우 debian-sys-maint
단지에 대한 사용자를 logrotate.d
위해, 당신은해야 되지 부여 ALL PRIVILEGES
또는이 GRANT OPTION
-이 불필요한 거대한 보안 구멍이다. 대신 다음 RELOAD
과 같은 권한으로 사용자를 추가 할 수 있습니다 (db에 액세스 root
하고 xxxxxx를 암호로 바꾼다고 가정 ).
# add the user with the reload right
GRANT RELOAD on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'xxxxxx';
# reload the rights
FLUSH PRIVILEGES;
# double check
select * from mysql.user;
2019 년 업데이트
이 답변은 최신 내용이 아닐 수 있습니다. 아래의 의견이 많은 의견을 참조하십시오
답변
대신에
GRANT ALL PRIVILEGES on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY PASSWORD('your password') WITH GRANT OPTION; FLUSH PRIVILEGES;
나는 생각한다
GRANT ALL PRIVILEGES on *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'your password' WITH GRANT OPTION; FLUSH PRIVILEGES;
비밀번호가 해시되지 않았기 때문에 …?
답변
debian-sys-maint 필수 권한
다른 답변은 debian-sys-maint 사용자에게 필요한 최소 권한 세트를 제외한 모든 것을 충분히 해결했습니다. 여기의 많은 답변은 그 점에서 단순히 틀 렸으며 실제로 위험합니다. 아래를 읽고 이해하지 않고 debian-sys-maint 권한 (grant 옵션 포함)을 줄이지 마십시오 :
데비안 관리자는 사용자에게 모든 권한을 변덕스럽게 부여하지 않았습니다. 필요한 것, 장소 및 이유는 다음과 같습니다. 이 특권 중 일부는 다른 특권보다 우선하지만, 사물을 사용자 정의하고 요구 사항을 제거하려는 경우 독립적으로 나열합니다.
- /etc/init.d/mysql에 의해 수행되는 데이터베이스 종료 또는 수행을위한 shutdown 및 reload
- mysql.user를 선택하십시오. 데이터베이스가 시작될 때 수행 된 온 전성 검사에 필요한 루트 사용자가 있는지 확인하십시오. /usr/share/mysql/debian-start.inc.sh 파일의 check_root_accounts 함수에있는 실제 코드를 사용하여 /etc/mysql/debian-start(/etc/init.d/mysql)에 의해 각 시작을 완료했습니다.
- INFORMATION_SCHEMA.TABLES에 선택 , 글로벌 선택 , 추락 테이블 확인 필요. /usr/share/mysql/debian-start.inc.sh 파일의 check_for_crashed_tables 함수에있는 실제 코드를 사용하여 /etc/mysql/debian-start(/etc/init.d/mysql)에 의해 각 시작을 완료했습니다.
- 업데이트 또는 데비안 업그레이드를 통해 새 버전의 MySQL이 설치되어있는 경우 테이블 업그레이드에 필요한 전역 모든 권한 . /usr/share/mysql/debian-start.inc.sh 파일에있는 upgrade_system_tables_if_necessary 함수의 실제 코드를 사용하여 /etc/mysql/debian-start(/etc/init.d/mysql)에 의해 각 시작을 완료했습니다. 실제로 MySQL 바이너리 mysql_upgrade를 호출합니다-함수 이름 (upgrade_system_tables_if_necessary)에 속지 마십시오. 잠재적으로 모든 테이블을 만질 수 있습니다-아래 참조
마지막 것은 물론 특권에 대한 주요 요구 사항입니다. mysql_upgrade의 매뉴얼 페이지는 다음과 같습니다.
mysql_upgrade는 모든 데이터베이스의 모든 테이블에서 현재 버전의 MySQL 서버와의 비 호환성을 검사합니다. mysql_upgrade는 시스템 테이블을 업그레이드하여 추가되었을 수있는 새로운 권한이나 기능을 활용할 수 있습니다.
mysql_upgrade가 테이블에 비 호환성이 있음을 발견하면 테이블 검사를 수행하고 문제가 발견되면 테이블 복구를 시도합니다.
경고
debian-sys-maint의 권한을 줄이기로 결정한 경우, MySQL에 영향을 미치는 향후 데비안 보안 업데이트 및 / 또는 업그레이드를 수동으로 처리 할 준비가되어 있는지 확인하십시오. debian-sys-maint 권한이 감소 된 MySQL 패키지에서 업데이트를 수행하고 결과적으로 mysql_upgrade가 완료되지 않으면 데이터베이스가 정의되지 않은 (읽기 깨진) 상태로 남아있을 수 있습니다. 권한을 줄이면 업데이트가 이루어질 때까지 명백한 일상적인 문제가 없을 수 있으므로 안전하다고 생각하기위한 기초로 이미 해로운 영향을주지 않고 권한을 줄인 사실에 의존하지 마십시오.