사용자 / 데이터베이스에 대해 다음과 같은 허가가 있습니다.
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;