Loading...
MySQL 9.5 Reference Manual 9.5의 25.6.13 Privilege Synchronization and NDB_STORED_USER의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
Privilege synchronization은 SQL 노드 간에 사용자, 역할, 권한을 공유하고 동기화하기 위해 NDB Cluster에서 사용되는 메커니즘입니다. 이는 NDB_STORED_USER 권한을 부여함으로써 활성화할 수 있습니다. 사용 방법에 대해서는 해당 권한에 대한 설명을 참조하십시오.
NDB_STORED_USER는 다른 권한과 마찬가지로 SHOW GRANTS의 출력에 다음과 같이 표시됩니다:
1mysql> SHOW GRANTS for 'jon'@'localhost'; 2+---------------------------------------------------+ 3| Grants for jon@localhost | 4+---------------------------------------------------+ 5| GRANT USAGE ON *.* TO `jon`@`localhost` | 6| GRANT NDB_STORED_USER ON *.* TO `jon`@`localhost` | 7+---------------------------------------------------+
또한 NDB Cluster에서 제공하는 ndb_select_all 유틸리티를 사용하여 이 계정의 권한이 공유되고 있는지 확인할 수 있습니다. 예시는 다음과 같습니다(형식을 보존하기 위해 일부 출력이 줄바꿈되어 있습니다):
1$> ndb_select_all -d mysql ndb_sql_metadata | grep '`jon`@`localhost`' 212 "'jon'@'localhost'" 0 [NULL] "GRANT USAGE ON *.* TO `jon`@`localhost`" 311 "'jon'@'localhost'" 0 2 "CREATE USER `jon`@`localhost` 4IDENTIFIED WITH 'caching_sha2_password' AS 50x2441243030352466014340225A107D590E6E653B5D587922306102716D752E6656772F3038512F 66C5072776D30376D37347A384B557A4C564F70495158656A31382E45324E33 7REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT 8PASSWORD REUSE INTERVAL DEFAULT PASSWORD REQUIRE CURRENT DEFAULT" 912 "'jon'@'localhost'" 1 [NULL] "GRANT NDB_STORED_USER ON *.* TO `jon`@`localhost`"
ndb_sql_metadata는 NDB 테이블이며, mysql 또는 다른 MySQL 클라이언트를 사용해서는 보이지 않는 특수 테이블입니다.
NDB_STORED_USER 권한을 부여하는
GRANT NDB_STORED_USER ON *.* TO 'cluster_app_user'@'localhost'와 같은 문장은
NDB에 SHOW CREATE USER cluster_app_user@localhost 및
SHOW GRANTS FOR cluster_app_user@localhost 쿼리를 사용하여 스냅샷을 생성하도록 지시하고,
그 결과를 ndb_sql_metadata에 저장하는 방식으로 동작합니다.
그다음 다른 SQL 노드들에게 이 스냅샷을 읽고 적용하도록 요청됩니다. 어떤 MySQL 서버든 SQL 노드로서 클러스터에 시작하여 참여할 때, 클러스터 스키마 동기화 과정의 일부로서 이 저장된 CREATE USER 및 GRANT 문장들을 실행합니다.
SQL 문장이 그것이 기원한 노드가 아닌 다른 SQL 노드에서 실행될 때마다, 해당 문장은 NDBCLUSTER 스토리지 엔진의 유틸리티 스레드에서 실행됩니다. 이는 MySQL 복제 레플리카 적용 스레드와 동등한 보안 환경 내에서 수행됩니다.
사용자 권한에 대한 변경을 수행하는 SQL 노드는, 이를 수행하기 전에 글로벌 잠금을 획득하여, 서로 다른 SQL 노드에서 동시 ACL 작업이 발생함으로써 생길 수 있는 데드락을 방지합니다.
공유 스키마 변경 작업은 동기적으로 수행되므로, 어떤 공유 사용자 또는 사용자들에 대한 변경 이후에 수행되는 다음 공유 스키마 변경이 동기화 지점으로 동작한다는 점에 유의해야 합니다. 어떤 보류 중인 사용자 변경이든 스키마 변경 배포가 시작되기 전에 완료되며, 그 이후에 스키마 변경 자체가 동기적으로 실행됩니다.
예를 들어, 분산된 사용자에 대한 DROP USER에 이어 DROP DATABASE 문장이 오는 경우, 데이터베이스 드롭은 해당 사용자 드롭이 모든 SQL 노드에서 완료될 때까지 수행될 수 없습니다.
여러 SQL 노드에서 발생한 여러 GRANT, REVOKE 또는 기타 사용자 관리 문장으로 인해 특정 사용자에 대한 권한이 서로 다른 SQL 노드에서 달라지는 경우, 권한이 올바른 것으로 알려진 SQL 노드에서 이 사용자에 대해 GRANT NDB_STORED_USER를 실행하여 이 문제를 해결할 수 있습니다. 이렇게 하면 권한의 새로운 스냅샷이 생성되어 다른 SQL 노드로 동기화됩니다.
참고
NDB Cluster 9.5는, 이전 릴리스(NDB 7.6 및 그 이전 버전—Distributed Privileges Using Shared Grant Tables 참조)에서 했던 것처럼, MySQL 권한 테이블을 NDB 스토리지 엔진을 사용하도록 변경하는 방식으로 NDB Cluster 내 SQL 노드들 사이에서 MySQL 사용자와 권한을 분산하는 기능을 지원하지 않습니다.
25.6.12 Online Operations with ALTER TABLE in NDB Cluster
25.6.14 NDB API Statistics Counters and Variables