Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / список User's InterBase / 12 сообщений из 12, страница 1 из 1
29.09.2005, 13:02
    #33295610
Borr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список User's InterBase
Необходимо получить список пользователей (всех ользователей а не только активных в данный момент) зарегестрированных в InterBase\FireBird как это сделать с помощью Builder C++ (Inter Base) или API? Про БД FireBird security.fdb знаю, но хотелось бы через API...
...
Рейтинг: 0 / 0
29.09.2005, 13:12
    #33295659
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список User's InterBase
BorrНеобходимо получить список пользователей (всех ользователей а не только активных в данный момент) зарегестрированных в InterBase\FireBird как это сделать с помощью Builder C++ (Inter Base) или API? Про БД FireBird security.fdb знаю, но хотелось бы через API...
Через API драйвера доступа, что-ли? Курсоры ручками на низком уровне пооткрывать? Или Вы думаете что есть какое-то виндовое апи для получения какой инфы от InterBase\FireBird ?
авторПро БД FireBird security.fdb знаю, но хотелось бы через API...
Чем не устраивает?
...
Рейтинг: 0 / 0
29.09.2005, 13:50
    #33295815
Borr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список User's InterBase
API драйвера доступа - длино я написал API имея ввиду именно их а не вин API. А security.fdb не устраивает тем, что нужно указывать к ней путь, тогда как узнать где она лежит на сервере? Если у вас есть пример как это сделать с помощью API драйвера firebird :) я буду вам очень благодарен
...
Рейтинг: 0 / 0
29.09.2005, 13:52
    #33295824
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список User's InterBase
BorrAPI драйвера доступа - длино я написал API имея ввиду именно их а не вин API. А security.fdb не устраивает тем, что нужно указывать к ней путь, тогда как узнать где она лежит на сервере? Если у вас есть пример как это сделать с помощью API драйвера firebird :) я буду вам очень благодарен
Hint: тут есть форум по InterBase, Firebird, Yaffil .
...
Рейтинг: 0 / 0
29.09.2005, 14:01
    #33295871
nik_x
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список User's InterBase
страница 231 ApiGuide.pdf
В форум IBase с такими вопросами лучше не ходи,
...отправят доку читать...
...
Рейтинг: 0 / 0
29.09.2005, 18:24
    #33296809
Borr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список User's InterBase
nik_x там огромный пример с кучей case'ов я с ним уже 3-й день бьюсь мне нужно только список пользователей ты не можешь привести работающий пример??
...
Рейтинг: 0 / 0
30.09.2005, 06:53
    #33297325
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список User's InterBase
Код: 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
30.09.2005, 06:54
    #33297326
Карабас Барабас
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список User's InterBase
Это ?
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
30.09.2005, 08:58
    #33297451
Borr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список User's InterBase
Спасибо всем.
Я работаю с 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
30.09.2005, 09:30
    #33297522
nik_x
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список User's InterBase
Сильно не вникал, но сходу:
*service_name = "service_mgr" <- для локального хоста должно быть так
*service_name = "host:service_mgr" <- для удаленного - так

Если разобраться с API интерес все-таки есть, пиши на мыло, какой-нибудь примерчик сооружу...
...
Рейтинг: 0 / 0
30.09.2005, 11:23
    #33297922
v6y
v6y
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список User's InterBase
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
30.09.2005, 11:28
    #33297938
Borr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
список User's InterBase
Большое спасибо я постараюсь разобраться
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / список User's InterBase / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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