powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / список User's InterBase
12 сообщений из 12, страница 1 из 1
список User's InterBase
    #33295610
Borr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Необходимо получить список пользователей (всех ользователей а не только активных в данный момент) зарегестрированных в InterBase\FireBird как это сделать с помощью Builder C++ (Inter Base) или API? Про БД FireBird security.fdb знаю, но хотелось бы через API...
...
Рейтинг: 0 / 0
список User's InterBase
    #33295659
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BorrНеобходимо получить список пользователей (всех ользователей а не только активных в данный момент) зарегестрированных в InterBase\FireBird как это сделать с помощью Builder C++ (Inter Base) или API? Про БД FireBird security.fdb знаю, но хотелось бы через API...
Через API драйвера доступа, что-ли? Курсоры ручками на низком уровне пооткрывать? Или Вы думаете что есть какое-то виндовое апи для получения какой инфы от InterBase\FireBird ?
авторПро БД FireBird security.fdb знаю, но хотелось бы через API...
Чем не устраивает?
...
Рейтинг: 0 / 0
список User's InterBase
    #33295815
Borr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
API драйвера доступа - длино я написал API имея ввиду именно их а не вин API. А security.fdb не устраивает тем, что нужно указывать к ней путь, тогда как узнать где она лежит на сервере? Если у вас есть пример как это сделать с помощью API драйвера firebird :) я буду вам очень благодарен
...
Рейтинг: 0 / 0
список User's InterBase
    #33295824
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BorrAPI драйвера доступа - длино я написал API имея ввиду именно их а не вин API. А security.fdb не устраивает тем, что нужно указывать к ней путь, тогда как узнать где она лежит на сервере? Если у вас есть пример как это сделать с помощью API драйвера firebird :) я буду вам очень благодарен
Hint: тут есть форум по InterBase, Firebird, Yaffil .
...
Рейтинг: 0 / 0
список User's InterBase
    #33295871
nik_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
страница 231 ApiGuide.pdf
В форум IBase с такими вопросами лучше не ходи,
...отправят доку читать...
...
Рейтинг: 0 / 0
список User's InterBase
    #33296809
Borr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nik_x там огромный пример с кучей case'ов я с ним уже 3-й день бьюсь мне нужно только список пользователей ты не можешь привести работающий пример??
...
Рейтинг: 0 / 0
список User's InterBase
    #33297325
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class PASCALIMPLEMENTATION TIBSecurityService : public TIBControlAndQueryService 
{
	typedef TIBControlAndQueryService inherited;
	
private:
	int FUserID;
	int FGroupID;
	AnsiString FFirstName;
	AnsiString FUserName;
	AnsiString FPassword;
............................

	void __fastcall DisplayUsers(void);
...
Рейтинг: 0 / 0
список User's InterBase
    #33297326
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
список User's InterBase
    #33297451
Borr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем.
Я работаю с IB впервые, нашел, не без вашей помощи, у билдера есть компонент входящий в его поставку Inter Base Admin там элемент IBSecurityService, с помощью его все решаеться просто
[CODE]
IBSecurity->Active = true;
IBSecurity->DisplayUsers();
for(int i=0;i<IBSecurity->UserInfoCount;i++)
SG->Cells[2][i+1] = IBSecurity->UserInfo ->UserName;
[\CODE]
Жаль но с API я так и не разобрался -- не хочетработать и все и слишком сложно для меня :(
[CODE]
char *user = "SYSDBA",
*password = "masterkey", /* see security tip below */
*service_name = "localhost";
ISC_STATUS status[20];
isc_svc_handle *service_handle = NULL;
char spb_buffer[128], *spb = spb_buffer;
unsigned short spb_length;
*spb++ = isc_spb_version;
*spb++ = isc_spb_current_version;
*spb++ = isc_spb_user_name;
*spb++ = strlen(user);
strcpy(spb, user);
spb += strlen(user);
*spb++ = isc_spb_password;
*spb++ = strlen(password);
strcpy(spb, password);
spb += strlen(password);
spb_length = spb - spb_buffer;
/*if (isc_service_attach(status, 0, service_name,&service_handle, spb_length, spb_buffer))
{
isc_print_status(status);
exit(1);
}*/
int k=0;
//char spb_buffer[6], *spb = spb_buffer;
char request_buffer[] = {
isc_info_svc_server_version,
isc_info_svc_implementation,
isc_info_svc_get_licensed_users,
isc_info_svc_user_dbpath,
isc_info_svc_get_env,
isc_info_svc_get_env_lock,
isc_info_svc_get_env_msg,
isc_info_svc_get_license,
isc_info_svc_svr_db_info,
isc_info_svc_version,
isc_info_svc_get_config};
char result_buffer[1024], *p = result_buffer;
*spb++ = isc_info_svc_timeout;
ADD_SPB_NUMERIC(spb, 60); /* 1 minute timeout */
/*if (isc_service_query (status,&service_handle,\
NULL,\
spb - spb_buffer, spb_buffer,\
sizeof(request_buffer), request_buffer,\
sizeof(result_buffer), result_buffer))
{
isc_print_status(status);
isc_service_detach(status, &svc_handle);
return;
}*/
do
{
while (*p != isc_info_flag_end)
{
ISC_USHORT len, loop;
*p++=isc_spb_sec_username;
len = (ISC_USHORT);
isc_vax_integer(p, sizeof(ISC_USHORT));
p += sizeof (ISC_USHORT);
strncpy (buf, p, len);
p += len;
buffer[len] = 0;
SG->Cells[1][k] = buffer;
k++;
//printf ("Username: %s\n", buffer);
loop -= (len + sizeof(ISC_USHORT)+1);
break;
} while (*p != isc_info_flag_end);
break;
}
}
} while (*p);
//isc_service_detach(status, &service_handle);
}
[\CODE]
...
Рейтинг: 0 / 0
список User's InterBase
    #33297522
