2015-01-07 6 views
2

localhost에서 실행중인 Firebird 데이터베이스 서비스에 새로운 사용자를 추가하는 데 문제가 있습니다. 클라이언트 라이브러리 fbclient.dll 호출 isc_add_user은 335544754 (isc_error_adding_sec_record) 및 335544849 (isc_malformed_string) 오류 코드와 함께 실패합니다. 문제는 발음 구별과 분명히 관련되어 있습니다.파이어 버드 연결 문자셋

[0] 'J'74 (0x4A)

[1] 'A':이 바이트 구조 필드 data.first_name의 콘텐츠

bool FirebirdService::AddUser(User &user) 
{ 
    ISC_STATUS status[20] = { 0 }; 
    USER_SEC_DATA data = { 0 }; 
    AnsiString server = (ip == L"localhost") || ip.IsEmpty() ? AnsiString("localhost") : AnsiString(ip); 
    AnsiString dba_user_name = app_config.AdminUser; 
    AnsiString dba_password = app_config.AdminPassword; 
    AnsiString name = user.GetLogin(); 
    AnsiString password = user.GetPassword(); 
    AnsiString first_name = user.GetFirstName(); 
    AnsiString last_name = user.GetLastName(); 

    data.sec_flags = sec_dba_user_name_spec | sec_dba_password_spec | sec_first_name_spec | sec_last_name_spec; 
    data.server = server.c_str(); 
    data.protocol = (ip == L"localhost") || ip.IsEmpty() ? sec_protocol_local : sec_protocol_tcpip; 
    data.dba_user_name = dba_user_name.c_str(); 
    data.dba_password = dba_password.c_str(); 
    data.user_name = name.c_str(); 
    data.first_name = first_name.c_str(); 
    data.last_name = last_name.c_str(); 
    data.password = password.c_str(); 
    if (isc_add_user(status, &data)) 
    { 
     return false; 
    } 

    return true; 
} 

이다 :이 소스 코드의 관련 부분 -31 (0xE1)

[2], N '(110) (0x6E)

[3]'\ 0 0 (0 × 00)

로서 S 두 번째 문자 'á'를 'a'로 변경하면 isc_add_user에 대한 호출이 성공합니다. 이런 상황을 어떻게 적절하게 처리해야합니까? utf-8 또는 utf-16으로 연결 문자 세트를 변경하는 방법이 있습니까?

답변

1

isc_add_user 함수에는 연결 문자 집합이 없으며 대부분 ASCII를 사용할 수 있습니다.

함수 isc_add_user은 InterBase 6 (1999/2000에서 Firebird가 fork 된 버전) 이후로 더 이상 사용되지 않습니다.

인터베이스 5 사용자 기능
API 함수 isc_add_user(), isc_delete_user()isc_modify_user()되지 않는 사용은 인터베이스 서비스 API의 도입에 의해 사용되지 않는 을 만들어집니다. 새로운 서비스 API 은 버전 5 사용자 구성 기능보다 일관된 서비스 메커니즘, 인터페이스 및 메시지 집합을 에 제공하기 위해 선호됩니다.

대신 서비스 관리자를 사용하는 것이 좋습니다, 또는 (인터베이스 6 API 가이드, 페이지 219) - 2.5 파이어 버드 이상 - SQL user management. 서비스 관리자에 대한 연결 문자 집합을 제어 할 수 있는지 100 % 확실하지 않으므로 대신 SQL 사용자 관리 옵션을 사용하는 것이 좋습니다.