This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-website.git


The following commit(s) were added to refs/heads/master by this push:
     new 84f382d8206 [i18n](ko) Translate 5 documentation pages (T09 
20261018T212255Z-002) (#4366)
84f382d8206 is described below

commit 84f382d820669d8811a29dd2ae820d45c596e987
Author: Mingyu Chen (Rayner) <[email protected]>
AuthorDate: Sun Oct 18 23:02:02 2026 +0100

    [i18n](ko) Translate 5 documentation pages (T09 20261018T212255Z-002) 
(#4366)
    
    Translate 5 English documentation pages into Korean with local Codex.
    
    Source: `54237d9b6ae5f6f2bed49f0a660cd3d61b4b95ce`. Model:
    `gpt-6.1-sol`; reasoning effort: `xhigh`.
    These are machine translations requiring Korean proofreading. Each
    document has its own state shard.
    
    | Source | Attempts | Result |
    | --- | ---: | --- |
    | `docs/admin-manual/audit-plugin.md` | 3 | Local gates passed |
    | `docs/admin-manual/auth/authentication-and-authorization.md` | 3 |
    Retained with warnings |
    | `docs/admin-manual/auth/authentication/internal.md` | 3 | Local gates
    passed |
    | `docs/admin-manual/auth/authentication/ldap.md` | 3 | Retained with
    warnings |
    | `docs/admin-manual/auth/authorization/custom.md` | 3 | Local gates
    passed |
    
    Validation:
    
    - configuration: passed
    - move-check: passed
    - changed-links: passed
    - preflight-ja: passed
    - preflight-ko: passed
    - tests-00: passed
    - tests-01: passed
    - tests-02: passed
    - tests-03: passed
    - tests-04: passed
    - tests-05: passed
    - tests-06: passed
    - tests-07: passed
    - tests-08: passed
    - tests-09: passed
    - tests-10: passed
    - tests-11: passed
    - tests-12: passed
    - tests-13: passed
    - tests-14: passed
    - tests-15: passed
    - tests-16: passed
    - tests-17: passed
    - tests-18: passed
    - tests-19: passed
    - tests-20: passed
    - tests-21: passed
    - key-features: passed
    - build: passed
    - static-ko: passed
    - links-report: passed (CI report-only)
    - governance-report: passed (CI report-only)
    
    Worker checks reuse the CI translation state, Markdown/MDX syntax and
    internal-link gates.
    Failures are fed into the next translation prompt, with at most three
    total model attempts per page.
    The third translation is retained when local checks still fail, as
    requested; this does not waive GitHub CI.
    
    Retained warnings:
    
    - `docs/admin-manual/auth/authentication-and-authorization.md` /
    protected-content: Restore protected source content: protected node 94:
    expected ["inlineCode",null,null,"priv1"]; received
    ["inlineCode",null,null,"role1"] protected node 95: expected
    ["inlineCode",null,null,"role1"]; received
    ["inlineCode",null,null,"priv1"] protected node 96: expected
    ["inlineCode",null,null,"priv1"]; received
    ["inlineCode",null,null,"role3"]
    - `docs/admin-manual/auth/authentication/ldap.md` / protected-content:
    Restore protected source content: protected node 152: expected
    ["code","text",null,"dn: cn=doris_rd,ou=group,dc=domain,dc=com
    \nobjectClass: groupOfNames \nmember: uid=jack,ou=aidp,dc=domain,dc=com
    "]; received ["code","text",null,"dn:
    cn=doris_rd,ou=group,dc=domain,dc=com\nobjectClass:
    groupOfNames\nmember: uid=jack,ou=aidp,dc=domain,dc=com"] protected node
    167: expected ["inlineCode",null,null,"group"]; received
    ["inlineCode",null,null,"user"] protected node 168: expected
    ["inlineCode",null,null,"user"]; received
    ["inlineCode",null,null,"group"]
    
    Remaining blocking local checks: none.
    
    This batch is independent of other translation PRs. The runner continues
    without waiting for merge.
    
    <!-- korean-local-t09 source=54237d9b6ae5f6f2bed49f0a660cd3d61b4b95ce
    -->
    
    Co-authored-by: morningman <[email protected]>
---
 .../current/admin-manual/audit-plugin.md           |  89 ++++
 .../auth/authentication-and-authorization.md       | 392 +++++++++++++++
 .../admin-manual/auth/authentication/internal.md   | 223 +++++++++
 .../admin-manual/auth/authentication/ldap.md       | 534 +++++++++++++++++++++
 .../admin-manual/auth/authorization/custom.md      | 106 ++++
 .../default/current/admin-manual/audit-plugin.json |  62 +++
 .../auth/authentication-and-authorization.json     |  72 +++
 .../admin-manual/auth/authentication/internal.json |  62 +++
 .../admin-manual/auth/authentication/ldap.json     |  72 +++
 .../admin-manual/auth/authorization/custom.json    |  62 +++
 10 files changed, 1674 insertions(+)

diff --git 
a/i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/audit-plugin.md 
b/i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/audit-plugin.md
new file mode 100644
index 00000000000..59338421cf2
--- /dev/null
+++ 
b/i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/audit-plugin.md
@@ -0,0 +1,89 @@
+---
+{
+    "title": "감사 로그",
+    "language": "ko",
+    "description": "Doris는 데이터베이스 작업에 대한 감사 기능을 제공하여 사용자 로그인, 쿼리 등을 기록할 수 
있습니다."
+}
+---
+
+Doris는 데이터베이스 작업에 대한 감사 기능을 제공하여 사용자 로그인, 쿼리 및 데이터베이스 수정 작업을 기록할 수 있습니다. 
Doris에서는 내장 시스템 테이블을 통해 감사 로그를 직접 쿼리하거나 Doris의 감사 로그 파일을 열어 볼 수 있습니다.
+
+## 감사 로그 활성화 {#enabling-audit-logs}
+
+Doris에는 2.1.0 버전부터 감사 로그 플러그인이 내장되어 있어 별도로 설치할 필요가 없습니다. 전역 변수 
`enable_audit_plugin`은 감사 로그를 `__internal_schema.audit_log`에 기록할지 여부를 제어합니다. 
기본값은 Doris 버전에 따라 다릅니다.
+
+| Doris 버전 | `enable_audit_plugin`의 기본값 |
+| --- | --- |
+| 2.1.x, 3.0.x, 3.1.0 및 3.1.1 | `false` (비활성화) |
+| 3.1.2 및 이후 3.1.x 릴리스 | `true` (활성화) |
+| 4.0.0 및 이후 릴리스 | `true` (활성화) |
+
+감사 로그 플러그인은 3.1.2 및 이후 3.1.x 릴리스에서 기본적으로 활성화됩니다. 4.0.0 및 이후 릴리스에서도 기본적으로 
활성화됩니다. 이 버전들에서는 `enable_audit_plugin`의 기본값이 `true`입니다.
+
+클러스터의 현재 값을 확인합니다.
+
+```sql
+SHOW GLOBAL VARIABLES LIKE 'enable_audit_plugin';
+```
+
+값이 `false`이면 언제든지 다음과 같이 활성화할 수 있습니다.
+
+```sql
+SET GLOBAL enable_audit_plugin = true;
+```
+
+활성화하면 Doris는 이후에 생성되는 감사 로그를 `__internal_schema.audit_log`에 기록합니다.
+
+감사 로그 테이블에 대한 기록을 비활성화하려면 다음을 실행합니다.
+
+```sql
+SET GLOBAL enable_audit_plugin = false;
+```
+
+플러그인을 비활성화하면 `__internal_schema.audit_log`에 대한 새로운 기록은 중단되며 기존 레코드는 유지됩니다. 이 
변수는 아래에서 설명하는 `fe.audit.log` 파일을 제어하지 않습니다.
+
+## 감사 로그 테이블 조회 {#viewing-the-audit-log-table}
+
+:::caution 참고
+
+2.1.8 이전 버전에서는 시스템 버전이 업그레이드되면서 감사 로그 테이블의 필드가 늘어날 수 있습니다. 업그레이드 후에는 감사 로그 
테이블의 필드에 맞춰 `audit_log` 테이블에 `ALTER TABLE` 명령으로 필드를 추가해야 합니다.
+
+:::
+
+Doris 2.1 버전부터 감사 로그 기능을 활성화하면 Doris는 사용자 작업을 
[`audit_log`](../admin-manual/system-tables/internal_schema/audit_log) 테이블에 기록할 
수 있습니다. 이 테이블은 `__internal_schema` 데이터베이스에 있습니다.
+
+감사 로그 테이블은 기본적으로 일 단위로 파티션이 생성되는 동적 파티션 테이블이며, 최근 30일간의 데이터를 보관합니다. 
`dynamic_partition.start` 속성을 `ALTER TABLE` 문으로 수정하여 동적 파티션의 보관 기간을 조정할 수 있습니다.
+
+## 감사 로그 파일 {#audit-log-files}
+
+`fe.conf`의 `LOG_DIR` 설정은 FE 로그의 저장 경로를 지정합니다. 이 FE 노드에서 실행한 모든 데이터베이스 작업은 
`${LOG_DIR}/fe.audit.log`에 기록됩니다. 클러스터의 모든 작업을 확인하려면 각 FE 노드의 감사 로그를 모두 살펴봐야 
합니다.
+
+## 감사 로그 형식 {#audit-log-format}
+
+3.0.7 이전 버전에서는 문에 포함된 `\n`, `\t`, `\r` 기호를 `\\n`, `\\t`, `\\r`로 대체했습니다. 이렇게 
수정된 문은 `fe.audit.log` 파일과 `audit_log` 테이블에 저장되었습니다.
+
+3.0.7 버전부터는 `fe.audit.log` 파일에 기록할 때 문에 포함된 `\n`만 `\\n`으로 대체합니다. `audit_log` 
테이블에는 문을 원래 형식 그대로 저장합니다.
+
+## 감사 로그 설정 {#audit-log-configuration}
+
+**전역 변수:**
+
+감사 로그 변수는 `set [global] <var_name> = <var_value>`로 수정할 수 있습니다.
+
+| 변수                               | 기본값 | 설명                                  
   |
+| -------------------------------------- | ------------- | 
----------------------------------------------- |
+| `audit_plugin_max_batch_interval_sec`  | 60초    | 감사 로그 테이블에 기록하는 최대 시간 
간격입니다. |
+| `audit_plugin_max_batch_bytes`         | 50MB          | 감사 로그 테이블에 배치당 기록할 
수 있는 최대 데이터 크기입니다. |
+| `audit_plugin_max_sql_length`          | 4096          | 감사 로그 테이블에 기록되는 SQL 
문의 최대 길이입니다. |
+| `audit_plugin_load_timeout`            | 600초   | 감사 로그 데이터 적재 작업의 기본 제한 
시간입니다.      |
+| `audit_plugin_max_insert_stmt_length` | Int.MAX | `INSERT` 문의 최대 길이 제한입니다. 
`audit_plugin_max_sql_length`보다 크면 `audit_plugin_max_sql_length` 값을 사용합니다. 이 
매개변수는 3.0.6부터 지원됩니다. |
+
+일부 `INSERT INTO VALUES` 문은 길이가 매우 길고 자주 제출되어 감사 로그의 크기가 지나치게 커질 수 있습니다. 이를 
방지하기 위해 Doris는 3.0.6 버전에서 `audit_plugin_max_insert_stmt_length`를 추가하여 `INSERT` 
문의 감사 로그 기록 길이를 별도로 제한할 수 있도록 했습니다. 이렇게 하면 감사 로그가 과도하게 커지는 것을 방지하고 SQL 문을 빠짐없이 
감사할 수 있습니다.
+
+**FE 설정 항목:**
+
+FE 설정 항목은 `fe.conf` 디렉터리를 편집하여 수정할 수 있습니다.
+
+| 설정 항목         | 설명                                                           
                                                                                
                      |
+| -------------------------- | 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 |
+| `skip_audit_user_list`     | 특정 사용자의 작업이 감사 로그에 기록되지 않도록 하려면 이 설정을 수정하면 
됩니다(3.0.01 버전부터 지원). 예를 들어 다음과 같이 설정하면 `user1`과 `user2`를 감사 로그 기록 대상에서 제외할 수 
있습니다: `skip_audit_user_list=user1,user2`|
diff --git 
a/i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authentication-and-authorization.md
 
b/i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authentication-and-authorization.md
new file mode 100644
index 00000000000..b45fc0f1b7e
--- /dev/null
+++ 
b/i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authentication-and-authorization.md
@@ -0,0 +1,392 @@
+---
+{
+    "title": "인증 및 권한 부여",
+    "language": "ko",
+    "description": "Doris 권한 관리 시스템은 MySQL 권한 관리 메커니즘을 기반으로 설계되었습니다."
+}
+---
+
+Doris 권한 관리 시스템은 MySQL 권한 관리 메커니즘을 기반으로 설계되었습니다. 행과 열 수준의 세분화된 권한 제어, 역할 기반 
액세스 제어, 허용 목록 메커니즘을 지원합니다.
+
+## 용어 설명 {#glossary}
+
+1. 사용자 식별자(User Identity)
+
+   권한 시스템에서 사용자는 사용자 식별자로 식별됩니다. 사용자 식별자는 `username`과 `host`의 두 부분으로 구성됩니다. 
`username`은 영문 대소문자로 구성된 사용자 이름입니다. `host`는 사용자가 접속하는 IP를 나타냅니다. 사용자 식별자는 
`username@'host'`로 표시하며, `username` 사용자가 `host`에서 접속했음을 나타냅니다.
+
+   사용자 식별자는 `username@['domain']`으로도 표시할 수 있습니다. 여기서 `domain`은 DNS를 통해 여러 IP로 
해석할 수 있는 도메인 이름을 의미합니다. 이는 최종적으로 `username@'host'`의 집합으로 표현되므로, 이후에는 이를 모두 
`username@'host'`로 표기합니다.
+
+2. 권한
+
+   권한은 노드, 데이터 디렉터리, 데이터베이스 또는 테이블에 적용됩니다. 각 권한은 서로 다른 작업을 수행할 수 있는 권한을 나타냅니다.
+
+3. 역할
+
+   Doris에서는 원하는 이름으로 역할을 생성할 수 있습니다. 역할은 권한의 집합으로 볼 수 있습니다. 새로 생성한 사용자에게 역할을 
할당하면 해당 역할의 권한을 자동으로 상속받습니다. 이후 역할의 권한을 변경하면 해당 역할에 연결된 모든 사용자의 권한에도 반영됩니다.
+
+4. 사용자 속성
+
+   사용자 속성은 사용자 식별자가 아닌 사용자에게 직접 연결됩니다. 즉, `user@'192.%'`와 `user@['domain']`은 
동일한 사용자 속성을 공유합니다. 이 속성은 사용자 `user`에 속하며, `user@'192.%'`나 `user@['domain']`에 
속하지 않습니다.
+
+   사용자 속성에는 최대 사용자 연결 수, 데이터 적재 클러스터 설정 등이 포함됩니다.
+
+## 인증 및 권한 부여 프레임워크 {#authentication-and-authorization-framework}
+
+사용자가 Apache Doris에 로그인하는 과정은 **인증**과 **권한 부여**의 두 부분으로 나뉩니다.
+
+- 인증: 사용자가 제공한 자격 증명(사용자 이름, 클라이언트 IP, 비밀번호 등)을 바탕으로 신원을 확인합니다. 확인이 완료되면 해당 
사용자를 시스템에 정의된 사용자 식별자에 매핑합니다.
+- 권한 부여: 인증으로 확인된 사용자 식별자에 연결된 권한을 기준으로, 사용자가 수행하려는 작업에 필요한 권한을 보유하고 있는지 확인합니다.
+
+## 인증 {#authentication}
+
+Doris는 기본 제공 인증 방식과 LDAP 인증을 지원합니다.
+
+### Doris 기본 제공 인증 방식 {#doris-built-in-authentication-scheme}
+
+Doris 내부에 저장된 사용자 이름, 비밀번호 등의 정보를 기반으로 인증합니다.
+
+관리자는 `CREATE USER` 명령으로 사용자를 생성하고, `SHOW ALL GRANTS` 명령으로 모든 사용자의 권한과 역할을 확인할 
수 있습니다.
+
+사용자가 로그인하면 시스템은 사용자 이름, 비밀번호, 클라이언트 IP 주소가 올바른지 확인합니다.
+
+#### 비밀번호 정책 {#password-policy}
+
+Doris는 사용자가 비밀번호를 더 효과적으로 관리할 수 있도록 다음 비밀번호 정책을 지원합니다.
+
+1. `PASSWORD_HISTORY`
+
+    현재 비밀번호를 재설정할 때 이전에 사용한 비밀번호를 다시 사용할 수 있는지 결정합니다. 예를 들어, `PASSWORD_HISTORY 
10`은 최근 10개의 비밀번호를 새 비밀번호로 재사용할 수 없음을 의미합니다. `PASSWORD_HISTORY DEFAULT`로 설정하면 
전역 변수 `PASSWORD_HISTORY`의 값을 사용합니다. 0으로 설정하면 이 기능을 비활성화합니다. 기본값은 0입니다.
+
+    예시:
+
+    - 전역 변수 설정: `SET GLOBAL password_history = 10`
+    - 사용자별 설정: `ALTER USER user1@'ip' PASSWORD_HISTORY 10`
+
+2. `PASSWORD_EXPIRE`
+
+    현재 사용자의 비밀번호 만료 기간을 설정합니다. 예를 들어, `PASSWORD_EXPIRE INTERVAL 10 DAY`는 비밀번호가 
10일 후에 만료됨을 의미합니다. `PASSWORD_EXPIRE NEVER`는 비밀번호가 만료되지 않음을 나타냅니다. 
`PASSWORD_EXPIRE DEFAULT`로 설정하면 전역 변수 `default_password_lifetime`의 값(일 단위)을 
사용합니다. 기본값은 NEVER(또는 0)이며, 비밀번호가 만료되지 않습니다.
+
+    예시:
+
+    - 전역 변수 설정: `SET GLOBAL default_password_lifetime = 1`
+    - 사용자별 설정: `ALTER USER user1@'ip' PASSWORD_EXPIRE INTERVAL 10 DAY`
+
+3. `FAILED_LOGIN_ATTEMPTS`와 `PASSWORD_LOCK_TIME`
+
+    비밀번호 입력 오류로 계정을 잠그기까지 허용할 시도 횟수와 잠금 기간을 설정합니다. 예를 들어, 
`FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1 DAY`는 로그인에 3회 실패하면 계정을 하루 동안 잠근다는 
의미입니다. 관리자는 `ALTER USER` 문으로 계정의 잠금을 해제할 수 있습니다.
+
+    예시:
+
+    - 사용자별 설정: `ALTER USER user1@'ip' FAILED_LOGIN_ATTEMPTS 3 
PASSWORD_LOCK_TIME 1 DAY`
+
+4. 비밀번호 강도
+
+    전역 변수 `validate_password_policy`로 제어합니다. 기본값은 `NONE/0`이며, 비밀번호 강도를 검사하지 
않습니다. `STRONG/2`로 설정하면 비밀번호에 영문 대문자, 영문 소문자, 숫자, 특수 문자 중 최소 세 가지 유형이 포함되어야 하며, 
길이가 8자 이상이어야 합니다.
+
+    예시:
+
+    - `SET validate_password_policy=STRONG`
+
+    Doris 4.0.4부터 비밀번호 강도 검증 정책이 다음과 같이 강화되었습니다.
+
+    1. `validate_password_policy`가 `STRONG/2`로 설정된 경우 비밀번호에 **4가지 문자 유형을 모두 
포함**해야 합니다(영문 대문자, 영문 소문자, 숫자, 특수 문자). 기존에는 "3가지 이상 포함(총 4가지 중)"이 요구 사항이었습니다.
+
+    2. **사전 단어 검사**가 추가되었습니다. 비밀번호에는 password, admin, test, root 등 보안에 취약한 
일반적인 단어를 포함할 수 없습니다. 시스템에는 이러한 단어를 모은 사전이 내장되어 있으며, 이 단어가 포함된 비밀번호는 거부됩니다.
+
+    3. **사용자 지정 사전 파일**을 지원합니다. 전역 변수 `validate_password_dictionary_file`로 사용자 
지정 사전 파일 이름을 지정할 수 있습니다. 사전 파일은 `${DORIS_HOME}/plugins/security/` 디렉터리에 있어야 
합니다. 파일에는 한 줄에 단어 하나씩 작성하며, 빈 줄과 `#`으로 시작하는 줄은 무시됩니다.
+
+       예시:
+       - `SET GLOBAL validate_password_dictionary_file = 'my_dictionary.txt'`
+
+자세한 내용은 [ALTER 
USER](../../sql-manual/sql-statements/account-management/ALTER-USER.md)를 참조하세요.
+
+### LDAP 기반 인증 방식 {#ldap-based-authentication-scheme}
+
+[LDAP 기반 인증 방식](./authentication/ldap.md)을 참조하세요.
+
+## 권한 부여 {#authorization}
+
+### 권한 관련 작업 {#permission-operations}
+
+- 사용자 생성: [CREATE 
USER](../../sql-manual/sql-statements/account-management/CREATE-USER)
+- 사용자 수정: [ALTER 
USER](../../sql-manual/sql-statements/account-management/ALTER-USER.md)
+- 사용자 삭제: [DROP 
USER](../../sql-manual/sql-statements/account-management/DROP-USER.md)
+- 권한 부여/역할 할당: 
[GRANT](../../sql-manual/sql-statements/account-management/GRANT-TO)
+- 권한 회수/역할 할당 해제: 
[REVOKE](../../sql-manual/sql-statements/account-management/REVOKE-FROM.md)
+- 역할 생성: [CREATE 
ROLE](../../sql-manual/sql-statements/account-management/CREATE-ROLE.md)
+- 역할 삭제: [DROP 
ROLE](../../sql-manual/sql-statements/account-management/DROP-ROLE.md)
+- 역할 수정: [ALTER 
ROLE](../../sql-manual/sql-statements/account-management/ALTER-ROLE.md)
+- 현재 사용자의 권한과 역할 조회: [SHOW 
GRANTS](../../sql-manual/sql-statements/account-management/SHOW-GRANTS.md)
+- 모든 사용자의 권한과 역할 조회: [SHOW ALL 
GRANTS](../../sql-manual/sql-statements/account-management/SHOW-GRANTS.md)
+- 생성된 역할 조회: [SHOW 
ROLES](../../sql-manual/sql-statements/account-management/SHOW-ROLES.md)
+- 사용자 속성 설정: [SET 
PROPERTY](../../sql-manual/sql-statements/account-management/SET-PROPERTY.md)
+- 사용자 속성 조회: [SHOW 
PROPERTY](../../sql-manual/sql-statements/account-management/SHOW-PROPERTY.md)
+- 비밀번호 변경: [SET 
PASSWORD](../../sql-manual/sql-statements/account-management/SET-PASSWORD.md)
+- 지원되는 모든 권한 조회: [SHOW PRIVILEGES]
+- 행 정책 조회: [SHOW ROW POLICY]
+- 행 정책 생성: [CREATE ROW POLICY]
+
+### 권한 유형 {#types-of-permissions}
+
+Doris는 현재 다음 권한을 지원합니다.
+
+1. `Node_priv`
+
+    노드 변경 권한입니다. FE, BE, BROKER 노드의 추가, 삭제, 오프라인 전환을 포함합니다.
+
+    Root 사용자는 기본적으로 이 권한을 갖습니다. `Grant_priv`와 `Node_priv`를 모두 가진 사용자는 다른 사용자에게 
이 권한을 부여할 수 있습니다.
+
+    이 권한은 Global 수준에서만 부여할 수 있습니다.
+
+2. `Grant_priv`
+
+    권한 변경 권한입니다. 권한 부여와 회수, 사용자/역할의 추가/삭제/수정 등의 작업을 수행할 수 있습니다.
+
+    2.1.2 버전 이전에는 다른 사용자/역할에 권한을 부여할 때 현재 사용자에게 해당 수준의 `Grant_priv` 권한만 있으면 
되었습니다. 2.1.2 버전 이후에는 권한을 부여하려는 리소스에 대한 권한도 필요합니다.
+
+    다른 사용자에게 역할을 할당하려면 Global 수준의 `Grant_priv` 권한이 필요합니다.
+
+3. `Select_priv`
+
+    데이터 디렉터리, 데이터베이스, 테이블에 대한 읽기 전용 권한입니다.
+
+4. `Load_priv`
+
+    데이터 디렉터리, 데이터베이스, 테이블에 대한 쓰기 권한입니다. Load, Insert, Delete 등을 포함합니다.
+
+5. `Alter_priv`
+
+    데이터 디렉터리, 데이터베이스, 테이블에 대한 변경 권한입니다. 데이터베이스/테이블 이름 변경, 열 추가/삭제/수정, 파티션 
추가/삭제 등을 포함합니다.
+
+6. `Create_priv`
+
+    데이터 디렉터리, 데이터베이스, 테이블, 뷰를 생성하는 권한입니다.
+
+7. `Drop_priv`
+
+    데이터 디렉터리, 데이터베이스, 테이블, 뷰를 삭제하는 권한입니다.
+
+8. `Usage_priv`
+
+    Resource와 Workload Group에 대한 사용 권한입니다.
+
+9. `Show_view_priv`
+
+    `SHOW CREATE VIEW`를 실행하는 권한입니다.
+
+### 권한 수준 {#permission-levels}
+
+#### 전역 권한 {#global-permissions}
+
+GRANT 문에서 `*.*.*` 범위로 부여하는 권한입니다. 모든 Catalog의 모든 테이블에 적용됩니다.
+
+#### Catalog 권한 {#catalog-permissions}
+
+GRANT 문에서 `ctl.*.*` 범위로 부여하는 권한입니다. 지정한 Catalog의 모든 테이블에 적용됩니다.
+
+#### 데이터베이스 권한 {#database-permissions}
+
+GRANT 문에서 `ctl.db.*` 범위로 부여하는 권한입니다. 지정한 데이터베이스의 모든 테이블에 적용됩니다.
+
+#### 테이블 권한 {#table-permissions}
+
+GRANT 문에서 `ctl.db.tbl` 범위로 부여하는 권한입니다. 지정한 테이블의 모든 열에 적용됩니다.
+
+#### 열 권한 {#column-permissions}
+
+열 권한은 주로 테이블의 특정 열에 대한 사용자 액세스를 제한하는 데 사용됩니다. 관리자는 열 권한을 통해 특정 열의 조회, 편집 등의 
권한을 설정하여 해당 열의 데이터에 대한 사용자 액세스와 조작을 제어할 수 있습니다.
+
+`GRANT Select_priv(col1,col2) ON ctl.db.tbl TO user1`으로 테이블의 특정 열에 대한 권한을 부여할 
수 있습니다.
+
+현재 열 권한은 `Select_priv`만 지원합니다.
+
+#### 행 수준 권한 {#row-level-permissions}
+
+행 정책을 사용하면 관리자는 데이터의 필드를 기준으로 액세스 정책을 정의하여 사용자가 액세스할 수 있는 행을 제어할 수 있습니다.
+
+구체적으로, 관리자는 행 정책을 통해 데이터에 저장된 실제 값을 기준으로 행에 대한 사용자 액세스를 필터링하거나 제한하는 규칙을 만들 수 
있습니다.
+
+1.2 버전부터 `CREATE ROW POLICY` 명령으로 행 수준 권한을 생성할 수 있습니다.
+
+2.1.2 버전부터 Apache Ranger의 `Row Level Filter`를 통한 행 수준 권한 설정을 지원합니다.
+
+#### 사용 권한 {#usage-permissions}
+
+- Resource 권한
+
+    Resource 권한은 Resource에 대해 별도로 설정하는 권한으로, 데이터베이스나 테이블에 대한 권한과는 관련이 없습니다. 
`Usage_priv`와 `Grant_priv`만 부여할 수 있습니다.
+
+    `GRANT USAGE_PRIV ON RESOURCE '%' TO user1`으로 모든 Resource에 대한 권한을 부여할 수 
있습니다.
+
+- Workload Group 권한
+
+    Workload Group 권한은 Workload Group에 대해 별도로 설정하는 권한으로, 데이터베이스나 테이블에 대한 권한과는 
관련이 없습니다. `Usage_priv`와 `Grant_priv`만 부여할 수 있습니다.
+
+    `GRANT USAGE_PRIV ON WORKLOAD GROUP '%' TO user1`으로 모든 Workload Group에 대한 
권한을 부여할 수 있습니다.
+
+### 데이터 마스킹 {#data-masking}
+
+데이터 마스킹은 원본 데이터를 수정, 대체 또는 숨겨 민감한 데이터를 보호하는 방법입니다. 마스킹된 데이터는 특정 형식과 특성을 유지하면서도 
민감한 정보는 포함하지 않습니다.
+
+예를 들어, 관리자는 신용카드 번호나 신분증 번호와 같은 민감한 필드의 숫자 일부 또는 전체를 별표 `*`나 다른 문자로 대체하거나, 실명을 
가명으로 대체할 수 있습니다.
+
+2.1.2 버전부터 Apache Ranger의 Data Masking을 통해 특정 열에 대한 데이터 마스킹 정책을 설정할 수 있으며, 현재는 
[Apache Ranger](./authorization/ranger.md)를 통해서만 설정할 수 있습니다.
+
+### Doris 기본 제공 권한 부여 방식 {#doris-built-in-authorization-scheme}
+
+Doris의 권한 설계는 RBAC(Role-Based Access Control) 모델을 기반으로 합니다. 사용자는 역할에 연결되고, 역할은 
권한에 연결됩니다. 따라서 사용자는 역할을 통해 권한에 간접적으로 연결됩니다.
+
+역할을 삭제하면 사용자는 해당 역할과 연결된 모든 권한을 자동으로 잃습니다.
+
+사용자와 역할의 연결을 해제하면 해당 사용자는 그 역할의 모든 권한을 자동으로 잃습니다.
+
+역할에 권한을 추가하거나 역할에서 권한을 제거하면 해당 역할에 연결된 사용자의 권한도 그에 따라 변경됩니다.
+
+```
+┌────────┐        ┌────────┐         ┌────────┐
+│  user1 ├────┬───►  role1 ├────┬────►  priv1 │
+└────────┘    │   └────────┘    │    └────────┘
+              │                 │
+              │                 │
+              │   ┌────────┐    │
+              │   │  role2 ├────┤
+┌────────┐    │   └────────┘    │    ┌────────┐
+│  user2 ├────┘                 │  ┌─►  priv2 │
+└────────┘                      │  │ └────────┘
+                  ┌────────┐    │  │
+           ┌──────►  role3 ├────┘  │
+           │      └────────┘       │
+           │                       │
+           │                       │
+┌────────┐ │      ┌────────┐       │ ┌────────┐
+│  userN ├─┴──────►  roleN ├───────┴─►  privN │
+└────────┘        └────────┘         └────────┘
+```
+
+위 그림에서:
+
+User1과 user2는 모두 `role1`을 통해 `priv1` 권한을 갖습니다.
+
+UserN은 `role3`을 통해 `priv1` 권한을, `roleN`을 통해 `priv2`와 `privN` 권한을 갖습니다. 따라서 
userN은 `priv1`, `priv2`, `privN` 권한을 동시에 갖습니다.
+
+사용 편의를 위해 사용자에게 직접 권한을 부여할 수도 있습니다. 내부적으로는 사용자마다 고유한 기본 역할이 생성됩니다. 사용자에게 권한을 
부여하는 것은 실제로는 해당 사용자의 기본 역할에 권한을 부여하는 것입니다.
+
+기본 역할은 삭제하거나 다른 사용자에게 할당할 수 없습니다. 사용자를 삭제하면 해당 사용자의 기본 역할도 자동으로 삭제됩니다.
+
+### Apache Ranger 기반 권한 부여 방식 {#authorization-scheme-based-on-apache-ranger}
+
+[Apache Ranger 기반 권한 부여 방식](./authorization/ranger.md)을 참조하세요.
+
+## 자주 묻는 질문 {#common-questions}
+
+### 권한 설명 {#explanation-of-permissions}
+
+1. ADMIN 권한 또는 GLOBAL 수준의 GRANT 권한을 가진 사용자는 다음 작업을 수행할 수 있습니다.
+
+    - CREATE USER
+    - DROP USER
+    - ALTER USER
+    - SHOW GRANTS
+    - CREATE ROLE
+    - DROP ROLE
+    - ALTER ROLE
+    - SHOW ROLES
+    - SHOW PROPERTY FOR USER
+
+2. GRANT/REVOKE
+
+    - ADMIN 권한을 가진 사용자는 모든 사용자에 대해 권한을 부여하거나 회수할 수 있습니다.
+    - ADMIN 권한 또는 GLOBAL 수준의 GRANT 권한을 가진 사용자는 사용자에게 역할을 할당할 수 있습니다.
+    - 해당 수준의 GRANT 권한과 부여하려는 권한을 모두 가진 사용자는 사용자/역할에 해당 권한을 부여할 수 있습니다.
+
+3. SET PASSWORD
+
+    - ADMIN 권한 또는 GLOBAL 수준의 GRANT 권한을 가진 사용자는 root 이외 사용자의 비밀번호를 설정할 수 있습니다.
+    - 일반 사용자는 자신에게 해당하는 사용자 식별자의 비밀번호를 설정할 수 있습니다. 자신의 사용자 식별자는 `SELECT 
CURRENT_USER()` 명령으로 확인할 수 있습니다.
+    - ROOT 사용자는 자신의 비밀번호를 변경할 수 있습니다.
+
+### 추가 정보 {#additional-information}
+
+1. Doris를 초기화하면 다음 사용자와 역할이 자동으로 생성됩니다.
+
+    - operator 역할: `Node_priv`와 `Admin_priv`를 가지며, Doris의 모든 권한을 갖습니다.
+    - admin 역할: `Admin_priv`를 가지며, 노드 변경을 제외한 모든 권한을 갖습니다.
+    - root@'%': 모든 노드에서 로그인할 수 있는 root 사용자이며, operator 역할을 갖습니다.
+    - admin@'%': 모든 노드에서 로그인할 수 있는 admin 사용자이며, admin 역할을 갖습니다.
+
+2. 기본으로 생성된 사용자나 역할을 삭제하거나 해당 권한을 변경하는 작업은 지원하지 않습니다.
+    - root@'%'와 admin@'%' 사용자는 삭제할 수 없습니다. 다만 root@'xxx'와 admin@'xxx' 사용자는 
생성하거나 삭제할 수 있습니다. 여기서 xxx는 %를 제외한 모든 호스트를 의미하며, Doris는 이러한 사용자를 일반 사용자로 취급합니다.
+    - root@'%'와 admin@'%'의 기본 역할을 회수할 수 없습니다.
+    - operator와 admin 역할은 삭제할 수 없습니다.
+    - operator와 admin 역할의 권한은 수정할 수 없습니다.
+
+3. operator 역할을 가진 사용자는 Root 하나뿐입니다. admin 역할을 가진 사용자는 여러 명일 수 있습니다.
+
+4. 충돌이 발생할 수 있는 일부 작업은 다음과 같습니다.
+
+    1. 도메인과 IP 충돌:
+
+        다음과 같이 사용자를 생성했다고 가정합니다.
+
+        `CREATE USER user1@['domain'];`
+
+        그리고 다음과 같이 권한을 부여합니다.
+
+        `GRANT SELECT_PRIV ON *.* TO user1@['domain']`
+
+        이 도메인은 ip1과 ip2, 두 IP로 해석됩니다.
+
+        이후 `user1@'ip1'`에 별도의 권한을 부여한다고 가정합니다.
+
+        `GRANT ALTER_PRIV ON *.* TO user1@'ip1';`
+
+        그러면 `user1@'ip1'`은 Select_priv와 Alter_priv 권한을 모두 갖게 됩니다. 이후 
`user1@['domain']`의 권한을 다시 변경하더라도 `user1@'ip1'`의 권한은 그에 따라 변경되지 않습니다.
+
+    2. IP 중복 충돌:
+
+        다음과 같이 사용자를 생성했다고 가정합니다.
+
+        ```
+        CREATE USER user1@'%' IDENTIFIED BY "12345";
+        CREATE USER user1@'192.%' IDENTIFIED BY "abcde";
+        ```
+
+        우선순위에서 `'192.%'`가 `'%'`보다 앞서므로, `192.168.1.1` 머신의 사용자 `user1`이 비밀번호 
`'12345'`로 Doris에 로그인하려고 하면 액세스가 거부됩니다.
+
+5. 비밀번호를 잊은 경우
+
+    비밀번호를 잊어 Doris에 로그인할 수 없다면 FE 설정 파일에 `skip_localhost_auth_check=true`를 
추가하고 FE를 재시작하면 됩니다. 그러면 로컬 머신에서 비밀번호 없이 root로 Doris에 로그인할 수 있습니다.
+
+    로그인한 후 `SET PASSWORD` 명령으로 비밀번호를 재설정할 수 있습니다.
+
+6. root 사용자의 비밀번호는 root 사용자 본인만 재설정할 수 있습니다.
+
+7. `Admin_priv` 권한은 GLOBAL 수준에서만 부여하거나 회수할 수 있습니다.
+
+8. `current_user()`와 `user()`
+
+    사용자는 자신의 `current_user`와 `user`를 각각 `SELECT current_user()`와 `SELECT 
user()`를 실행하여 확인할 수 있습니다. 여기서 `current_user`는 인증에 사용된 식별자를 나타내며, `user`는 현재 실제 
사용자 식별자를 나타냅니다.
+
+    예시:
+
+    `user1@'192.%'`를 생성한 뒤 사용자 `user1`이 `192.168.10.1`에서 로그인했다고 가정합니다. 이때 
`current_user`는 `user1@'192.%'`이고, `user`는 `user1@'192.168.10.1'`입니다.
+
+    모든 권한은 특정 `current_user`에 부여되며, 실제 사용자는 자신에게 해당하는 `current_user`의 모든 권한을 
갖습니다.
+
+## 모범 사례 {#best-practices}
+
+다음은 Doris 권한 시스템의 사용 사례입니다.
+
+1. 시나리오 1
+
+   Doris 클러스터의 사용자를 관리자(Admin), 개발 엔지니어(RD), 사용자(Client)로 나눕니다. 관리자는 전체 클러스터에 
대한 모든 권한을 가지며, 주로 클러스터 구축과 노드 관리를 담당합니다. 개발 엔지니어는 데이터베이스와 테이블 생성, 데이터 적재와 수정 등 
비즈니스 모델링을 담당합니다. 사용자는 여러 데이터베이스와 테이블에 액세스하여 데이터를 조회합니다.
+
+   이 시나리오에서는 관리자에게 ADMIN 또는 GRANT 권한을 부여할 수 있습니다. RD에게는 전체 또는 특정 데이터베이스와 테이블에 
대한 CREATE, DROP, ALTER, LOAD, SELECT 권한을 부여할 수 있습니다. Client에게는 전체 또는 특정 데이터베이스와 
테이블에 대한 SELECT 권한을 부여할 수 있습니다. 또한 여러 역할을 생성하여 다수의 사용자에 대한 권한 부여 과정을 간소화할 수 있습니다.
+
+2. 시나리오 2
+
+   하나의 클러스터에 여러 비즈니스가 존재할 수 있으며, 각 비즈니스는 하나 이상의 데이터 세트를 사용할 수 있습니다. 각 비즈니스는 자체 
사용자를 관리해야 합니다. 이 경우 관리자는 각 데이터베이스에 대해 DATABASE 수준의 GRANT 권한을 가진 사용자를 생성할 수 
있습니다. 이 사용자는 지정된 데이터베이스에 대해서만 다른 사용자에게 권한을 부여할 수 있습니다.
+
+3. 차단 목록
+
+   Doris 자체는 차단 목록을 지원하지 않고 허용 목록만 지원하지만, 특정 방법으로 차단 목록과 같은 효과를 낼 수 있습니다. 
`user@'192.%'`라는 사용자를 생성하여 `192.*`에서 접속하는 사용자의 로그인을 허용했다고 가정합니다. 
`192.168.10.1`에서 접속하는 사용자의 로그인을 막으려면 새 비밀번호를 지정하여 또 다른 사용자 
`cmy@'192.168.10.1'`을 생성할 수 있습니다. `192.168.10.1`은 `192.%`보다 우선순위가 높으므로, 
`192.168.10.1`에서 접속하는 사용자는 더 이상 기존 비밀번호로 로그인할 수 없습니다.
diff --git 
a/i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authentication/internal.md
 
b/i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authentication/internal.md
new file mode 100644
index 00000000000..7d2dde6d06d
--- /dev/null
+++ 
b/i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authentication/internal.md
@@ -0,0 +1,223 @@
+---
+{
+    "title": "내장 인증",
+    "language": "ko",
+    "description": "Apache Doris의 내장 인증 메커니즘에 대한 상세 가이드입니다. user_identity의 구성, 
비밀번호 정책(이력, 만료, 로그인 실패 시 잠금, 강도 검사), IP 매칭 우선순위, 화이트리스트로 블랙리스트를 구현하는 방법, 일반적인 
문제 해결 방법을 설명합니다."
+}
+---
+
+<!-- Knowledge type: Concept + Configuration parameters + Troubleshooting -->
+<!-- Applicable scenarios: User and privilege management / Login 
authentication troubleshooting / Password policy configuration -->
+
+Apache Doris는 내장 사용자 인증 메커니즘을 제공합니다. 관리자는 SQL 명령으로 사용자를 생성하고, 비밀번호를 설정하며, 접속 
출처를 제어할 수 있습니다. 이 문서에서는 Doris 사용자 식별자의 구성, 사용 가능한 비밀번호 정책, IP 매칭 우선순위, 일반적인 운영 
시나리오와 문제 해결 방법을 설명합니다.
+
+## 적용 시나리오 {#applicable-scenarios}
+
+| 시나리오 | 권장 섹션 |
+| --- | --- |
+| 계정 생성, 계정 삭제, 비밀번호 재설정 | [핵심 개념](#core-concepts), [주요 운영 
명령](#common-operational-commands) |
+| 기업 수준의 비밀번호 정책 구성(만료 / 이력 / 강도 / 잠금) | [비밀번호 정책](#password-policies) |
+| 동일한 사용자 이름이 여러 `user_identity` 값과 일치하여 로그인이 거부되는 경우 | [사용자 식별자 매칭 
우선순위](#user-identity-matching-priority) |
+| 특정 IP의 로그인 차단(블랙리스트 구현) | [화이트리스트로 블랙리스트 
구현](#simulating-a-blacklist-with-a-whitelist) |
+| root 비밀번호를 잊어버렸거나 `current_user()`와 `user()`가 일치하지 않는 경우 | [자주 묻는 질문](#faq) |
+
+## 핵심 개념 {#core-concepts}
+
+<!-- Knowledge type: Concept -->
+
+### 사용자 (user_identity) {#user-user_identity}
+
+Doris에서 `user_identity`는 사용자를 고유하게 식별하며, 다음 두 부분으로 구성됩니다:
+
+- `user_name`: 사용자 이름입니다.
+- `host`: 클라이언트가 접속하는 호스트 주소입니다. `%`를 사용한 패턴 매칭을 지원합니다.
+
+`host`를 지정하지 않으면 기본값인 `'%'`가 사용되며, 이는 사용자가 모든 호스트에서 Doris에 접속할 수 있음을 의미합니다.
+
+### 사용자 속성 {#user-properties}
+
+사용자 속성은 `user_name`에 직접 연결되며, `user_identity`에는 연결되지 않습니다. 즉, `user@'192.%'`와 
`user@['domain']`은 동일한 사용자 속성을 공유합니다. 이 속성은 사용자에게 속하며, `user@'192.%'`나 
`user@['domain']` 각각에 속하지 않습니다.
+
+사용자 속성에는 최대 사용자 연결 수, 데이터 적재 클러스터 설정 등이 포함됩니다.
+
+### 기본 제공 사용자 {#built-in-users}
+
+기본 제공 사용자는 Doris가 기본적으로 생성하며, 생성 시부터 특정 권한을 갖는 사용자입니다. root와 admin이 여기에 해당합니다. 
초기 비밀번호는 비어 있습니다. FE가 시작된 후 비밀번호 변경 명령으로 비밀번호를 변경할 수 있습니다. **기본 사용자는 삭제할 수 
없습니다.**
+
+| 사용자 | 허용되는 로그인 출처 | 기본 역할 |
+| --- | --- | --- |
+| `root@'%'` | 모든 노드 | operator |
+| `admin@'%'` | 모든 노드 | admin |
+
+### 비밀번호 {#password}
+
+비밀번호는 사용자가 로그인할 때 사용하는 인증 정보입니다. 사용자를 생성할 때 관리자가 설정하며, 사용자도 나중에 변경할 수 있습니다.
+
+## 인증 메커니즘 {#authentication-mechanism}
+
+<!-- Knowledge type: Process description -->
+
+Doris 인증은 다음 두 단계로 이루어집니다:
+
+1. **클라이언트가 인증 정보를 전송합니다.** 클라이언트는 사용자 정보(사용자 이름, 비밀번호, 데이터베이스 등)를 묶어 Doris 
서버로 전송하여 자신의 신원을 증명하고 데이터베이스 접근을 요청합니다.
+2. **서버가 신원을 확인합니다.** Doris는 인증 정보를 받으면 이를 검증합니다. 사용자 이름, 비밀번호, 클라이언트 IP가 모두 
올바르고 사용자에게 선택한 데이터베이스의 접근 권한이 있으면 인증에 성공하며, Doris는 해당 사용자를 시스템 사용자 식별자에 매핑합니다. 
그렇지 않으면 인증에 실패하고 해당 오류 메시지를 클라이언트에 반환합니다.
+
+## 비밀번호 정책 {#password-policies}
+
+<!-- Knowledge type: Configuration parameters -->
+<!-- Applicable scenarios: Enterprise security compliance / Password lifecycle 
management -->
+
+Doris는 관리자가 비밀번호 수명 주기와 보안을 관리할 수 있도록 다음 비밀번호 정책을 지원합니다.
+
+| 정책 | 목적 | 기본값 |
+| --- | --- | --- |
+| `PASSWORD_HISTORY` | 최근 N개의 비밀번호 재사용 금지 | 0 (비활성화) |
+| `PASSWORD_EXPIRE` | 비밀번호 만료 시간 설정 | NEVER (만료되지 않음) |
+| `FAILED_LOGIN_ATTEMPTS` + `PASSWORD_LOCK_TIME` | 연속 로그인 실패 시 계정 잠금 | 비활성화 |
+| `validate_password_policy` | 비밀번호 강도 검사 | NONE/0 (검사하지 않음) |
+
+### PASSWORD_HISTORY {#password_history}
+
+현재 사용자가 비밀번호를 재설정할 때 이전 비밀번호를 재사용할 수 있는지 제어합니다. 예를 들어, `PASSWORD_HISTORY 10`은 
최근 10개의 비밀번호 중 어느 것도 새 비밀번호로 사용할 수 없도록 합니다. `PASSWORD_HISTORY DEFAULT`로 설정하면 전역 
변수 `password_history`의 값을 사용합니다. 0으로 설정하면 이 기능이 비활성화되며, 기본값은 0입니다.
+
+예시:
+
+- 전역 변수 설정: `SET GLOBAL password_history = 10`
+- 사용자별 설정: `ALTER USER user1@'ip' PASSWORD_HISTORY 10`
+
+### PASSWORD_EXPIRE {#password_expire}
+
+현재 사용자의 비밀번호 만료 시간을 설정합니다. 예를 들어, `PASSWORD_EXPIRE INTERVAL 10 DAY`는 비밀번호가 10일 
후에 만료됨을 의미합니다. `PASSWORD_EXPIRE NEVER`는 비밀번호가 만료되지 않음을 의미합니다. `PASSWORD_EXPIRE 
DEFAULT`로 설정하면 전역 변수 `default_password_lifetime`의 값을 사용합니다(단위: 일). 기본값은 
NEVER(또는 0)이며, 비밀번호가 만료되지 않음을 의미합니다.
+
+예시:
+
+- 전역 변수 설정: `SET GLOBAL default_password_lifetime = 1`
+- 사용자별 설정: `ALTER USER user1@'ip' PASSWORD_EXPIRE INTERVAL 10 DAY`
+
+### FAILED_LOGIN_ATTEMPTS 및 PASSWORD_LOCK_TIME 
{#failed_login_attempts-and-password_lock_time}
+
+현재 사용자의 로그인 시도가 n회 실패하면 계정을 잠그고 잠금 기간을 설정합니다. 예를 들어, `FAILED_LOGIN_ATTEMPTS 3 
PASSWORD_LOCK_TIME 1 DAY`는 로그인 시도가 3회 실패하면 계정을 하루 동안 잠근다는 의미입니다. 관리자는 ALTER 
USER 문으로 잠긴 계정의 잠금을 수동으로 해제할 수 있습니다.
+
+예시:
+
+- 사용자별 설정: `ALTER USER user1@'ip' FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1 
DAY`
+
+### 비밀번호 강도 {#password-strength}
+
+이 기능은 전역 변수 `validate_password_policy`로 제어합니다. 기본값은 NONE/0이며, 비밀번호 강도를 검사하지 
않음을 의미합니다. STRONG/2로 설정하면 비밀번호에 최소 3가지 문자 유형이 포함되어야 합니다. 문자 유형은 대문자, 소문자, 숫자, 
특수 문자의 4가지이며, 비밀번호 길이는 최소 8자여야 합니다.
+
+예시:
+
+- `SET validate_password_policy = STRONG`
+
+### 비밀번호 정책 확인 {#viewing-password-policies}
+
+위 정책을 설정한 후 다음 명령으로 확인할 수 있습니다:
+
+```sql
+SHOW PROC "/auth/'<user>'@'<host>'";
+```
+
+사용자와 호스트 부분은 각각 작은따옴표로 감싸야 합니다. 예를 들면 다음과 같습니다:
+
+```sql
+SHOW PROC "/auth/'root'@'%'";
+SHOW PROC "/auth/'user1'@'127.0.0.1'";
+```
+
+## 사용자 식별자 매칭 우선순위 {#user-identity-matching-priority}
+
+<!-- Knowledge type: Rule description -->
+<!-- Applicable scenarios: Login rejection troubleshooting / Conflicts between 
multiple user_identity values -->
+
+`user_identity`는 `user_name`과 `host`로 구성되지만, 로그인할 때 사용자는 `user_name`만 제공합니다. 
Doris는 클라이언트 IP를 기준으로 해당하는 `host`를 찾아 로그인에 사용할 `user_identity`를 결정합니다.
+
+클라이언트 IP와 일치하는 `user_identity`가 하나뿐이면 Doris는 해당 식별자를 사용합니다. 여러 `user_identity` 
값이 일치하면 Doris는 다음 우선순위를 적용합니다:
+
+| 비교 대상 | 우선순위 |
+| --- | --- |
+| 특정 IP와 도메인 | 특정 IP가 도메인보다 우선 |
+| 특정 IP와 IP 범위 | 더 구체적인 IP 범위가 우선(예: `192.%`가 `%`보다 우선) |
+
+### 예시 1: IP가 도메인보다 우선 {#example-1-ip-takes-priority-over-domain}
+
+```sql
+CREATE USER user1@['domain1'] IDENTIFIED BY "12345";
+CREATE USER user1@'ip1' IDENTIFIED BY "abcde";
+```
+
+`domain1`이 `ip1`과 `ip2`라는 두 IP로 해석된다고 가정합니다. IP가 도메인보다 우선하므로, 사용자 `user1`이 
`ip1`에서 비밀번호 `'12345'`로 Doris에 로그인하려고 하면 로그인이 거부됩니다(올바른 비밀번호는 `'abcde'`입니다).
+
+### 예시 2: 더 구체적인 IP 범위가 우선 {#example-2-more-specific-ip-range-wins}
+
+```sql
+CREATE USER user1@'%' IDENTIFIED BY "12345";
+CREATE USER user1@'192.%' IDENTIFIED BY "abcde";
+```
+
+`'192.%'`가 `'%'`보다 우선하므로, 사용자 `user1`이 `192.168.1.1`에서 비밀번호 `'12345'`로 Doris에 
로그인하려고 하면 로그인이 거부됩니다(올바른 비밀번호는 `'abcde'`입니다).
+
+## 화이트리스트로 블랙리스트 구현 {#simulating-a-blacklist-with-a-whitelist}
+
+<!-- Knowledge type: Operational technique -->
+<!-- Applicable scenarios: Block specific IPs from logging in -->
+
+Doris는 기본적으로 화이트리스트만 지원하며 블랙리스트는 지원하지 않습니다. 하지만 [사용자 식별자 매칭 
우선순위](#user-identity-matching-priority)를 활용하여 블랙리스트처럼 동작하도록 구성할 수 있습니다.
+
+예를 들어, `user@'192.%'`라는 사용자를 생성하여 `192.*`에서 로그인할 수 있도록 했다고 가정합니다. 
`192.168.10.1`에서의 로그인을 차단하려면 다른 사용자 `cmy@'192.168.10.1'`를 생성하고 새 비밀번호를 설정합니다. 
`192.168.10.1`이 `192.%`보다 우선순위가 높으므로, `192.168.10.1`에서는 더 이상 기존 비밀번호로 로그인할 수 
없습니다.
+
+## 주요 운영 명령 {#common-operational-commands}
+
+<!-- Knowledge type: Command index -->
+
+| 작업 | 명령 |
+| --- | --- |
+| 사용자 생성 | [CREATE 
USER](../../../sql-manual/sql-statements/account-management/CREATE-USER) |
+| 사용자에게 부여된 권한 확인 | [SHOW ALL 
GRANTS](../../../sql-manual/sql-statements/account-management/SHOW-GRANTS) |
+| 사용자 수정 | [ALTER 
USER](../../../sql-manual/sql-statements/account-management/ALTER-USER) |
+| 비밀번호 변경 | [SET 
PASSWORD](../../../sql-manual/sql-statements/account-management/SET-PASSWORD) |
+| 사용자 삭제 | [DROP 
USER](../../../sql-manual/sql-statements/account-management/DROP-USER) |
+| 사용자 속성 설정 | [SET 
PROPERTY](../../../sql-manual/sql-statements/account-management/SET-PROPERTY) |
+| 사용자 속성 확인 | [SHOW 
PROPERTY](../../../sql-manual/sql-statements/account-management/SHOW-PROPERTY) |
+
+## 자주 묻는 질문 {#faq}
+
+<!-- Knowledge type: Troubleshooting -->
+<!-- Applicable scenarios: Login failures / Identity confusion / Forgotten 
passwords -->
+
+### 질문: 비밀번호를 잊어버렸을 때 어떻게 재설정하나요? {#q-how-do-i-reset-a-forgotten-password}
+
+비밀번호를 잊어버려 Doris에 로그인할 수 없다면 다음 단계에 따라 복구합니다:
+
+1. FE 설정 파일에 다음 매개변수를 추가합니다:
+
+    ```text
+    skip_localhost_auth_check = true
+    ```
+
+2. FE를 재시작합니다.
+3. FE 호스트에서 root 사용자로 비밀번호 없이 Doris에 로그인합니다.
+4. 로그인한 후 `SET PASSWORD` 명령으로 비밀번호를 재설정합니다.
+
+### 질문: 다른 사용자가 root 사용자의 비밀번호를 재설정할 수 있나요? 
{#q-can-other-users-reset-the-root-users-password}
+
+아니요. **root를 제외한 어떤 사용자도 root 사용자의 비밀번호를 재설정할 수 없습니다.**
+
+### 질문: `current_user()`와 `user()`의 차이는 무엇인가요? 
{#q-what-is-the-difference-between-current_user-and-user}
+
+`SELECT current_user()`와 `SELECT user()`를 실행하여 각각 `current_user`와 `user`를 확인할 
수 있습니다:
+
+- `current_user`: 현재 사용자가 인증을 통과한 식별자입니다(사용자를 생성할 때 사용한 `user_identity`).
+- `user`: 사용자의 현재 실제 식별자로, 실제 클라이언트 IP를 포함합니다.
+
+예를 들어, `user1@'192.%'` 사용자를 생성한 후 사용자 `user1`이 `192.168.10.1`에서 시스템에 로그인했다고 
가정합니다. 이 경우 `current_user`는 `user1@'192.%'`이고, `user`는 
`user1@'192.168.10.1'`입니다.
+
+모든 권한은 특정 `current_user`에 부여되며, 실제 사용자는 해당 `current_user`의 모든 권한을 갖습니다.
+
+### 질문: 비밀번호가 올바른데도 사용자의 로그인이 거부됩니다. 왜 그런가요? 
{#q-a-users-login-is-rejected-but-the-password-is-confirmed-to-be-correct-why}
+
+일반적으로 [사용자 식별자 매칭 우선순위](#user-identity-matching-priority) 규칙이 적용되었기 때문입니다. 
클라이언트 IP가 더 구체적인 `user_identity`와 일치하므로, 해당 `user_identity`에 설정된 비밀번호로 로그인해야 
합니다. 다음 명령으로 실제로 매칭된 식별자를 확인할 수 있습니다:
+
+```sql
+SELECT current_user();
+```
diff --git 
a/i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authentication/ldap.md
 
b/i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authentication/ldap.md
new file mode 100644
index 00000000000..49b79d2c610
--- /dev/null
+++ 
b/i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authentication/ldap.md
@@ -0,0 +1,534 @@
+---
+{
+    "title": "LDAP",
+    "language": "ko",
+    "description": "LDAP/LDAPS 연동을 통해 Apache Doris의 통합 인증과 그룹 권한 부여를 구성하는 방법을 
설명합니다. 로그인 방식, 권한 매핑, 자주 발생하는 문제를 다룹니다.",
+    "keywords": [
+        "Doris LDAP",
+        "Doris LDAPS",
+        "LDAP authentication",
+        "LDAP group authorization",
+        "unified authentication",
+        "ldap.conf configuration",
+        "ldap_default_roles",
+        "ldap_allow_empty_pass",
+        "MysqlClearPasswordPlugin",
+        "ldap_admin_password",
+        "ldap_use_ssl",
+        "SSLHandshakeException",
+        "PKIX path building failed",
+        "cleartext password plugin",
+        "cleartext plugin",
+        "empty password login"
+    ]
+}
+---
+
+Apache Doris는 외부 LDAP 서비스와의 연동을 지원합니다. 따라서 기존 기업 계정 시스템을 Doris의 사용자 인증 및 권한 정보 
소스로 직접 재사용할 수 있어 사용자와 비밀번호를 중복으로 관리할 필요가 없습니다. LDAP 연동은 두 가지 핵심 기능을 제공합니다.
+
+- **로그인 인증**: Doris 비밀번호 대신 LDAP 비밀번호로 사용자를 인증합니다.
+- **그룹 권한 부여**: LDAP `group`을 Doris `role`에 매핑하여 권한을 통합 관리합니다.
+- **기본 역할 권한 부여**: 모든 사용자를 하나의 LDAP 그룹에 넣지 않고도 LDAP로 인증된 모든 사용자에게 구성된 Doris 
역할을 부여합니다.
+
+<!-- Knowledge type: Architecture decision -->
+<!-- Applicable scenario: Integrating enterprise unified identity / 
centralized privilege management -->
+
+## 적용 시나리오 {#applicable-scenarios}
+
+| 시나리오 | 설명 |
+| --- | --- |
+| 기업 통합 사용자 인증 | 기존 LDAP/AD 계정 시스템을 Doris 사용자가 직접 재사용하여 Doris에서 계정을 다시 생성할 필요가 
없는 경우 |
+| 중앙 집중식 권한 관리 | LDAP 그룹을 통해 역할 구성원을 관리하고, LDAP 그룹 구성원을 변경하여 Doris 권한을 일괄 조정하는 
경우 |
+| LDAP 사용자의 기본 권한 | LDAP 그룹 권한 부여를 유지하면서 구성을 통해 LDAP로 인증된 모든 사용자에게 동일한 Doris 
역할을 부여하는 경우 |
+| 임시 접근 | LDAP에만 존재하는 사용자가 LDAP 그룹 권한에 따라 임시 사용자로 Doris에 로그인하는 경우 |
+| 암호화 채널 | Doris FE와 LDAP 서버 간 연결에 암호화가 필요한 경우(LDAPS) |
+
+## 사전 요구 사항 {#prerequisites}
+
+- 접근 가능한 LDAP/AD 서비스가 배포되어 있고, 다음 정보를 알고 있어야 합니다.
+    - LDAP 서비스의 `host`와 포트(평문은 `389`, LDAPS는 `636`)
+    - 관리자 계정의 `dn`과 비밀번호
+    - 사용자 및 그룹의 `basedn`
+    - 사용자 필터(`ldap_user_filter`)
+- Doris 클러스터의 FE 구성 파일에 대한 읽기/쓰기 권한이 있고 FE를 재시작할 수 있어야 합니다.
+- LDAP 관리자 비밀번호를 설정할 수 있는 `root` 또는 `admin` 계정이 있어야 합니다.
+- LDAPS를 활성화하려면 Doris **4.0.5** 이상이 필요합니다.
+
+## LDAP 기본 개념 {#ldap-basic-concepts}
+
+LDAP의 데이터는 트리 구조로 구성됩니다. 다음은 일반적인 LDAP 디렉터리 트리의 예입니다.
+
+```text
+- dc=example,dc=com
+    - ou = ou1
+        - cn = group1
+        - cn = user1
+    - ou = ou2
+        - cn = group2
+            - cn = user2
+    - cn = user3
+```
+
+### 용어 설명 {#term-explanations}
+
+| 용어 | 전체 이름 | 설명 |
+| --- | --- | --- |
+| `dc` | Domain Component | 조직의 도메인 이름으로, 트리의 루트 노드로 사용됩니다. |
+| `dn` | Distinguished Name | 고유한 이름입니다. 예를 들어 user1의 `dn`은 
`cn=user1,ou=ou1,dc=example,dc=com`이고, user2의 `dn`은 
`cn=user2,cn=group2,ou=ou2,dc=example,dc=com`입니다. |
+| `rdn` | Relative Distinguished Name | `dn`을 구성하는 부분입니다. user1의 네 `rdn`은 
`cn=user1`, `ou=ou1`, `dc=example`, `dc=com`입니다. |
+| `ou` | Organization Unit | 하위 조직입니다. `user`는 `ou` 내부에 배치하거나 example.com 도메인 
바로 아래에 배치할 수 있습니다. |
+| `cn` | Common Name | 이름입니다. |
+| `group` | - | 그룹으로, Doris 역할에 대응합니다. |
+| `user` | - | 사용자로, Doris 사용자에 해당합니다. |
+| `objectClass` | - | 데이터 유형입니다. 노드가 `group`인지 `user`인지 구분하는 데 사용됩니다. 
`group`에는 `cn`과 `member`(`user` 목록) 속성이 필요하며, `user`에는 `cn`, `password`, `uid` 
등의 속성이 필요합니다. |
+
+## 연동 절차 개요 {#integration-process-overview}
+
+<!-- Knowledge type: Operation steps -->
+<!-- Applicable scenario: First-time LDAP integration -->
+
+1. **Doris FE 구성**: `fe.conf`에서 인증 방식을 변경하고 `ldap.conf`에 LDAP 서비스 연결 정보를 입력합니다.
+2. **LDAP 관리자 비밀번호 설정**: Doris에 로그인한 후 SQL로 `ldap_admin_password`를 설정합니다.
+3. **클라이언트 구성**: LDAP 비밀번호를 전송할 수 있도록 MySQL 클라이언트 또는 JDBC 클라이언트에서 평문 비밀번호 
플러그인을 활성화합니다.
+4. **(선택 사항) LDAPS 활성화**: FE와 LDAP 간 채널을 암호화합니다.
+5. **(선택 사항) 그룹 권한 부여 구성**: Doris에 `role`을 LDAP 그룹과 동일한 이름으로 생성하고 권한을 부여합니다.
+6. **(선택 사항) 기본 역할 구성**: `ldap_default_roles`를 통해 LDAP로 인증된 모든 사용자에게 기본 Doris 
역할을 부여합니다.
+
+## 1단계: Doris FE 구성 {#step-1-configure-doris-fe}
+
+<!-- Knowledge type: Configuration parameters -->
+<!-- Applicable scenario: LDAP integration configuration on the FE side -->
+
+### 1.1 인증 방식 변경 {#11-switch-the-authentication-method}
+
+`fe/conf/fe.conf`에서 인증 방식을 설정합니다.
+
+```text
+authentication_type=ldap
+```
+
+### 1.2 LDAP 연결 정보 구성 {#12-configure-ldap-connection-information}
+
+`fe/conf/ldap.conf`에 LDAP 서비스 연결 정보를 입력합니다.
+
+```text
+ldap_authentication_enabled = true
+ldap_host = ladp-host
+ldap_port = 389
+ldap_admin_name = uid=admin,o=emr
+ldap_user_basedn = ou=people,o=emr
+ldap_user_filter = (&(uid={login}))
+ldap_group_basedn = ou=group,o=emr
+ldap_default_roles = ldap_readonly,ldap_query_user
+```
+
+각 구성 항목에 대한 설명은 다음과 같습니다.
+
+| 구성 항목 | 설명 |
+| --- | --- |
+| `ldap_authentication_enabled` | LDAP 인증 활성화 여부입니다. 반드시 `true`로 설정해야 합니다. |
+| `ldap_host` | LDAP 서버 주소입니다. |
+| `ldap_port` | LDAP 서비스 포트입니다. 기본값은 평문 LDAP의 경우 `389`, LDAPS의 경우 `636`입니다. |
+| `ldap_admin_name` | LDAP 관리자의 `dn`입니다. Doris는 이 계정으로 사용자 및 그룹 정보를 쿼리합니다. |
+| `ldap_user_basedn` | 사용자 검색의 기준 `dn`입니다. |
+| `ldap_user_filter` | 사용자를 찾는 필터입니다. `{login}`은 로그인 사용자 이름으로 대체됩니다. |
+| `ldap_group_basedn` | 그룹 검색의 기준 `dn`으로, 그룹 권한 부여에 사용됩니다. |
+| `ldap_default_roles` | 선택 사항입니다. LDAP로 인증된 모든 사용자에게 부여할 Doris 역할을 쉼표로 구분하여 
지정합니다. 이 역할은 LDAP 그룹 역할에 추가로 부여됩니다(4.0.7 및 4.1.3 버전부터 지원). |
+| `ldap_allow_empty_pass` | 선택 사항입니다. LDAP에 존재하는 사용자가 빈 비밀번호로 로그인하도록 허용할지 
여부입니다. 기본값은 `false`이며, Doris는 빈 비밀번호 로그인을 즉시 거부합니다. 변경하려면 FE를 재시작해야 합니다. [빈 
비밀번호 로그인](#empty-password-login)을 참조하세요(4.1.5 버전부터 지원). |
+
+:::tip
+LDAPS(LDAP 서버와의 암호화된 연결)를 활성화하려면 아래의 [LDAPS(암호화된 
연결)](#ldaps-encrypted-connection) 섹션을 참조하세요.
+:::
+
+### 1.3 LDAP 관리자 비밀번호 설정 {#13-set-the-ldap-administrator-password}
+
+FE를 시작한 후 `root` 또는 `admin` 계정으로 Doris에 로그인하여 LDAP 관리자 비밀번호를 설정합니다.
+
+```sql
+set ldap_admin_password = password('<ldap_admin_password>');
+```
+
+이 비밀번호는 `ldap_admin_name`에 해당하는 계정의 비밀번호입니다. Doris는 이 비밀번호를 사용하여 LDAP 서비스를 
쿼리합니다.
+
+## 2단계: 클라이언트 연결 {#step-2-client-connection}
+
+<!-- Knowledge type: Operation steps -->
+<!-- Applicable scenario: Enabling the cleartext password plugin on the client 
-->
+
+LDAP 인증에서는 클라이언트가 비밀번호를 평문으로 전송해야 하므로 평문 인증 플러그인을 활성화해야 합니다.
+
+### 2.1 MySQL 클라이언트 {#21-mysql-client}
+
+다음 두 가지 방법 중 하나로 평문 인증 플러그인을 활성화할 수 있습니다.
+
+- **방법 1**: 환경 변수 설정(지속 적용)
+
+    ```shell
+    echo "export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1" >> ~/.bash_profile && 
source ~/.bash_profile
+    ```
+
+- **방법 2**: 로그인할 때 매개변수 추가(해당 로그인에만 적용)
+
+    ```shell
+    mysql -hDORIS_HOST -PDORIS_PORT -u user -p --enable-cleartext-plugin
+    ```
+
+### 2.2 JDBC 클라이언트 {#22-jdbc-client}
+
+JDBC는 기본적으로 SSL 연결에서만 평문 비밀번호 플러그인을 사용하도록 요구합니다. SSL 활성화 여부에 따라 JDBC URL 작성 
방법이 달라집니다.
+
+#### 시나리오 A: Doris에서 SSL이 활성화되지 않은 경우 {#scenario-a-ssl-is-not-enabled-in-doris}
+
+SSL 제한을 우회하려면 사용자 정의 인증 플러그인이 필요합니다.
+
+1. `MysqlClearPasswordPlugin`을 상속하고 `requiresConfidentiality()` 메서드를 재정의하는 사용자 
정의 플러그인 클래스를 생성합니다.
+
+    ```java
+    public class MysqlClearPasswordPluginWithoutSSL extends 
MysqlClearPasswordPlugin {
+        @Override
+        public boolean requiresConfidentiality() {
+            return false;
+        }
+    }
+    ```
+
+2. JDBC 연결 URL에 사용자 정의 플러그인을 구성합니다(`xxx`를 실제 패키지 이름으로 바꾸세요).
+
+    ```sql
+    jdbcUrl = 
"jdbc:mysql://localhost:9030/mydatabase?authenticationPlugins=xxx.xxx.xxx.MysqlClearPasswordPluginWithoutSSL&defaultAuthenticationPlugin=xxx.xxx.xxx.MysqlClearPasswordPluginWithoutSSL&disabledAuthenticationPlugins=com.mysql.jdbc.authentication.MysqlClearPasswordPlugin";
+    ```
+
+    구성해야 할 세 가지 속성은 다음과 같습니다.
+
+    | 속성 | 설명 |
+    | --- | --- |
+    | `authenticationPlugins` | 사용자 정의 평문 인증 플러그인을 등록합니다. |
+    | `defaultAuthenticationPlugin` | 사용자 정의 플러그인을 기본 인증 플러그인으로 설정합니다. |
+    | `disabledAuthenticationPlugins` | 기존 평문 인증 플러그인(SSL을 강제하는 플러그인)을 
비활성화합니다. |
+
+:::tip
+[이 코드 
저장소](https://github.com/morningman/doris-debug-tools/tree/main/jdbc-test)의 관련 
예제를 참조할 수 있습니다. `build-auth-plugin.sh`를 직접 실행하면 위에서 설명한 플러그인 jar가 생성되며, 이를 
클라이언트의 지정된 위치에 배치하면 됩니다.
+:::
+
+#### 시나리오 B: Doris에서 SSL이 활성화된 경우 {#scenario-b-ssl-is-enabled-in-doris}
+
+`enable_ssl=true`를 `fe.conf`에 추가하면 JDBC URL에서 MySQL 기본 평문 비밀번호 플러그인을 직접 사용할 수 
있습니다.
+
+```sql
+jdbcUrl = "jdbc:mysql://localhost:9030/mydatabase?useSSL=true&sslMode=REQUIRED
+```
+
+## 로그인 인증 {#authentication-login}
+
+<!-- Knowledge type: Behavior description -->
+<!-- Applicable scenario: Understanding user authentication priority -->
+
+LDAP 로그인 인증은 LDAP 서비스를 통해 비밀번호를 검증하여 Doris 자체 인증 메커니즘을 보완하는 방식입니다. 비밀번호 검증 
우선순위는 다음과 같습니다.
+
+1. Doris는 먼저 LDAP를 사용하여 사용자 비밀번호를 검증합니다.
+2. 사용자가 LDAP에 존재하지 않으면 Doris 로컬 비밀번호 검증으로 전환합니다.
+3. LDAP 비밀번호가 올바르지만 Doris에 해당 계정이 없으면 로그인용 임시 사용자를 생성합니다.
+
+### 로그인 동작 개요 {#login-behavior-overview}
+
+LDAP를 활성화하면 사용자 상태에 따라 다음과 같이 로그인이 처리됩니다.
+
+| LDAP 사용자 | Doris 사용자 | 사용한 비밀번호 | 로그인 결과 | 로그인 계정 유형 |
+| --------- | ---------- | -------------- | ------------ | -------------- |
+| 존재함 | 존재함 | LDAP 비밀번호 | 성공 | Doris 사용자 |
+| 존재함 | 존재함 | Doris 비밀번호 | 실패 | - |
+| 존재하지 않음 | 존재함 | Doris 비밀번호 | 성공 | Doris 사용자 |
+| 존재함 | 존재하지 않음 | LDAP 비밀번호 | 성공 | LDAP 임시 사용자 |
+| 존재함 | 모든 상태 | 빈 비밀번호 | 기본적으로 실패(`ldap_allow_empty_pass = false`) | - |
+
+:::info 임시 사용자 정보
+
+- 임시 계정은 현재 연결에서만 유효하며, 연결이 종료되면 자동으로 삭제됩니다.
+- Doris는 임시 사용자에 대한 영구 사용자 메타데이터를 생성하지 않습니다.
+- 임시 사용자의 권한은 LDAP 그룹 권한 부여와 `ldap_default_roles`에 따라 결정됩니다(아래의 "그룹 권한 부여" 및 
"LDAP 사용자의 기본 역할" 섹션 참조).
+- 임시 사용자에게 해당하는 그룹 권한이나 구성된 기본 역할이 없으면, 기본적으로 `select_priv` 권한이 
`information_schema`에 부여됩니다.
+
+:::
+
+### 빈 비밀번호 로그인 {#empty-password-login}
+
+:::info 4.1.5 버전부터 지원
+:::
+
+기본 설정(`ldap_allow_empty_pass = false`)에서 LDAP에 존재하는 사용자가 빈 비밀번호로 로그인을 시도하면, 
Doris는 접근 거부 오류를 반환하여 로그인을 즉시 거부하며 해당 비밀번호로 LDAP 서버에 바인드를 시도하지 않습니다. FE는 
`Rejected LDAP login with empty password, user=jack`과 같은 경고를 `fe.log`에 기록합니다.
+
+이 기본 동작은 LDAP 프로토콜이 `dn`은 있지만 비밀번호가 비어 있는 바인드 요청을 *unauthenticated bind*로 처리하기 
때문에 적용됩니다. 일부 디렉터리 서버(예: Active Directory)는 이러한 바인드를 허용하고 성공을 반환합니다. Doris가 빈 
비밀번호를 그대로 전달하면 유효한 LDAP 사용자 이름을 아는 누구나 비밀번호 없이 Doris에 로그인할 수 있습니다. 4.1.5 이전 
버전에서는 Doris가 항상 빈 비밀번호를 LDAP 서버로 전달했으므로, 이러한 로그인의 성공 여부는 전적으로 LDAP 서버 구성에 따라 
결정되었습니다.
+
+이전 동작을 유지해야 한다면 `fe/conf/ldap.conf`에 다음 설정을 추가하고 FE를 재시작하세요.
+
+```text
+ldap_allow_empty_pass = true
+```
+
+이후 Doris는 자체적으로 빈 비밀번호를 검사하지 않고 바인드 요청을 LDAP 서버로 전달합니다. 로그인 성공 여부는 LDAP 서버가 
비인증 바인드를 허용하는지에 따라 결정됩니다.
+
+:::caution
+
+- `ldap_allow_empty_pass`를 활성화하면 위에서 설명한 보안 위험이 다시 발생합니다. 운영 환경에서는 기본값인 
`false`를 유지하세요.
+- `ldap_allow_empty_pass`는 `ADMIN SET FRONTEND CONFIG`로 온라인 변경할 수 없습니다. 변경하려면 
FE를 재시작해야 합니다.
+- 이 구성은 LDAP에 존재하는 사용자에게만 영향을 줍니다. Doris에만 존재하는 사용자는 계속해서 Doris 로컬 비밀번호로 검증됩니다.
+
+:::
+
+### 로그인 예제 {#login-examples}
+
+다음 예제는 LDAP 인증이 활성화되어 있고, `ldap_user_filter = (&(uid={login}))`가 구성되어 있으며, 
클라이언트에 `LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1`이 설정되어 있다고 가정합니다.
+
+**시나리오 1: 계정이 Doris와 LDAP 모두에 존재하는 경우**
+
+- Doris 계정: `jack@'172.10.1.10'`, 비밀번호: `123456`
+- LDAP 사용자 속성: `uid: jack`, 비밀번호: `abcdef`
+
+LDAP 비밀번호로 로그인하면 성공합니다.
+
+```sql
+mysql -hDoris_HOST -PDoris_PORT -ujack -p abcdef
+```
+
+Doris 비밀번호로 로그인하면 실패합니다(LDAP를 활성화한 후에는 LDAP 사용자가 반드시 LDAP 비밀번호를 사용해야 합니다).
+
+```sql
+mysql -hDoris_HOST -PDoris_PORT -ujack -p 123456
+```
+
+**시나리오 2: 사용자가 LDAP에만 존재하는 경우**
+
+- LDAP 사용자 속성: `uid: jack`, 비밀번호: `abcdef`
+
+LDAP 비밀번호로 로그인하면 Doris가 임시 사용자 `jack@'%'`를 자동으로 생성하여 로그인합니다. 사용 가능한 LDAP 그룹 
역할과 구성된 기본 역할이 있으면 임시 사용자에게 부여됩니다. 일치하는 역할이 없으면 기본 권한인 `DatabasePrivs`: 
`Select_priv`를 가지며, 연결이 종료되면 자동으로 삭제됩니다.
+
+```sql
+mysql -hDoris_HOST -PDoris_PORT -ujack -p abcdef
+```
+
+**시나리오 3: 계정이 Doris에만 존재하는 경우**
+
+- Doris 계정: `jack@'172.10.1.10'`, 비밀번호: `123456`
+
+사용자가 LDAP에 존재하지 않으므로 Doris 로컬 인증으로 전환합니다. Doris 비밀번호로 로그인하면 성공합니다.
+
+```sql
+mysql -hDoris_HOST -PDoris_PORT -ujack -p 123456
+```
+
+**시나리오 4: LDAP 사용자가 빈 비밀번호로 로그인하는 경우**
+
+- LDAP 사용자 속성: `uid: jack`, 비밀번호: `abcdef`
+
+비밀번호를 입력하지 않고 로그인합니다. 기본 설정인 `ldap_allow_empty_pass = false`에서는 Doris가 로그인을 즉시 
거부합니다([빈 비밀번호 로그인](#empty-password-login) 참조).
+
+```sql
+mysql -hDoris_HOST -PDoris_PORT -ujack
+```
+
+## 그룹 권한 부여 {#group-authorization}
+
+<!-- Knowledge type: Behavior description -->
+<!-- Applicable scenario: Mapping LDAP groups to Doris roles -->
+
+LDAP 그룹 권한 부여는 LDAP `group`을 Doris `role`에 매핑하여 권한을 중앙에서 관리하는 기능입니다. 핵심 동작은 
다음과 같습니다.
+
+- LDAP 사용자의 `dn`이 LDAP 그룹 노드의 `member` 속성에 포함되어 있으면 Doris는 해당 사용자가 그 그룹에 속한다고 
판단합니다.
+- 사용자가 로그인하면 Doris는 해당 사용자가 속한 LDAP 그룹에 대응하는 `role` 권한을 자동으로 부여합니다.
+- `ldap_default_roles`가 구성되어 있으면 Doris는 해당 기본 역할도 사용자에게 부여합니다.
+- 사용자가 로그아웃하면 Doris는 이러한 `role` 권한을 자동으로 회수합니다.
+
+:::caution 사전 요구 사항
+LDAP 그룹 권한 부여를 사용하려면 먼저 Doris에 `role`을 생성하되 LDAP `group`과 동일한 이름을 지정하고, 해당 
`role`에 권한을 부여해야 합니다.
+:::
+
+### 권한 병합 규칙 {#privilege-merge-rules}
+
+로그인한 사용자의 최종 권한은 LDAP와 Doris에서의 사용자 상태에 따라 결정됩니다.
+
+| LDAP 사용자 | Doris 사용자 | 최종 권한 |
+| --------- | ---------- | ---------------- |
+| 존재함 | 존재함 | LDAP 그룹 권한 + 구성된 기본 역할 + Doris 사용자 권한 |
+| 존재하지 않음 | 존재함 | Doris 사용자 권한 |
+| 존재함 | 존재하지 않음 | LDAP 그룹 권한 + 구성된 기본 역할 |
+
+### 그룹 이름 매핑 규칙 {#group-name-mapping-rules}
+
+Doris는 첫 번째 `Rdn`을 LDAP 그룹의 `dn`에서 추출하여 그룹 이름으로 사용하고, Doris에서 이름이 같은 `role`에 
매핑합니다.
+
+예를 들어 사용자 `dn`이 `uid=jack,ou=aidp,dc=domain,dc=com`이고 그룹 정보가 다음과 같다고 가정합니다.
+
+```text
+dn: cn=doris_rd,ou=group,dc=domain,dc=com
+objectClass: groupOfNames
+member: uid=jack,ou=aidp,dc=domain,dc=com
+```
+
+그룹의 첫 번째 `Rdn` 값은 해당 `dn`에서 `cn=doris_rd`입니다. 따라서 그룹 이름은 `doris_rd`이며, Doris의 
`role`인 `doris_rd`에 대응합니다.
+
+### 그룹 권한 부여 예제 {#group-authorization-example}
+
+사용자 jack이 LDAP 그룹 `doris_rd`, `doris_qa`, `doris_pm`에 속하고, Doris에도 동일한 이름의 
`role`인 `doris_rd`, `doris_qa`, `doris_pm`이 있다고 가정합니다. jack이 로그인하면 기존 Doris 계정 
권한에 더해 이 세 `role`의 권한도 갖게 됩니다.
+
+:::note 참고
+
+- `user`가 속한 `group`은 LDAP 트리의 조직 구조와 무관합니다. 위 예제에서 `user2`가 반드시 `group2`에 속하는 
것은 아닙니다.
+- `user2`가 `group2`에 속하도록 하려면 `user2`를 `member` 속성에 명시적으로 추가해야 합니다(`group2`의 
속성).
+
+:::
+
+## LDAP 사용자의 기본 역할 {#default-roles-for-ldap-users}
+
+<!-- Knowledge type: Configuration parameters -->
+<!-- Applicable scenario: Granting baseline Doris privileges to all 
LDAP-authenticated users -->
+
+:::info 4.0.7 및 4.1.3 버전부터 지원
+:::
+
+`ldap_default_roles`는 LDAP로 인증된 모든 사용자에게 기본 Doris 역할을 부여하는 데 사용됩니다. 모든 LDAP 
사용자에게 동일한 기본 권한이 필요하지만, 모든 LDAP 사용자를 포함하는 전용 LDAP 그룹을 관리하기 어려운 경우에 유용합니다.
+
+`ldap_default_roles`는 LDAP 그룹 권한 부여를 대체하지 않습니다. LDAP 사용자가 로그인하면 Doris는 다음 권한을 
모두 병합합니다.
+
+- 사용자의 LDAP 그룹에서 매핑된 Doris 역할.
+- `ldap_default_roles`에 구성된 Doris 역할.
+- 동일한 계정이 Doris에도 존재하는 경우 해당 Doris 사용자의 기존 권한.
+- 기본 제공 `ldapDefaultRole`. 이 역할은 `select_priv` 권한을 `information_schema`에 부여합니다.
+
+:::caution 사전 요구 사항
+`ldap_default_roles`에 나열된 역할은 Doris에 이미 존재해야 합니다. 구성된 역할이 존재하지 않으면 Doris는 해당 
역할을 무시하고 경고를 기록합니다.
+:::
+
+### 기본 역할 구성 {#configure-default-roles}
+
+역할을 생성하고 권한을 부여합니다.
+
+```sql
+CREATE ROLE ldap_readonly;
+CREATE ROLE ldap_query_user;
+
+GRANT SELECT_PRIV ON internal.example_db.* TO ROLE 'ldap_readonly';
+GRANT SELECT_PRIV ON internal.example_db.example_table TO ROLE 
'ldap_query_user';
+```
+
+`fe/conf/ldap.conf`에 역할을 구성합니다.
+
+```text
+ldap_default_roles = ldap_readonly,ldap_query_user
+```
+
+온라인으로 값을 변경할 수도 있습니다.
+
+```sql
+ADMIN SET FRONTEND CONFIG ("ldap_default_roles" = 
"ldap_readonly,ldap_query_user");
+```
+
+`ldap_default_roles`를 온라인으로 변경하면 Doris가 LDAP 사용자 캐시를 자동으로 갱신하므로, 이후 LDAP 로그인부터 
새 기본 역할을 사용할 수 있습니다.
+
+## LDAPS(암호화된 연결) {#ldaps-encrypted-connection}
+
+<!-- Knowledge type: Configuration parameters -->
+<!-- Applicable scenario: Encrypting the channel between FE and the LDAP 
server -->
+
+:::info 4.0.5 버전부터 지원
+:::
+
+기본적으로 Doris는 평문 LDAP 프로토콜로 LDAP 서버와 통신합니다. 4.0.5 버전부터는 LDAPS(LDAP over 
SSL/TLS)를 지원하여 Doris FE와 LDAP 서버 간 연결을 암호화할 수 있습니다.
+
+### LDAPS 활성화 {#enable-ldaps}
+
+`fe/conf/ldap.conf`에서 포트를 LDAPS 포트(일반적으로 `636`)로 변경하고 SSL을 활성화합니다.
+
+```text
+ldap_host = ldap-host
+ldap_port = 636
+ldap_use_ssl = true
+```
+
+`ldap_use_ssl`이 `true`로 설정되면 Doris는 `ldaps://` 프로토콜로 LDAP 서버에 연결합니다.
+
+### 인증서 신뢰 구성 {#configure-certificate-trust}
+
+LDAPS를 사용할 때는 Doris FE의 JVM이 LDAP 서버의 SSL 인증서를 신뢰해야 합니다.
+
+- LDAP 서버가 사용하는 인증서가 널리 알려진 공인 CA에서 발급된 경우 추가 구성이 필요하지 않습니다.
+- 사용자 정의 CA 또는 자체 서명 CA를 사용하는 경우 CA 인증서를 Java trustStore에 가져오고, JVM이 이 
trustStore를 사용하도록 구성해야 합니다.
+
+`JAVA_OPTS`에 trustStore 매개변수를 추가합니다(`fe/conf/fe.conf`). 예:
+
+```text
+# JDK 17 example
+JAVA_OPTS_FOR_JDK_17 = "-Djavax.net.ssl.trustStore=/path/to/your/cacerts 
-Djavax.net.ssl.trustStorePassword=changeit ..."
+```
+
+자체 서명 CA 인증서를 가져오는 전체 절차는 다음과 같습니다.
+
+1. CA 인증서 파일(예: `ca.crt`)을 준비합니다.
+2. `keytool`을 사용하여 Java trustStore에 가져옵니다.
+
+    ```shell
+    keytool -importcert -alias ldap-ca -keystore /path/to/your/cacerts -file 
/path/to/ca.crt -storepass changeit -noprompt
+    ```
+
+3. 위에서 설명한 대로 `JAVA_OPTS`에 trustStore 경로를 구성합니다.
+4. 구성을 적용하려면 Doris FE를 재시작합니다.
+
+## 캐시 관리 {#cache-management}
+
+<!-- Knowledge type: Configuration parameters -->
+<!-- Applicable scenario: Forcing a refresh after LDAP information changes -->
+
+LDAP 서비스에 대한 빈번한 접근을 방지하기 위해 Doris는 LDAP 정보를 메모리에 캐시합니다.
+
+| 구성 항목 | 설명 | 기본값 |
+| --- | --- | --- |
+| `ldap_user_cache_timeout_s` | LDAP 사용자 정보의 캐시 유지 시간(초) | 43200(12시간) |
+
+다음과 같은 경우 변경 사항을 즉시 적용하려면 캐시를 수동으로 갱신해야 할 수 있습니다.
+
+- LDAP 서비스의 사용자 또는 그룹 정보가 변경된 경우.
+- LDAP 사용자 그룹에 대응하는 Doris의 `Role` 권한이 변경된 경우.
+
+`ldap_default_roles`를 온라인으로 변경하면 LDAP 사용자 캐시가 자동으로 갱신됩니다. 이 구성 변경만을 위해 
`refresh ldap`를 실행할 필요는 없습니다.
+
+`refresh ldap` 문으로 캐시를 갱신할 수 있습니다. 자세한 내용은 
[REFRESH-LDAP](../../../sql-manual/sql-statements/account-management/REFRESH-LDAP)를
 참조하세요.
+
+## 알려진 제한 사항 {#known-limitations}
+
+- Doris의 LDAP 기능은 클라이언트에서 FE로 이어지는 채널에서 평문 비밀번호 검증만 지원합니다. 즉, 사용자가 로그인할 때 
비밀번호는 `client`와 `fe` 사이에서 평문으로 전송됩니다. 클라이언트와 Doris FE 간 SSL/TLS 암호화는 별도로 구성해야 
합니다([클라이언트 연결](#step-2-client-connection) 참조).
+- FE에서 LDAP 서버로 이어지는 채널은 기본적으로 평문 전송을 사용합니다(`ldap_use_ssl = false`). 이 채널을 
암호화하려면 `ldap_use_ssl = true`를 설정하여 LDAPS를 활성화하세요([LDAPS(암호화된 
연결)](#ldaps-encrypted-connection) 참조).
+
+## 자주 묻는 질문 {#frequently-asked-questions}
+
+<!-- Knowledge type: Troubleshooting -->
+<!-- Applicable scenario: Login failure / empty-password login rejected / 
missing roles / LDAPS handshake failure -->
+
+### Q: LDAP 사용자가 Doris에서 가진 역할을 어떻게 확인하나요? 
{#q-how-do-i-view-which-roles-an-ldap-user-has-in-doris}
+
+LDAP 사용자로 Doris에 로그인한 후 `show grants;`를 실행하면 현재 사용자의 모든 역할을 확인할 수 있습니다. 이 중 
`ldapDefaultRole`은 모든 LDAP 사용자가 갖는 기본 역할입니다.
+
+`ldapDefaultRole`은 기본 제공 임시 역할로, `select_priv` 권한을 `information_schema`에 
부여합니다. 이 역할은 `ldap_default_roles`에 구성된 역할과 다릅니다.
+
+### Q: LDAP 사용자가 Doris에서 가진 역할이 예상보다 적습니다. 어떻게 해결하나요? 
{#q-an-ldap-user-has-fewer-roles-in-doris-than-expected-how-do-i-troubleshoot}
+
+다음 항목을 차례로 확인하세요.
+
+1. `show roles;`를 실행하여 필요한 역할이 Doris에 존재하는지 확인합니다. 존재하지 않으면 `CREATE ROLE 
role_name;`으로 생성합니다.
+2. 필요한 `group`이 `ldap_group_basedn`에 해당하는 조직 구조 아래에 있는지 확인합니다.
+3. 필요한 `group`에 `member` 속성이 있는지 확인합니다.
+4. `member` 속성에 필요한 `group`의 현재 사용자 `dn`이 포함되어 있는지 확인합니다.
+5. 누락된 역할이 `ldap_default_roles`에 구성되어 있다면 역할 이름의 철자가 올바른지, 해당 역할이 Doris에 존재하는지 
확인합니다.
+
+### Q: 이전에는 LDAP 사용자가 빈 비밀번호로 로그인할 수 있었지만 업그레이드 후에는 실패합니다. 이유가 무엇인가요? 
{#q-an-ldap-user-could-log-in-with-an-empty-password-before-but-the-login-fails-after-upgrading-why}
+
+4.1.5 버전부터 Doris는 LDAP에 존재하는 사용자의 빈 비밀번호 로그인을 기본적으로 
거부합니다(`ldap_allow_empty_pass = false`). 일부 LDAP 서버가 빈 비밀번호를 사용하는 바인드를 성공한 비인증 
바인드로 처리하기 때문입니다. 이러한 시도는 `fe.log`에 `Rejected LDAP login with empty password`로 
기록됩니다.
+
+사용자에게 LDAP 비밀번호로 로그인하도록 안내하세요. 이전 동작을 유지해야 한다면 `ldap_allow_empty_pass = true`를 
`fe/conf/ldap.conf`에 설정하고 FE를 재시작하세요. 운영 환경에서는 권장하지 않습니다. 자세한 내용은 [빈 비밀번호 
로그인](#empty-password-login)을 참조하세요.
+
+### Q: LDAPS 연결이 실패합니다. 어떻게 해결하나요? 
{#q-ldaps-connection-fails-how-do-i-troubleshoot}
+
+다음 항목을 차례로 확인하세요.
+
+1. `ldap_use_ssl = true`가 `fe/conf/ldap.conf`에 설정되어 있는지 확인합니다.
+2. `ldap_port`가 올바른 LDAPS 포트(일반적으로 `636`)로 설정되어 있는지 확인합니다.
+3. JVM이 LDAP 서버의 SSL 인증서를 신뢰하는지 확인합니다. `fe.log`에서 `SSLHandshakeException` 또는 
`PKIX path building failed`와 같은 SSL 핸드셰이크 오류를 확인합니다.
+4. 자체 서명 CA를 사용하는 경우 CA 인증서를 trustStore에 가져왔는지, `JAVA_OPTS`의 trustStore 경로가 
올바르게 구성되어 있는지 확인합니다.
diff --git 
a/i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authorization/custom.md
 
b/i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authorization/custom.md
new file mode 100644
index 00000000000..4d753080860
--- /dev/null
+++ 
b/i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authorization/custom.md
@@ -0,0 +1,106 @@
+---
+{
+    "title": "사용자 정의 권한 부여 플러그인",
+    "language": "ko",
+    "description": "개발 버전의 권한 부여 SPI를 사용하여 사용자 정의 권한 부여 소스를 구현하고 패키징 및 구성합니다.",
+    "keywords": [
+        "Doris 권한 부여",
+        "AuthorizationPlugin",
+        "AuthorizationPluginFactory"
+    ]
+}
+---
+
+개발 버전은 외부 권한 판단, 열 마스킹 및 행 필터를 위해 
`org.apache.doris.authorization.spi.AuthorizationPlugin`과 
`AuthorizationPluginFactory`를 제공합니다.
+
+:::note
+이 인터페이스는 개발 버전에 해당합니다. Doris 4.x는 `CatalogAccessController` / 
`AccessControllerFactory`를 사용합니다. [4.x 
가이드](https://doris.apache.org/docs/4.x/admin-manual/auth/authorization/custom)를 
참조하세요. 두 버전은 서비스 디스크립터와 디렉터리 구조가 다릅니다.
+:::
+
+## 사전 요구 사항 {#prerequisites}
+
+배포된 FE와 일치하는 소스 및 JDK를 사용하여 컴파일하고, `fe-authorization-api`와 
`fe-authorization-spi`를 provided 의존성으로 지정합니다. 플러그인 JAR에 Doris API 클래스를 포함해서는 안 
됩니다. 배포하려면 모든 FE의 플러그인 디렉터리에 대한 쓰기 권한이 필요하며 FE를 재시작해야 합니다. 검증에는 해당 Catalog를 관리할 
권한이 있는 계정을 사용합니다.
+
+## 최소 팩터리 구현 {#minimal-factory}
+
+아래의 완전한 팩터리 예제는 기본적으로 모든 권한을 거부하는 플러그인을 생성하므로, 플러그인이 정상적으로 검색되는지 확인할 수 있습니다. 
실제로 정책을 적용하는 플러그인은 `checkAction` 또는 `checkPrivilege`를 재정의하여 정책 소스를 조회해야 합니다. 
`name()`만 구현한 플러그인은 애플리케이션 쿼리를 처리할 수 없습니다.
+
+```java
+package com.example.doris.authz;
+
+import java.util.Map;
+import org.apache.doris.authorization.spi.AuthorizationContext;
+import org.apache.doris.authorization.spi.AuthorizationPlugin;
+import org.apache.doris.authorization.spi.AuthorizationPluginFactory;
+
+public final class MyAuthorizationPluginFactory implements 
AuthorizationPluginFactory {
+    @Override
+    public String name() { return "my-authz"; }
+
+    @Override
+    public AuthorizationPlugin create(Map<String, String> properties,
+            AuthorizationContext context) {
+        return new AuthorizationPlugin() {
+            @Override
+            public String name() { return "my-authz"; }
+        };
+    }
+}
+```
+
+JAR 내부의 다음 서비스 디스크립터에 팩터리 클래스 이름을 추가합니다.
+
+```text
+META-INF/services/org.apache.doris.authorization.spi.AuthorizationPluginFactory
+```
+
+```text
+com.example.doris.authz.MyAuthorizationPluginFactory
+```
+
+## 인터페이스 동작 방식 {#interface-semantics}
+
+- `checkPrivilege(subject, resource, requirement, context)`는 예외 없이 반환하면 접근을 
허용하고, `AccessDeniedException`을 던지면 접근을 거부합니다. 기본 구현은 요구 사항에 포함된 작업에 대해 
`checkAction`을 호출하며 ALL/ANY 규칙을 적용합니다. 구현하지 않은 검사는 접근을 거부합니다.
+- `getRowFilters`는 `List<RowFilterSpec>`을 반환하고, `getDataMasks`는 열 이름을 키로 사용하는 
`Map<String, DataMaskSpec>`을 반환합니다. 빈 컬렉션은 적용할 정책이 없음을 뜻하며, 접근을 허용한다는 의미는 아닙니다. 
NULL을 반환해서는 안 됩니다. 정책을 불러올 수 없으면 예외를 던져 해당 구문이 실패하도록 해야 합니다.
+- 각 리소스의 권한은 하나의 권한 부여 소스가 판단합니다. Catalog에 연결된 소스는 해당 Catalog 내부의 객체를 관리하고, 
인스턴스 소스는 인스턴스 객체와 Catalog 수준의 권한 부여를 관리합니다. 플러그인은 전역 권한에 따른 검사 면제 여부를 직접 결정하며, 
`AuthorizationContext.grantedByGlobalScopeAuthority`를 참조할 수 있습니다. 엔진이 모든 플러그인 
호출을 사전에 승인하는 것은 아닙니다.
+- skipAuth에 따른 엔진의 검사 면제, 외부에서 권한을 관리하는 해당 Catalog의 skip_catalog_priv_check에 
따른 검사 면제, 계정명이 정확히 root@'%' 및 admin@'%'인 계정의 행 필터/마스킹 면제는 그대로 유지됩니다.
+- 인스턴스는 재사용되며, 구성된 인스턴스가 교체될 때 `close()`가 호출됩니다. 플러그인은 정책 캐싱과 갱신, 동시성 제어 및 리소스 
정리를 책임집니다.
+
+## 패키징 및 배포 {#packaging-and-deployment}
+
+JAR MANIFEST에 `Doris-Authorization-Plugin-Api-Version`을 선언하고, 배포된 FE SPI JAR의 
`META-INF/doris/authorization-plugin-api-version.properties`에 명시된 버전을 사용합니다. 현재 
주 버전은 `1`이며, 예시는 다음과 같습니다.
+
+```text
+Doris-Authorization-Plugin-Api-Version: 1.0
+```
+
+선언이 없거나 주 버전이 다르면 플러그인이 거부됩니다. 각 플러그인은 `authorization_plugins_dir` 아래의 개별 하위 
디렉터리에 설치합니다. 이 설정의 기본값은 `${DORIS_HOME}/plugins/authorization`입니다.
+
+```text
+plugins/authorization/my-authz/my-authz.jar
+plugins/authorization/my-authz/lib/policy-client.jar
+```
+
+모든 FE에 배포하고 재시작합니다. 의존성은 격리된 child-first 클래스 로더를 사용하며, 
`org.apache.doris.authorization.*`는 항상 FE에서 가져옵니다.
+
+## 구성 및 검증 {#configuration-and-validation}
+
+내부 Catalog의 경우 `access_controller_type = my-authz`를 `fe.conf`에 설정합니다. 속성은 
`authorization_config_file_path`로 지정된 파일에서 가져오며, 기본 경로는 
`${DORIS_HOME}/conf/authorization.conf`입니다. 기본값인 `default`는 내장 권한 부여를 선택합니다.
+
+외부 Catalog의 경우 먼저 접근 가능한 HMS를 준비하고 예제의 엔드포인트와 자격 증명을 실제 값으로 바꿉니다.
+
+```sql
+CREATE CATALOG my_catalog PROPERTIES (
+    "type" = "hms",
+    "hive.metastore.uris" = "thrift://127.0.0.1:9083",
+    "access_controller.class" = "my-authz",
+    "access_controller.properties.api_url" = "https://policy.example.com";,
+    "access_controller.properties.token" = "<token>"
+);
+```
+
+`access_controller.class`는 팩터리 이름 또는 팩터리 클래스 이름을 선택합니다. Doris는 구성을 팩터리에 전달하기 
전에 `access_controller.properties.` 접두사를 제거합니다. 내부 Catalog를 변경하기 전에 테스트 
Catalog에서 허용되는 쿼리와 거부되는 쿼리, 정책을 사용할 수 없는 상황, 열 권한, 마스킹 및 행 필터를 검증합니다. 팩터리를 찾을 수 
없으면 FE 시작 로그, 서비스 디스크립터, API 버전 선언 및 플러그인 디렉터리 구조를 확인합니다.
+
+## 기존 인터페이스에서 마이그레이션 {#migrating-from-the-legacy-interface}
+
+기존 컨트롤러는 어댑터를 통해 계속 작동하지만 더 이상 사용을 권장하지 않습니다. `hasGlobal` 오버로드는 제거되었으며, 데이터 
정책은 이제 `DataMaskSpec` / `RowFilterSpec`을 사용합니다. 정책이 포함된 기존 구현은 다시 컴파일해야 합니다. 이전 
Ranger의 싱글턴 동작을 그대로 따르지 말고 새 SPI 수명 주기를 따라야 합니다. 전체 구현 예제는 소스 트리의 
`fe/fe-core/src/test/java/org/apache/doris/authorizationexample/`에 있으며, 패키징에 관한 
자세한 내용은 `fe/fe-authorization/fe-authorization-spi/README.md`에 있습니다.
diff --git 
a/translations/state/ko/pages/default/current/admin-manual/audit-plugin.json 
b/translations/state/ko/pages/default/current/admin-manual/audit-plugin.json
new file mode 100644
index 00000000000..64b7d5b536d
--- /dev/null
+++ b/translations/state/ko/pages/default/current/admin-manual/audit-plugin.json
@@ -0,0 +1,62 @@
+{
+  "schemaVersion": 1,
+  "page": {
+    "pluginId": "default",
+    "version": "current",
+    "docId": "admin-manual/audit-plugin",
+    "locale": "ko",
+    "sourceLocale": "en",
+    "sourcePath": "docs/admin-manual/audit-plugin.md",
+    "targetPath": 
"i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/audit-plugin.md",
+    "sourceCommit": "54237d9b6ae5f6f2bed49f0a660cd3d61b4b95ce",
+    "sourceHash": 
"ed13281ef8811da52c5d7f4eec5e0ce97eb4dc7c2ca834686f328bf51581b246",
+    "sourceTechnicalHash": 
"114ba716cf7f0eb16126861cbab175126301b316421eb46e7121f7f6c524c2fe",
+    "targetHash": 
"c72ee87d9ddbb36729f83bc642e658fc03d40b86b3760b05de78fe68b247c66b",
+    "reviewStatus": "machine",
+    "ownership": "machine",
+    "translatedAt": "2026-10-18T21:40:21.066Z",
+    "glossaryVersion": "1",
+    "generation": {
+      "policy": "whole-document-v1",
+      "mode": "full",
+      "reason": "local-t09-batch",
+      "attempts": 3,
+      "acceptedWithWarnings": false,
+      "sourceHash": 
"ed13281ef8811da52c5d7f4eec5e0ce97eb4dc7c2ca834686f328bf51581b246",
+      "targetHash": 
"c72ee87d9ddbb36729f83bc642e658fc03d40b86b3760b05de78fe68b247c66b",
+      "warnings": [],
+      "history": [
+        {
+          "attempt": 1,
+          "issues": [
+            {
+              "check": "protected-content",
+              "message": "Restore protected source content:\nprotected node 
16: expected [\"inlineCode\",null,null,\"audit_log\"]; received 
[\"inlineCode\",null,null,\"ALTER TABLE\"]\nprotected node 17: expected 
[\"inlineCode\",null,null,\"ALTER TABLE\"]; received 
[\"inlineCode\",null,null,\"audit_log\"]\nprotected node 18: expected 
[\"link\",\"../admin-manual/system-tables/internal_schema/audit_log\",null]; 
received [\"inlineCode\",null,null,\"__internal_schema\"]"
+            },
+            {
+              "check": "shared-pr-admission",
+              "message": "{\n  \"checked\": 1,\n  \"errors\": [\n    {\n      
\"path\": 
\"i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/audit-plugin.md\",\n
      \"message\": \"Protected code, links, numbers, MDX or metadata differ 
from the source\"\n    }\n  ],\n  \"warnings\": [],\n  \"freshness\": {\n    
\"current\": 6,\n    \"untranslated\": 5946\n  },\n  \"reports\": [\n    {\n    
  \"kind\": \"unsupported_source_route\",\n      \"pluginId\": \"default\",\n   
   \"vers [...]
+            }
+          ]
+        },
+        {
+          "attempt": 2,
+          "issues": [
+            {
+              "check": "batch-tests-00",
+              "message": "✔ PR build scope separates content locales, shared 
inputs, and retired versions (2.410375ms)\n✔ publication changes exercise the 
complete optimized artifact on CI (0.145625ms)\n✔ A localized index admits only 
current, reviewed and in-scope native targets (0.229708ms)\n✔ sidebar audit 
discovers new native keys without a snapshot allowlist (1.1245ms)\n✔ protected 
Japanese changes reject SQL and route edits but allow translated prose 
(71.792708ms)\n✔ translated hea [...]
+            },
+            {
+              "check": "batch-tests-14",
+              "message": "✔ translation changes only selected prose, visible 
MDX fields and image alt (100.03125ms)\n✔ object front matter and keyword lists 
translate without changing route fields (3.762334ms)\n✔ generated files drop 
inherited blank lines at EOF before publication (1.949666ms)\n✔ missing units, 
modified placeholders and changed product names fail before writes 
(1.627541ms)\n✔ signed numbers and version tokens are protected as whole values 
(0.07275ms)\n✔ required terminol [...]
+            }
+          ]
+        },
+        {
+          "attempt": 3,
+          "issues": []
+        }
+      ]
+    }
+  }
+}
diff --git 
a/translations/state/ko/pages/default/current/admin-manual/auth/authentication-and-authorization.json
 
b/translations/state/ko/pages/default/current/admin-manual/auth/authentication-and-authorization.json
new file mode 100644
index 00000000000..cdbfc3a08de
--- /dev/null
+++ 
b/translations/state/ko/pages/default/current/admin-manual/auth/authentication-and-authorization.json
@@ -0,0 +1,72 @@
+{
+  "schemaVersion": 1,
+  "page": {
+    "pluginId": "default",
+    "version": "current",
+    "docId": "admin-manual/auth/authentication-and-authorization",
+    "locale": "ko",
+    "sourceLocale": "en",
+    "sourcePath": "docs/admin-manual/auth/authentication-and-authorization.md",
+    "targetPath": 
"i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authentication-and-authorization.md",
+    "sourceCommit": "54237d9b6ae5f6f2bed49f0a660cd3d61b4b95ce",
+    "sourceHash": 
"36e82c03adf6fc59eee707f71d8196390889a7c741b7d6e9f06d56c605b52f34",
+    "sourceTechnicalHash": 
"475554e5676ddb7d0e5fe2206b54a34b7b492aca25307492f191abfbe4905c39",
+    "targetHash": 
"3546171875c260d6619daf6229edb69ad2d905a8be92df8e6155b2dc501e242d",
+    "reviewStatus": "machine",
+    "ownership": "machine",
+    "translatedAt": "2026-10-18T21:41:34.538Z",
+    "glossaryVersion": "1",
+    "generation": {
+      "policy": "whole-document-v1",
+      "mode": "full",
+      "reason": "local-t09-batch",
+      "attempts": 3,
+      "acceptedWithWarnings": true,
+      "sourceHash": 
"36e82c03adf6fc59eee707f71d8196390889a7c741b7d6e9f06d56c605b52f34",
+      "targetHash": 
"3546171875c260d6619daf6229edb69ad2d905a8be92df8e6155b2dc501e242d",
+      "warnings": [
+        {
+          "check": "protected-content",
+          "message": "Restore protected source content:\nprotected node 94: 
expected [\"inlineCode\",null,null,\"priv1\"]; received 
[\"inlineCode\",null,null,\"role1\"]\nprotected node 95: expected 
[\"inlineCode\",null,null,\"role1\"]; received 
[\"inlineCode\",null,null,\"priv1\"]\nprotected node 96: expected 
[\"inlineCode\",null,null,\"priv1\"]; received 
[\"inlineCode\",null,null,\"role3\"]"
+        }
+      ],
+      "history": [
+        {
+          "attempt": 1,
+          "issues": [
+            {
+              "check": "protected-content",
+              "message": "Restore protected source content:\nprotected node 6: 
expected [\"inlineCode\",null,null,\"username\"]; received 
[\"inlineCode\",null,null,\"host\"]\nprotected node 7: expected 
[\"inlineCode\",null,null,\"host\"]; received 
[\"inlineCode\",null,null,\"username\"]\nprotected node 14: expected 
[\"inlineCode\",null,null,\"user\"]; received 
[\"inlineCode\",null,null,\"user@'192.%'\"]"
+            },
+            {
+              "check": "shared-pr-admission",
+              "message": "{\n  \"checked\": 1,\n  \"errors\": [\n    {\n      
\"path\": 
\"i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authentication-and-authorization.md\",\n
      \"message\": \"Protected code, links, numbers, MDX or metadata differ 
from the source\"\n    }\n  ],\n  \"warnings\": [],\n  \"freshness\": {\n    
\"untranslated\": 5946,\n    \"current\": 6\n  },\n  \"reports\": [\n    {\n    
  \"kind\": \"unsupported_source_route\",\n      \"pluginId\": \ [...]
+            }
+          ]
+        },
+        {
+          "attempt": 2,
+          "issues": [
+            {
+              "check": "batch-tests-00",
+              "message": "✔ PR build scope separates content locales, shared 
inputs, and retired versions (2.410375ms)\n✔ publication changes exercise the 
complete optimized artifact on CI (0.145625ms)\n✔ A localized index admits only 
current, reviewed and in-scope native targets (0.229708ms)\n✔ sidebar audit 
discovers new native keys without a snapshot allowlist (1.1245ms)\n✔ protected 
Japanese changes reject SQL and route edits but allow translated prose 
(71.792708ms)\n✔ translated hea [...]
+            },
+            {
+              "check": "batch-tests-14",
+              "message": "✔ translation changes only selected prose, visible 
MDX fields and image alt (100.03125ms)\n✔ object front matter and keyword lists 
translate without changing route fields (3.762334ms)\n✔ generated files drop 
inherited blank lines at EOF before publication (1.949666ms)\n✔ missing units, 
modified placeholders and changed product names fail before writes 
(1.627541ms)\n✔ signed numbers and version tokens are protected as whole values 
(0.07275ms)\n✔ required terminol [...]
+            }
+          ]
+        },
+        {
+          "attempt": 3,
+          "issues": [
+            {
+              "check": "protected-content",
+              "message": "Restore protected source content:\nprotected node 
94: expected [\"inlineCode\",null,null,\"priv1\"]; received 
[\"inlineCode\",null,null,\"role1\"]\nprotected node 95: expected 
[\"inlineCode\",null,null,\"role1\"]; received 
[\"inlineCode\",null,null,\"priv1\"]\nprotected node 96: expected 
[\"inlineCode\",null,null,\"priv1\"]; received 
[\"inlineCode\",null,null,\"role3\"]"
+            }
+          ]
+        }
+      ]
+    }
+  }
+}
diff --git 
a/translations/state/ko/pages/default/current/admin-manual/auth/authentication/internal.json
 
b/translations/state/ko/pages/default/current/admin-manual/auth/authentication/internal.json
new file mode 100644
index 00000000000..5ca07df11fb
--- /dev/null
+++ 
b/translations/state/ko/pages/default/current/admin-manual/auth/authentication/internal.json
@@ -0,0 +1,62 @@
+{
+  "schemaVersion": 1,
+  "page": {
+    "pluginId": "default",
+    "version": "current",
+    "docId": "admin-manual/auth/authentication/internal",
+    "locale": "ko",
+    "sourceLocale": "en",
+    "sourcePath": "docs/admin-manual/auth/authentication/internal.md",
+    "targetPath": 
"i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authentication/internal.md",
+    "sourceCommit": "54237d9b6ae5f6f2bed49f0a660cd3d61b4b95ce",
+    "sourceHash": 
"3121dc26e0f59386c7bfacbfa7149e54def6ebc38047c72ff8972e68da5f4c40",
+    "sourceTechnicalHash": 
"d5738b96e3aa6a793cc4afd98e9085754b02242b8ca59f4af0cad9f8510e552d",
+    "targetHash": 
"48004759a5181c66d5a5c53368241009aa8c42e902ec0d0910541d26cf07e0d9",
+    "reviewStatus": "machine",
+    "ownership": "machine",
+    "translatedAt": "2026-10-18T21:32:00.453Z",
+    "glossaryVersion": "1",
+    "generation": {
+      "policy": "whole-document-v1",
+      "mode": "full",
+      "reason": "local-t09-batch",
+      "attempts": 3,
+      "acceptedWithWarnings": false,
+      "sourceHash": 
"3121dc26e0f59386c7bfacbfa7149e54def6ebc38047c72ff8972e68da5f4c40",
+      "targetHash": 
"48004759a5181c66d5a5c53368241009aa8c42e902ec0d0910541d26cf07e0d9",
+      "warnings": [],
+      "history": [
+        {
+          "attempt": 1,
+          "issues": [
+            {
+              "check": "protected-content",
+              "message": "Restore protected source content:\nnumeric values: 
expected 
[\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"1\",\"10\",\"10\",\"2\",\"2\",\"3\",\"3\",\"4\",\"8\"];
 received 
[\"0\",\"0\",\"0\",\"0\",\"0\",\"0\",\"1\",\"10\",\"10\",\"2\",\"2\",\"3\",\"3\",\"8\"]\nprotected
 node 1: expected [\"html\",null,null,\"<!-- Knowledge type: Concept + 
Configuration parameters + Troubleshooting -->\"]; received 
[\"html\",null,null,\"<!-- 지식 유형: 개념 + 구성 매개변수 + 문제 해결 -->\"]\nprotected  [...]
+            },
+            {
+              "check": "shared-pr-admission",
+              "message": "{\n  \"checked\": 1,\n  \"errors\": [\n    {\n      
\"path\": 
\"i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authentication/internal.md\",\n
      \"message\": \"Protected code, links, numbers, MDX or metadata differ 
from the source\"\n    }\n  ],\n  \"warnings\": [],\n  \"freshness\": {\n    
\"untranslated\": 5946,\n    \"current\": 6\n  },\n  \"reports\": [\n    {\n    
  \"kind\": \"unsupported_source_route\",\n      \"pluginId\": \"default\ [...]
+            }
+          ]
+        },
+        {
+          "attempt": 2,
+          "issues": [
+            {
+              "check": "protected-content",
+              "message": "Restore protected source content:\nprotected node 
19: expected [\"inlineCode\",null,null,\"user_name\"]; received 
[\"inlineCode\",null,null,\"user_identity\"]\nprotected node 20: expected 
[\"inlineCode\",null,null,\"user_identity\"]; received 
[\"inlineCode\",null,null,\"user_name\"]\nprotected node 111: expected 
[\"inlineCode\",null,null,\"user1\"]; received 
[\"inlineCode\",null,null,\"192.168.10.1\"]"
+            },
+            {
+              "check": "shared-pr-admission",
+              "message": "{\n  \"checked\": 1,\n  \"errors\": [\n    {\n      
\"path\": 
\"i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authentication/internal.md\",\n
      \"message\": \"Protected code, links, numbers, MDX or metadata differ 
from the source\"\n    }\n  ],\n  \"warnings\": [],\n  \"freshness\": {\n    
\"untranslated\": 5946,\n    \"current\": 6\n  },\n  \"reports\": [\n    {\n    
  \"kind\": \"unsupported_source_route\",\n      \"pluginId\": \"default\ [...]
+            }
+          ]
+        },
+        {
+          "attempt": 3,
+          "issues": []
+        }
+      ]
+    }
+  }
+}
diff --git 
a/translations/state/ko/pages/default/current/admin-manual/auth/authentication/ldap.json
 
b/translations/state/ko/pages/default/current/admin-manual/auth/authentication/ldap.json
new file mode 100644
index 00000000000..8d6c3b1ef7e
--- /dev/null
+++ 
b/translations/state/ko/pages/default/current/admin-manual/auth/authentication/ldap.json
@@ -0,0 +1,72 @@
+{
+  "schemaVersion": 1,
+  "page": {
+    "pluginId": "default",
+    "version": "current",
+    "docId": "admin-manual/auth/authentication/ldap",
+    "locale": "ko",
+    "sourceLocale": "en",
+    "sourcePath": "docs/admin-manual/auth/authentication/ldap.md",
+    "targetPath": 
"i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authentication/ldap.md",
+    "sourceCommit": "54237d9b6ae5f6f2bed49f0a660cd3d61b4b95ce",
+    "sourceHash": 
"a21febd795c9269f97523e47da3618890e3329a1c44c996685be8f5f0deb0b92",
+    "sourceTechnicalHash": 
"ef42811b044058a596eba61ea17834d94d756e43fb64ca04b9f4a1b34ac64bd6",
+    "targetHash": 
"b6db7817e76fbf32c6ecc5bd68c592d1aee88bc0e9b992a6ca492132912cebfa",
+    "reviewStatus": "machine",
+    "ownership": "machine",
+    "translatedAt": "2026-10-18T21:34:07.301Z",
+    "glossaryVersion": "1",
+    "generation": {
+      "policy": "whole-document-v1",
+      "mode": "full",
+      "reason": "local-t09-batch",
+      "attempts": 3,
+      "acceptedWithWarnings": true,
+      "sourceHash": 
"a21febd795c9269f97523e47da3618890e3329a1c44c996685be8f5f0deb0b92",
+      "targetHash": 
"b6db7817e76fbf32c6ecc5bd68c592d1aee88bc0e9b992a6ca492132912cebfa",
+      "warnings": [
+        {
+          "check": "protected-content",
+          "message": "Restore protected source content:\nprotected node 152: 
expected [\"code\",\"text\",null,\"dn: cn=doris_rd,ou=group,dc=domain,dc=com  
\\nobjectClass: groupOfNames  \\nmember: uid=jack,ou=aidp,dc=domain,dc=com  
\"]; received [\"code\",\"text\",null,\"dn: 
cn=doris_rd,ou=group,dc=domain,dc=com\\nobjectClass: groupOfNames\\nmember: 
uid=jack,ou=aidp,dc=domain,dc=com\"]\nprotected node 167: expected 
[\"inlineCode\",null,null,\"group\"]; received [\"inlineCode\",null,null,\ [...]
+        }
+      ],
+      "history": [
+        {
+          "attempt": 1,
+          "issues": [
+            {
+              "check": "protected-content",
+              "message": "Restore protected source content:\nprotected node 3: 
expected [\"html\",null,null,\"<!-- Knowledge type: Architecture decision 
-->\"]; received [\"html\",null,null,\"<!-- 지식 유형: 아키텍처 결정 -->\"]\nprotected 
node 4: expected [\"html\",null,null,\"<!-- Applicable scenario: Integrating 
enterprise unified identity / centralized privilege management -->\"]; received 
[\"html\",null,null,\"<!-- 적용 시나리오: 기업 통합 인증 연동 / 중앙 집중식 권한 관리 
-->\"]\nprotected node 44: expected [\"htm [...]
+            },
+            {
+              "check": "shared-pr-admission",
+              "message": "{\n  \"checked\": 1,\n  \"errors\": [\n    {\n      
\"path\": 
\"i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authentication/ldap.md\",\n
      \"message\": \"Protected code, links, numbers, MDX or metadata differ 
from the source\"\n    }\n  ],\n  \"warnings\": [],\n  \"freshness\": {\n    
\"untranslated\": 5946,\n    \"current\": 6\n  },\n  \"reports\": [\n    {\n    
  \"kind\": \"unsupported_source_route\",\n      \"pluginId\": \"default\",\n 
[...]
+            }
+          ]
+        },
+        {
+          "attempt": 2,
+          "issues": [
+            {
+              "check": "protected-content",
+              "message": "Restore protected source content:\nprotected node 
94: expected [\"inlineCode\",null,null,\"enable_ssl=true\"]; received 
[\"inlineCode\",null,null,\"fe.conf\"]\nprotected node 95: expected 
[\"inlineCode\",null,null,\"fe.conf\"]; received 
[\"inlineCode\",null,null,\"enable_ssl=true\"]\nprotected node 101: expected 
[\"inlineCode\",null,null,\"select_priv\"]; received 
[\"inlineCode\",null,null,\"information_schema\"]"
+            },
+            {
+              "check": "shared-pr-admission",
+              "message": "{\n  \"checked\": 1,\n  \"errors\": [\n    {\n      
\"path\": 
\"i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authentication/ldap.md\",\n
      \"message\": \"Protected code, links, numbers, MDX or metadata differ 
from the source\"\n    }\n  ],\n  \"warnings\": [],\n  \"freshness\": {\n    
\"untranslated\": 5946,\n    \"current\": 6\n  },\n  \"reports\": [\n    {\n    
  \"kind\": \"unsupported_source_route\",\n      \"pluginId\": \"default\",\n 
[...]
+            }
+          ]
+        },
+        {
+          "attempt": 3,
+          "issues": [
+            {
+              "check": "protected-content",
+              "message": "Restore protected source content:\nprotected node 
152: expected [\"code\",\"text\",null,\"dn: 
cn=doris_rd,ou=group,dc=domain,dc=com  \\nobjectClass: groupOfNames  \\nmember: 
uid=jack,ou=aidp,dc=domain,dc=com  \"]; received [\"code\",\"text\",null,\"dn: 
cn=doris_rd,ou=group,dc=domain,dc=com\\nobjectClass: groupOfNames\\nmember: 
uid=jack,ou=aidp,dc=domain,dc=com\"]\nprotected node 167: expected 
[\"inlineCode\",null,null,\"group\"]; received [\"inlineCode\",null,nu [...]
+            }
+          ]
+        }
+      ]
+    }
+  }
+}
diff --git 
a/translations/state/ko/pages/default/current/admin-manual/auth/authorization/custom.json
 
b/translations/state/ko/pages/default/current/admin-manual/auth/authorization/custom.json
new file mode 100644
index 00000000000..13c01213422
--- /dev/null
+++ 
b/translations/state/ko/pages/default/current/admin-manual/auth/authorization/custom.json
@@ -0,0 +1,62 @@
+{
+  "schemaVersion": 1,
+  "page": {
+    "pluginId": "default",
+    "version": "current",
+    "docId": "admin-manual/auth/authorization/custom",
+    "locale": "ko",
+    "sourceLocale": "en",
+    "sourcePath": "docs/admin-manual/auth/authorization/custom.md",
+    "targetPath": 
"i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authorization/custom.md",
+    "sourceCommit": "54237d9b6ae5f6f2bed49f0a660cd3d61b4b95ce",
+    "sourceHash": 
"a028c6e5ed15c65bb9d596e6aa87cc257dd95d80d8cbdc227ee35929b4e0aec2",
+    "sourceTechnicalHash": 
"6fc7eade9c0391901e9dd3c644f08373106b7c6fe307dcc682cc180138d9b3a5",
+    "targetHash": 
"e9ca5dbb8569e39161987f54c2f6256f6dd2b3510f88f008ae0c3b944a3c1584",
+    "reviewStatus": "machine",
+    "ownership": "machine",
+    "translatedAt": "2026-10-18T21:40:16.550Z",
+    "glossaryVersion": "1",
+    "generation": {
+      "policy": "whole-document-v1",
+      "mode": "full",
+      "reason": "local-t09-batch",
+      "attempts": 3,
+      "acceptedWithWarnings": false,
+      "sourceHash": 
"a028c6e5ed15c65bb9d596e6aa87cc257dd95d80d8cbdc227ee35929b4e0aec2",
+      "targetHash": 
"e9ca5dbb8569e39161987f54c2f6256f6dd2b3510f88f008ae0c3b944a3c1584",
+      "warnings": [],
+      "history": [
+        {
+          "attempt": 1,
+          "issues": [
+            {
+              "check": "protected-content",
+              "message": "Restore protected source content:\nprotected node 
23: expected 
[\"inlineCode\",null,null,\"Doris-Authorization-Plugin-Api-Version\"]; received 
[\"inlineCode\",null,null,\"META-INF/doris/authorization-plugin-api-version.properties\"]\nprotected
 node 24: expected 
[\"inlineCode\",null,null,\"META-INF/doris/authorization-plugin-api-version.properties\"];
 received 
[\"inlineCode\",null,null,\"Doris-Authorization-Plugin-Api-Version\"]\nprotected
 node 31: expected [\"in [...]
+            },
+            {
+              "check": "shared-pr-admission",
+              "message": "{\n  \"checked\": 1,\n  \"errors\": [\n    {\n      
\"path\": 
\"i18n/ko/docusaurus-plugin-content-docs/current/admin-manual/auth/authorization/custom.md\",\n
      \"message\": \"Protected code, links, numbers, MDX or metadata differ 
from the source\"\n    }\n  ],\n  \"warnings\": [],\n  \"freshness\": {\n    
\"untranslated\": 5946,\n    \"current\": 6\n  },\n  \"reports\": [\n    {\n    
  \"kind\": \"unsupported_source_route\",\n      \"pluginId\": \"default\",\ 
[...]
+            }
+          ]
+        },
+        {
+          "attempt": 2,
+          "issues": [
+            {
+              "check": "batch-tests-00",
+              "message": "✔ PR build scope separates content locales, shared 
inputs, and retired versions (2.410375ms)\n✔ publication changes exercise the 
complete optimized artifact on CI (0.145625ms)\n✔ A localized index admits only 
current, reviewed and in-scope native targets (0.229708ms)\n✔ sidebar audit 
discovers new native keys without a snapshot allowlist (1.1245ms)\n✔ protected 
Japanese changes reject SQL and route edits but allow translated prose 
(71.792708ms)\n✔ translated hea [...]
+            },
+            {
+              "check": "batch-tests-14",
+              "message": "✔ translation changes only selected prose, visible 
MDX fields and image alt (100.03125ms)\n✔ object front matter and keyword lists 
translate without changing route fields (3.762334ms)\n✔ generated files drop 
inherited blank lines at EOF before publication (1.949666ms)\n✔ missing units, 
modified placeholders and changed product names fail before writes 
(1.627541ms)\n✔ signed numbers and version tokens are protected as whole values 
(0.07275ms)\n✔ required terminol [...]
+            }
+          ]
+        },
+        {
+          "attempt": 3,
+          "issues": []
+        }
+      ]
+    }
+  }
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to