nik_x
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сильно не вникал, но сходу:
*service_name = "service_mgr" <- для локального хоста должно быть так
*service_name = "host:service_mgr" <- для удаленного - так

Если разобраться с API интерес все-таки есть, пиши на мыло, какой-нибудь примерчик сооружу...
...
Рейтинг: 0 / 0
список User's InterBase
    #33297922
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Borr
Жаль но с API я так и не разобрался -- не хочетработать и все и слишком сложно для меня :(


Нашел в своих загашниках. Ниже приведенное чудо работало для IB 6.0 и всех FB, правда под Линуксом.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
// get_ib_users.cpp
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ibase.h>

struct userinfo {
 char username[ 50 ];
 char firstname[ 50 ];
 char middlename[ 50 ];
 char lastname[ 50 ];
 ISC_ULONG userid;
 ISC_ULONG groupid;
};

struct users_list {
 int count;
 int size;
 userinfo *list;
} list;

ISC_STATUS status[ 20 ];
isc_svc_handle service_handle=NULL;

char request_buffer[] = {
  isc_info_svc_get_users
};

char request[ 300 ];
static char buffer[ 1024 ];

void insert_user(userinfo *info) {
 if (!info) return;
 if (list.count>=list.size) {
  list.size+= 10 ;
  list.list=(userinfo *) realloc(list.list,list.size*sizeof(userinfo));
 }
 list.list[list.count++]=*info;
}

void store_svc_char_info(char *&from, char *to, int size) {
 ISC_USHORT len=isc_vax_integer(from,sizeof(ISC_SHORT));
 from+=sizeof(ISC_SHORT);
 if (len>size) len=size;
 while(len--) *to++=*from++;
 *to= 0 ;
}

int svc_attach(char *user, char *password, char *service_name) {
 char spb_buffer[ 128 ];
 char *spb = spb_buffer;
 unsigned short spb_length;

 if (!user || !password || !service_name) return - 1 ;

 *spb++ = isc_spb_version;
 *spb++ = isc_spb_current_version;
 *spb++ = isc_spb_user_name;
 *spb++ = strlen(user);
 strcpy(spb, user);
 spb += strlen(user);
 *spb++ = isc_spb_password;
 *spb++ = strlen(password);
 strcpy(spb, password);
 spb += strlen(password);
 spb_length = spb - spb_buffer;
 
 if (isc_service_attach(status,  0 , service_name, &service_handle, spb_length, spb_buffer))  {
  isc_print_status(status);
  return - 1 ;
 }
 
 return  0 ;
}

int svc_detach() {
 if (isc_service_detach(status, &service_handle)) {
  isc_print_status(status);
  return - 1 ;
 }
 return  0 ;
}


int svc_get_users() {
 struct userinfo info;
 char *p = request;

 unsigned long options;

 *p++ = isc_action_svc_display_user;

 if (isc_service_start(status, &service_handle, NULL, p - request,request)) {
  isc_print_status(status);
  return - 1 ;
 }
 
 if (isc_service_query(status, 
    &service_handle, NULL,  0 ,NULL,
     sizeof(request_buffer), request_buffer,
    sizeof(buffer), buffer   
 )) {
    isc_print_status(status);
    return - 1 ;
 }

 p=buffer+ 1 +sizeof(ISC_SHORT);
 while (*p!=isc_info_end) {
   
   switch (*p++) {
    case isc_spb_sec_username:
	 store_svc_char_info(p,info.username,sizeof(info.username));    
	 break;
    case isc_spb_sec_firstname:
	 store_svc_char_info(p,info.firstname,sizeof(info.firstname));    
	 break;
    case isc_spb_sec_middlename:
	 store_svc_char_info(p,info.middlename,sizeof(info.middlename));    
	 break;
    case isc_spb_sec_lastname:
	 store_svc_char_info(p,info.lastname,sizeof(info.lastname));        
	 break;
    case isc_spb_sec_groupid:
	 info.groupid=isc_vax_integer(p,sizeof(ISC_ULONG));
	 p+=sizeof(ISC_ULONG);
	 insert_user(&info);
	 break;
    case isc_spb_sec_userid:
	 info.userid=isc_vax_integer(p,sizeof(ISC_ULONG));
	 p+=sizeof(ISC_ULONG);
	 break;
   }
 }
 
 return  0 ;
}

void display_users() {
 int i;
 printf("Got %u users\n",list.count);
 for(i= 0 ; i<list.count; i++) {
   printf("Username: %s\n",list.list[i].username);
   printf("Firstname: %s\n",list.list[i].firstname);
   printf("Middlename: %s\n",list.list[i].middlename);
   printf("Lastname: %s\n",list.list[i].lastname);
   printf("User id: %u\n",list.list[i].userid);
   printf("Group id: %u\n",list.list[i].groupid);
   puts("------------------------");
 }
}

int main() {
 if (svc_attach("sysdba","masterkey","localhost:service_mgr")) return - 1 ;
 list.count= 0 ; list.size= 10 ; list.list=(userinfo *) malloc(sizeof(userinfo)*list.size);
 if (svc_get_users()) return - 1 ;
 if (svc_detach()) return - 1 ;
 display_users();
 free(list.list);
 return  0 ;
}

...
Рейтинг: 0 / 0
список User's InterBase
    #33297938
Borr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо я постараюсь разобраться
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / список User's InterBase
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]