계정 수정
지정한 계정의 정보를 수정합니다.
필요 권한
관리자 이상의 계정으로 이용할 수 있습니다. 단, 본인 계정은 관리자 권한이 없어도 본인이 직접 수정할 수 있습니다. 이 경우 성명·이메일·직급·부서·내선번호·휴대번호·언어·첫페이지 메뉴 ID·API 키·암호를 제외한 나머지 항목(역할, 인증 모드, 접속 허용 IP, 세션 유휴 설정, 로그인 잠금 설정, MFA 설정, 테이블·계정 그룹 권한 등)은 값을 전달해도 오류 없이 무시되며 기존 값이 유지됩니다(자세한 항목은 아래 참고). 본인보다 상위 권한의 계정은 수정할 수 없습니다.
HTTP 요청
cURL 예시
curl -H "Authorization: Bearer <API_KEY>" \
-d login=jsmith \
-d role_id=2 \
-d name="John Smith" \
-d idle_behavior=lock \
-d idle_timeout=600 \
-d email="john.smith@example.com" \
-X PUT \
https://HOSTNAME/api/sonar/users/bfd00bb0-be99-4fd5-8380-166f544975fa
요청 매개변수
경로 매개변수
| 키 | 타입 | 설명 | 비고 |
|---|---|---|---|
| guid | 문자열 | 계정 식별자 | 36자 |
요청 본문 매개변수
| 키 | 필수 | 타입 | 설명 | 비고 |
|---|---|---|---|---|
| login | O | 문자열 | 로그인 계정 이름 | 최대 255자 |
| role_id | O | 32비트 정수 | 역할 ID | 1, 2, 3, 4 중 하나. 하단 참조 |
| name | O | 문자열 | 사용자 성명 | 최소 1자, 최대 50자 |
| O | 문자열 | 이메일 주소 | 최소 1자, 최대 255자 | |
| password | X | 문자열 | 암호 | 암호 규칙 준수(기본 최소 9자·최대 100자). 미지정 시 기존 암호 유지 |
| api_key | X | 문자열 | API 키 | 36자 GUID. 미지정 시 기존 API 키 유지 |
| title | X | 문자열 | 직함 | 최대 20자. 미지정 시 기존 값 삭제 |
| dept | X | 문자열 | 부서 | 최대 50자. 미지정 시 기존 값 삭제 |
| phone | X | 문자열 | 내선번호 | 최대 50자. 미지정 시 기존 값 삭제 |
| mobile | X | 문자열 | 휴대번호 | 최대 50자. 미지정 시 기존 값 삭제 |
| locale | X | 문자열 | 언어 | en 혹은 ko. 미지정 시 기존 값 삭제 |
| home_menu_id | X | 32비트 정수 | 첫페이지 메뉴 ID | 미지정 시 기존 값 삭제 |
| readable_tables | X | 문자열 목록 | 읽기 허용 테이블 목록 | 쉼표(,)로 구분. 미지정 시 기존 값 삭제 |
| user_group_guids | X | 문자열 목록 | 계정 그룹 GUID 목록 | 쉼표(,)로 구분. 미지정 시 기존 값 삭제 |
| trust_hosts | X | 문자열 목록 | 접속 허용 IP | 쉼표(,)로 구분. 미지정 시 기존 값 삭제 |
| idle_behavior | X | 문자열 | 세션 유휴 동작 | lock 또는 logout. 미지정 시 기존 값 삭제 |
| idle_timeout | X | 32비트 정수 | 세션 유휴 기준 시간 (초) | 최소 0, 최대 604800. 기본값 600 |
| password_expiration | X | 32비트 정수 | 암호 만료 기준 일자 | 시스템 기본값 -1, 무제한 0, 최소 7, 최대 3650 |
| login_lock_count | X | 32비트 정수 | 로그인 잠금 기준 횟수 | 최소 0, 최대 5. 기본값 5 |
| login_lock_interval | X | 32비트 정수 | 로그인 잠금 유지 시간 (분) | 최소 1, 최대 100000000, 기본값 10 |
| auth_mode | X | 32비트 정수 | 인증 모드 | 모든 인증 방식 시도 0, 외부 인증 전용 1. 기본값 0 |
| mfa_enabled | X | 불리언 | MFA 활성화 여부 | true 또는 false |
| mfa_type | X | 문자열 | MFA 유형 | OTP, MAIL, SMS, PASSWORD 중 하나(대문자). mfa_enabled가 true이면 필수. MAIL은 메일 서버 설정 필요 |
| old_passwd_count | X | 32비트 정수 | 암호 기억 개수 | 최소 0. 미지정 시 시스템 기본값(-1) 적용 |
역할 ID
- (1) 클러스터 관리자: 클러스터 설정을 포함한 모든 관리 권한 부여
- (2) 관리자: 테넌트에 한정된 관리 권한 부여
- (3) 사용자: 대시보드, 위젯, 데이터셋, 티켓과 같은 사용자 객체 편집과 조회성 작업 권한
- (4) 대시보드 게시: 대시보드·위젯·데이터셋·테이블을 조회하는 권한만 부여
암호 규칙
- 최소 9자 이상
- 영문, 숫자, 특수문자 혼합
- 3자 이상 연속되는 동일 문자는 허용하지 않음
위 규칙은 기본 암호 정책 기준이며, 시스템에 설정된 암호 정책에 따라 최소·최대 길이와 복잡도 요건이 달라질 수 있습니다. 자세한 내용은 암호 정책을 참고하세요.
정상 응답
{}
오류 응답
필수 매개변수가 누락된 경우
HTTP 상태 코드 400 응답
{
"error_code": "null-argument",
"error_msg": "login should be not null"
}
매개변수 값의 길이가 잘못된 경우
HTTP 상태 코드 400 응답
{
"error_code": "invalid-argument",
"error_msg": "'login' must be shorter than or equal to 255 characters."
}
로그인 이름 형식이 잘못된 경우
HTTP 상태 코드 400 응답. 로그인 이름은 영문, 숫자, 마침표(.), 밑줄(_)로 시작하고 이어서 하이픈(-)까지 사용할 수 있습니다.
{
"error_code": "invalid-argument",
"error_msg": "invalid login: user@name"
}
계정 식별자가 GUID 형식이 아닌 경우
HTTP 상태 코드 400 응답
{
"error_code": "invalid-param-type",
"error_msg": "guid should be guid type."
}
계정이 존재하지 않는 경우
HTTP 상태 코드 500 응답
{
"error_code": "illegal-state",
"error_msg": "user not found: bfd00bb0-be99-4fd5-8380-166f544975fa"
}
로그인 계정 이름이 중복된 경우
HTTP 상태 코드 500 응답
{
"error_code": "illegal-state",
"error_msg": "duplicated user login: jsmith"
}
이메일 형식이 잘못된 경우
HTTP 상태 코드 400 응답
{
"error_code": "invalid-argument",
"error_msg": "'email' parameter is not a valid email address: foo"
}
암호 인증 모드에서 암호가 누락된 경우
HTTP 상태 코드 500 응답. 기존 계정이 외부 인증 전용이었다가 auth_mode를 0으로 변경하는 경우 암호를 지정해야 합니다.
{
"error_code": "illegal-state",
"error_msg": "password should be not null"
}
암호 복잡도가 충분하지 않은 경우
암호 검증은 계정 수정 트랜잭션 내부에서 수행되어, 검증에 실패하면 원래의 오류가 아니라 트랜잭션 실패로 재포장되어 500/illegal-state로 반환되며 error_msg 앞에 cannot update user, guid=<대상 계정 GUID> / 접두사가 붙습니다. 아래는 각 조건별 예시입니다.
HTTP 상태 코드 500 응답. 암호에 로그인 계정 이름을 포함
{
"error_code": "illegal-state",
"error_msg": "cannot update user, guid=bfd00bb0-be99-4fd5-8380-166f544975fa / password contains login name"
}
HTTP 상태 코드 500 응답. 암호가 최소 길이보다 짧음
{
"error_code": "illegal-state",
"error_msg": "cannot update user, guid=bfd00bb0-be99-4fd5-8380-166f544975fa / insufficient password length (minimum 9 characters)"
}
HTTP 상태 코드 500 응답. 암호가 최대 길이를 초과함
{
"error_code": "illegal-state",
"error_msg": "cannot update user, guid=bfd00bb0-be99-4fd5-8380-166f544975fa / password should not exceed maximum length (maximum 100 characters)"
}
HTTP 상태 코드 500 응답. 암호에 필요한 문자 종류(영문, 숫자, 특수문자)가 누락됨
{
"error_code": "illegal-state",
"error_msg": "cannot update user, guid=bfd00bb0-be99-4fd5-8380-166f544975fa / password should include: alphabet, digit, special"
}
HTTP 상태 코드 500 응답. 암호에 동일 문자가 3회 이상 연속됨
{
"error_code": "illegal-state",
"error_msg": "cannot update user, guid=bfd00bb0-be99-4fd5-8380-166f544975fa / password should not repeat same 3 characters"
}
최근 사용한 암호로 다시 변경하려는 경우
HTTP 상태 코드 500 응답. old_passwd_count에 지정된 개수만큼 보관된 이전 암호와 동일한 암호로는 변경할 수 없습니다. 위와 같은 이유로 error_msg에 cannot update user, guid=<대상 계정 GUID> / 접두사가 붙습니다.
{
"error_code": "illegal-state",
"error_msg": "cannot update user, guid=bfd00bb0-be99-4fd5-8380-166f544975fa / cannot-reuse-old-password"
}
지원하지 않는 언어를 지정한 경우
HTTP 상태 코드 400 응답
{
"error_code": "invalid-argument",
"error_msg": "unsupported locale: ru"
}
정의되지 않은 인증 모드를 지정한 경우
HTTP 상태 코드 400 응답
{
"error_code": "invalid-argument",
"error_msg": "auth_mode should be 0 or 1. input is 2."
}
자기 자신의 역할을 변경 시도한 경우
HTTP 상태 코드 500 응답
{
"error_code": "illegal-state",
"error_msg": "cannot update role by yourself."
}
상위 권한의 계정 변경을 시도한 경우
HTTP 상태 코드 500 응답
{
"error_code": "illegal-state",
"error_msg": "no permission: cannot grant or modify cluster admin role by jsmith"
}
존재하지 않는 역할 ID를 지정한 경우
HTTP 상태 코드 500 응답
{
"error_code": "illegal-state",
"error_msg": "unknown role id: 5"
}
존재하지 않는 메뉴 ID를 지정한 경우
HTTP 상태 코드 500 응답
{
"error_code": "illegal-state",
"error_msg": "unknown menu id: 0"
}
존재하지 않거나 접근 불가 그룹을 지정한 경우
HTTP 상태 코드 500 응답
{
"error_code": "illegal-state",
"error_msg": "user group not found: 28c1251b-2f7c-4c58-95a1-fc4a1ead877e"
}