development

MySQL 사용자에게 호스트 액세스 권한 재 할당

big-blog 2020. 12. 27. 20:41
반응형

MySQL 사용자에게 호스트 액세스 권한 재 할당


수천 명의 MySQL 사용자가 모두 특정 호스트에서 액세스 할 수 있도록 설정했습니다. 문제는 이제 각 데이터베이스에 액세스하기 위해 동일한 계정을 사용해야하는 두 대의 컴퓨터 (향후에 더 많이)를 갖게 될 것이라는 것입니다.

내부 네트워크 와일드 카드에 맞게 각 사용자 계정의 호스트 부분을 실행하고 수정하는 빠르고 쉬운 (가능한 한 자동화 된) 방법을 원합니다. 예를 들면 :

'bugsy'@ 'internalfoo'는 'bugsy'DB에 액세스 할 수 있습니다.

이제 내부 네트워크의 어느 곳에서나 버그가있는 액세스를 허용하고 싶습니다.

'bugsy'@'10.0.0.%'는 'bugsy'DB에 접근 할 수 있습니다.


참고로 솔루션은 다음과 같습니다.

UPDATE mysql.user SET host = '10.0.0.%' WHERE host = 'internalfoo' AND user != 'root';
UPDATE mysql.db SET host = '10.0.0.%' WHERE host = 'internalfoo' AND user != 'root';
FLUSH PRIVILEGES;

수락 된 대답은 사용자 이름 만 변경했지만 권한은 남겨졌습니다.

다음을 사용하는 것이 좋습니다.

RENAME USER 'foo'@'1.2.3.4' TO 'foo'@'1.2.3.5';

MySQL 문서 에 따르면 :

RENAME USER는 이전 사용자가 보유한 권한을 새 사용자가 보유한 권한으로 만듭니다.


더 일반적인 대답은

UPDATE mysql.user SET host = {newhost} WHERE user = {youruser}

나는 이것을 할 필요가 없었습니다. 그래서 이것을 소금 한 알과 "테스트, 테스트, 테스트"의 큰 도움으로 가져 가십시오.

당신은 무엇 직접 수정 (안전 관리 테스트 환경에서)하면 어떻게 Host에 열을 mysql.user아마 mysql.db테이블? (예 : update성명서 포함) MySQL이 암호 인코딩의 일부로 사용자의 호스트를 사용한다고 생각하지 않지만 ( PASSWORD함수에서 권장하지 않음) 확실하게 확인하려면 시도해야합니다. FLUSH PRIVILEGES명령을 실행 해야 할 수도 있습니다 (또는 서버를 중지했다가 다시 시작).

일부 스토리지 엔진 (예 : MyISAM)의 경우 .frm사용자가 생성 한 뷰 파일 을 확인 / 수정해야 할 수도 있습니다 . .frm파일은 정의 자의 호스트를 포함하여, 정의 자를 저장합니다. (나는 기록 할 잘못된 호스트를 일으키는 잘못이 있었던 곳 ... 호스트 사이에서 데이터베이스를 이동할 때,이 작업을 수행했다)


권한을 얻는 유사한 문제가 실패했습니다. 내 설정에서 나는 SSH 만합니다. 그래서 제가이 문제를 해결하기 위해 한 것은

sudo MySQL
SELECT User, Host FROM mysql.user WHERE Host <> '%';
MariaDB [(none)]> SELECT User, Host FROM mysql.user WHERE Host <> '%';
+-------+-------------+
| User  | Host        |
+-------+-------------+
| root  | 169.254.0.% |
| foo   | 192.168.0.% |
| bar   | 192.168.0.% |
+-------+-------------+
4 rows in set (0.00 sec)

이 사용자가 'localhost'로 이동해야합니다. 그래서 다음을 발행했습니다.

UPDATE mysql.user SET host = 'localhost' WHERE user = 'foo';
UPDATE mysql.user SET host = 'localhost' WHERE user = 'bar';

SELECT User, Host FROM mysql.user WHERE Host <> '%'를 실행합니다. 다시 우리는 다음을 봅니다.

MariaDB [(none)]> SELECT User, Host FROM mysql.user WHERE Host <> '%';
+-------+-------------+
| User  | Host        |
+-------+-------------+
| root  | 169.254.0.% |
| foo   | localhost   |
| bar   | localhost   |
+-------+-------------+
4 rows in set (0.00 sec)

그리고 다시 정상적으로 일할 수있었습니다. 누군가에게 도움이되기를 바랍니다.

$ mysql -u foo -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 74
Server version: 10.1.23-MariaDB-9+deb9u1 Raspbian 9.0

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

동일한 오류가 발생 RENAME USER했으며 GRANTS는 현재 허용되는 솔루션에 포함되지 않습니다.

The most reliable way seems to be to run SHOW GRANTS for the old user, find/replace what you want to change regarding the user's name and/or host and run them and then finally DROP USER the old user. Not forgetting to run FLUSH PRIVILEGES (best to run this after adding the new users' grants, test the new user, then drop the old user and flush again for good measure).

    > SHOW GRANTS FOR 'olduser'@'oldhost';
    +-----------------------------------------------------------------------------------+
    | Grants for olduser@oldhost                                                        |
    +-----------------------------------------------------------------------------------+
    | GRANT USAGE ON *.* TO 'olduser'@'oldhost' IDENTIFIED BY PASSWORD '*PASSHASH'      |
    | GRANT SELECT ON `db`.* TO 'olduser'@'oldhost'                                     |
    +-----------------------------------------------------------------------------------+
    2 rows in set (0.000 sec)

    > GRANT USAGE ON *.* TO 'newuser'@'newhost' IDENTIFIED BY PASSWORD '*SAME_PASSHASH';
    Query OK, 0 rows affected (0.006 sec)

    > GRANT SELECT ON `db`.* TO 'newuser'@'newhost';
    Query OK, 0 rows affected (0.007 sec)

    > DROP USER 'olduser'@'oldhost';
    Query OK, 0 rows affected (0.016 sec)

ReferenceURL : https://stackoverflow.com/questions/1913984/re-assign-host-access-permission-to-mysql-user

반응형