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

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

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에 대한 %권한 자체를 취소하지 않고 (다시하고)?



답변

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';


답변

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

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


답변

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

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


답변

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

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

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

 flush privileges;


답변

단순히 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;


답변