MySQL 사용자의 호스트 권한 변경


43

사용자 / 데이터베이스에 대해 다음과 같은 허가가 있습니다.

mysql> SHOW GRANTS FOR 'username'@'localhost';
+---------------------------------------------------------------------------+
| Grants for username@localhost                                             |
+---------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'username'@'localhost' IDENTIFIED BY PASSWORD 'xxx' |
| GRANT ALL PRIVILEGES ON `userdb`.* TO 'username'@'localhost'              |
+---------------------------------------------------------------------------+

데이터베이스에 대한 외부 액세스를 가능하게하려면 localhost를로 변경해야합니다 %. 이를 수행하는 한 가지 방법은 REVOKE모든 권한이며 다시 설정하는 것입니다. 문제는 내가 모르는 암호 세트가 있으므로 권한을 취소하면 다시 설정할 수 없다는 것입니다.

호스트 이름을 변경하는 방법이 localhost에 대한 %권한 자체를 취소하지 않고 (다시하고)?

답변:


58

mysql데이터베이스에 액세스 할 수있는 경우 권한 부여 테이블을 직접 변경할 수 있습니다.

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;

... 그리고 UPDATE그것을 바꾸는 유사한 진술.

또한 mysql.db테이블을 변경해야 할 수도 있습니다.

UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';

약간의 수정 (mysql 서버 버전 : 5.7.5-m15-MySQL 커뮤니티 서버) : phpmyadmin 및 mysql 명령 프롬프트-UPDATE 둘 다에서 mysql. userSET Host= 'localhost'WHERE user. Host= '%'AND user. User= 'XXXdbusr';
Jadeye

1
프로덕션 데이터베이스의 경우 %로주의하면 보안 위험이 될 수 있습니다. 웹 서버가 여러 개인 경우 '192.168.0. %'또는 ''% .example.com ''과 같은 와일드 카드 호스트를 사용할 수도 있습니다. 다른 옵션은 각 호스트에 대해 동일한 사용자를 여러 번 추가하거나 웹 서버마다 별도로 이름이 지정된 사용자를 만드는 것입니다.
Fx32

나처럼 로컬 테스트 시스템 (내 경우에는 RasPi)에서 루트 액세스를 허용하려고 시도하면 MySQL 5.7부터 작동하지 않습니다. 이 글
Raul Pinto

@RaulPinto : 그 스레드는 phpMyAdmin에 관한 것으로 보입니다.
nickgrim

잘 문서화 된 진술을 사용하는 것이 좋습니다. RENAME USER
Antonio Bardazzi

6

어떤 사용자 복사 권한 을 사용할 것을 제안하는 Stackoverflow에 대한 최고의 답변 RENAME USER.

데이터 제어 언어 (GRANT, REVOKE, RENAME 등의 명령문)를 사용하는 것은 FLUSH PRIVILEGES;MyISAM 테이블이 복제되지 않는 Galera 또는 Group Replication과 같은 아키텍처에서 필요하지 않으며 필요 합니다.


2

나는 이것도 우연히 발견했으며 데이터베이스 특정 권한도 이동하지 않기 때문에 제안 된 솔루션이 작동하지 않았습니다. 제가 한:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;

그리고 "그것"이 효과가 있었습니까?
Pierre.Vriens

1

권한을 변경하려면 먼저 사용자에게 모든 권한을 취소하십시오

 revoke all privileges on *.* from 'username'@'localhost';

 grant SELECT,INSERT,UPDATE,DELETE ON `db`.* TO 'username'@'%';

 flush privileges;

정확히 내 문제는 암호 때문에 권한을 취소 할 수 없습니다. 내 질문을 읽어주세요.
Fu86

업데이트를 통해 비밀번호 해시를 이전 비밀번호와 동일하게 설정할 수 있습니다. 그렇게하기 위해 실제 비밀번호를 알 필요는 없습니다.
drogart

0

단순히 db 이외의 권한 (예 : 테이블 또는 열 등)이있는 경우 많은 테이블이 누락되었습니다. 사용자에게 부여 된 권한에 따라이 모든 테이블 또는 일부를 업데이트해야 할 수 있습니다.

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.tables_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.columns_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.procs_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.proxies_priv SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.