itsource

MySQL: MySQL에서 플러시 권한이 필요한 경우

mycopycode 2023. 1. 28. 09:36
반응형

MySQL: MySQL에서 플러시 권한이 필요한 경우

새 테이블과 함께 사용할 사용자를 생성할 때 보통 다음 명령어를 호출합니다.

CREATE DATABASE mydb;
GRANT ALL PRIVILEGES ON mydb.* TO myuser@localhost IDENTIFIED BY "mypassword";

저는 지금까지 이 시스템을 이용할 필요가 없었습니다.FLUSH PRIVILEGES명령어를 발행한 후에 명령어를 발행합니다.사용자는 로그인하여 데이터베이스를 사용할 수 있으며 데이터베이스에 정상적으로 연결되는 PHP 스크립트를 실행할 수 있습니다.그러나 이 명령어는 제가 보는 거의 모든 튜토리얼에서 사용되고 있습니다.

는 언제입니까?FLUSH PRIVILEGES명령어는 정말 필요했고 언제 필요없습니까?

GRANT 옵션을 통해 할당된 권한은 FLUSH PRIVICEGES를 사용할 필요가 없습니다.MySQL Server는 이러한 변경을 인식하고 즉시 인가 테이블을 새로고침합니다.

MySQL 문서:

INSERT, UPDATE, DELETE 등의 스테이트먼트를 사용하여 인가 테이블을 직접 변경한 경우 서버를 재시작하거나 테이블을 새로고침하도록 지시할 때까지 변경 내용은 권한 확인에 영향을 주지 않습니다.인가 테이블을 직접 변경했지만 새로고침하지 않은 경우 서버를 재시작할 때까지 변경 내용은 적용되지 않습니다.이것은 왜 당신의 변화가 아무런 차이가 없는 것처럼 보이는지 궁금하게 만들 것이다!

서버에 인가 테이블을 새로고침하도록 지시하려면 flush-privileges 작업을 수행합니다.이를 수행하려면 FLUSH PRIVICEGES 문을 발행하거나 mysqladmin flush-privileges 또는 mysqladmin reload 명령을 실행합니다.

GRANT, REVOKE, SET PASSWORD 또는 RENAME USER 등의 계정 관리 문을 사용하여 인가 테이블을 간접적으로 수정하면 서버는 이러한 변경을 감지하고 즉시 다시 메모리에 인가 테이블을 로드합니다.

TL;DR

를 사용해 주세요.FLUSH PRIVILEGES;다음과 같은 문을 사용하여 직접 인가 테이블을 수정하는 경우에만INSERT,UPDATE, 또는DELETE.

몇 가지 예를 들어보자.예를 들어 'alex'라는 사용자의 암호를 변경했다고 가정해 보겠습니다.이 비밀번호는 여러 가지 방법으로 변경할 수 있습니다.예:

mysql> update* user set password=PASSWORD('test!23') where user='alex'; 
mysql> flush privileges;

여기서 UPDATE를 사용했습니다.인가 테이블에서 직접 INSERT, UPDATE 또는 DELETE를 사용하는 경우 인가 테이블을 새로고침하려면 FLUSH PRIVALY를 사용해야 합니다.

또는 다음과 같이 비밀번호를 변경할 수 있습니다.

mysql> set password for 'alex'@'localhost'= password('test!24');

여기서는 "FLUSH PRIVICEZES"를 사용할 필요가 없습니다.GRANT, REVOKE, SET PASSWORD 또는 RENAME USER 등의 계정 관리문을 사용하여 간접적으로 인가 테이블을 수정하면 서버는 이러한 변경을 인식하고 즉시 다시 메모리에 로드합니다.

다른 모든 좋은 답변과 더불어 2가지 포인트:

1:

그랜트 테이블이란?

dev.mysql.com 에서

MySQL 시스템 데이터베이스에는 사용자 계정 및 해당 계정이 보유한 권한에 대한 정보가 들어 있는 여러 개의 허가 테이블이 포함되어 있습니다.

claricationcation: MySQL에는 내장된 데이터베이스가 몇 개 있습니다.그 중 하나는 "mysql"이며, "mysql" 데이터베이스의 모든 테이블은 "grant table"이라고 불립니다.

2:

다음 작업을 수행할 경우 주의해 주세요.

UPDATE a_grant_table SET password=PASSWORD('1234') WHERE test_col = 'test_val';

phpMyAdmin을 리프레시하면 해당 테이블에서 비밀번호가 변경되었음을 알 수 있습니다.다만, 다음의 조작을 실행해도, 이 테이블에서 패스워드가 변경되고 있는 것을 알 수 있습니다.

mysql -u someuser -p

다음 작업을 수행할 때까지 새 비밀번호에 의해 액세스가 거부됩니다.

FLUSH PRIVILEGES;

언급URL : https://stackoverflow.com/questions/36463966/mysql-when-is-flush-privileges-in-mysql-really-needed

반응형