잠금 테이블을 수행할 때 원격 사용자의 액세스가 거부됨
두 개의 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
'programing' 카테고리의 다른 글
PIL을 사용하여 RGBA PNG를 RGB로 변환 (0) | 2023.09.09 |
---|---|
std:: 문자열을 사용한 printf? (0) | 2023.09.09 |
Ajax에서 POST 데이터 크기 제한이 있습니까? (0) | 2023.09.09 |
Angular CLI 6: angular.json에서 Sass 컴파일을 추가하려면 어떻게 해야 합니까? (0) | 2023.09.09 |
구조 sockaddr_un vs sockaddr (0) | 2023.09.09 |