programing

잠금 테이블을 수행할 때 원격 사용자의 액세스가 거부됨

sourcetip 2023. 9. 9. 23:18
반응형

잠금 테이블을 수행할 때 원격 사용자의 액세스가 거부됨

두 개의 openwrt-qemu 시스템에서 mariadb-server v10.2.33-1을 실행하고 있습니다.원격 사용자가 특정 테이블에서 LOCK TABLE을 달성하기를 원합니다.

로컬 mysql 서버에서 원격 사용자를 생성하고 다음 명령을 사용하여 LOCK TABLES 권한을 부여했습니다.

CREATE USER 'root'@'192.168.%' IDENTIFIED BY 'root';
GRANT SELECT ON `qkd`.`RawKeyStatus` TO 'root'@'192.168.%';
GRANT LOCK TABLES ON `qkd`.* TO 'root'@'192.168.%';
FLUSH PRIVILEGES;

실행시SHOW GRANTS원격 사용자 시스템에서, 나는 그것을 알아차릴 수 있습니다.LOCK TABLES권한이 할당되었습니다.'root'@'192.168.%'. 원격 사용자는 또한SELECT테이블 위의 특권qkd.RawKeyStatus.

하지만LOCK TABLE qkd.RawKeyStatus READ;원격 시스템의 명령이 실패하고 다음 오류가 발생합니다.

ERROR 1044 (42000): Access denied for user 'root'@'192.168.%' to database 'qkd'

제가 무엇을 빠뜨리고 있나요?

SHOW PROCESSLIST를 실행하여 원격 사용자가 로그인한 시스템을 확인하고 192.168.%아닌 경우 GRANT를 변경합니다.

MariaDB [(none)]> show processlist;
+------+-------------+-----------+------+---------+------+--------------------------+------------------+----------+
| Id   | User        | Host      | db   | Command | Time | State                    | Info             | Progress |
+------+-------------+-----------+------+---------+------+--------------------------+------------------+----------+
|    1 | system user |           | NULL | Daemon  | NULL | InnoDB purge coordinator | NULL             |    0.000 |
|    2 | system user |           | NULL | Daemon  | NULL | InnoDB purge worker      | NULL             |    0.000 |
|    3 | system user |           | NULL | Daemon  | NULL | InnoDB purge worker      | NULL             |    0.000 |
|    4 | system user |           | NULL | Daemon  | NULL | InnoDB purge worker      | NULL             |    0.000 |
|    5 | system user |           | NULL | Daemon  | NULL | InnoDB shutdown handler  | NULL             |    0.000 |
| 3357 | root        | localhost | NULL | Query   |    0 | init                     | show processlist |    0.000 |
+------+-------------+-----------+------+---------+------+--------------------------+------------------+----------+
6 rows in set (0.01 sec)

MariaDB [(none)]>

업데이트: 와일드카드 192.168.%와 관련된 문제입니다.서브넷 192.168.A의 모든 사용자에게 GRANT를 제공합니다.올바른 와일드카드는 192.168.%입니다.

보다 안전한 옵션은 서브넷 마스크를 사용하는 것입니다.

GRANT ... TO 'user'@'192.168.0.0/255.255.255.0' IDENTIFIED BY ...

지금이다LOCK TABLE qkd.RawKeyStatus READ;명령은 출력과 함께 완벽하게 실행됩니다.

참조:전체 서브넷에 대해 MySQL에 대한 원격 액세스를 허용하는 방법은?

빠른 해결 방법은 단일 트랜잭션 옵션을 mysqdump에 전달하는 것입니다.

예를 들어 다음과 같습니다.

$ mysqldump --single-transaction -u user -p DBNAME > backup.sql

ref: https://michaelrigart.be/mysqldump-1044-access-denied-using-lock-tables/

언급URL : https://stackoverflow.com/questions/65231609/access-denied-to-remote-user-when-doing-lock-tables

반응형