Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Список пользователей FireBird-а через API / 13 сообщений из 13, страница 1 из 1
14.12.2015, 18:22
    #39127647
Dark Man
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список пользователей FireBird-а через API
Вводные данные. Нужен список зарегистрированных пользователей FB. Получать нужно СТРОГО через API. Другие варианты, во избежание, прошу не предлагать.

тему http://www.sql.ru/forum/221254/spisok-user-s-interbase, читал. Она и взята за основу, но ("НО" ведь есть ВСЕГДА). Работать нужно через учётную запись Любого другого пользователя с назначенной ролью RDB$ADMIN, этот момент тоже не обсуждается.

через командную строку, с клиентского компа(Windows 7) это:
1 - gsec -database remotehost:/opt/firebird/security2.fdb -user "USERADMIN" -password "AdminUser" -role "RDB$ADMIN" -display
2 - fbsvcmgr remotehost:service_mgr -user "USERADMIN" -password "AdminUser" -action_display_user -sql_role_name "RDB$ADMIN"
прекрасно работает, НО(опять же ОНО тут) на сервере, что под linux-ом, эти инструкции НЕ РАБОТАЮТ(версия сервера и gsec/fbsvcmgr (из 2.5-х), со слов админа - последние, конфигурация, вроде бы - classic server), выводят информацию только о USERADMINE и всё.
это - первая проблема. откуда и растёт вторая, ибо хотел реализовать через работу с API.

Вторая - из озвученной выше темы, взят CPP-шник, но он работает из под SYSDBA, что делать не разрешается. Нужно это реализовать через USERADMIN-а .. я понимаю что надо добавить инструкцию isc_spb_sql_role_name .. но увы - ни курение исходников gsec/fbsvcmgr, ни поиск в инетернете, ни метод обезьяны, мне не помог, причины .. "родился баобабом! И буду баобабом тыщу лет, пока помру" (с) ..

1 - добавление isc_spb_sql_role_name в набор параметров isc_service_attach никакого результата не даёт, что естественно, его там и не должно быть.
2 - добавление isc_spb_sql_role_name(перед isc_action_svc_display_user) в набор параметров isc_service_start() приводит к
"Cannot attach to services manager
-Services functionality will be supported in a later version of the product"
Опять же понятно - не туда параметр добавлен.

вот собственно, как-то так.

Пинать можете больно и долго(бо есть за что), и даже по лицу. Но, прошу, помогите старому идиоту решить эту проблему. Может что ещё покурить, специфическое?! Или просто подскажите как сделать(знаю что "молодец", но тратить столько времени (сколько не скажу - стыдно :)), сколько потратил я - не приемлемо). В добавок ко всему, в С++ я вообще никак - на импровизации не способен тем более.

Продублирую исходник тут, что-бы не пришлось лезть в старую тему.

Код: 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.
// get_ib_users.cpp
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ibase.h>
#pragma comment(lib, "fbclient_bor.lib");

struct userinfo {
 char username[50];
 char rolename[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 *ADMIN_ROLE = "RDB$ADMIN";

char request_buffer[] = {
  isc_info_svc_get_users
  };

char request[1024];
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[1024];
 char *spb = spb_buffer;
 unsigned short spb_length;
 unsigned long options;

 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;

 *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_sql_role_name:
	 store_svc_char_info(p,info.rolename,sizeof(info.rolename));    
	 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("Rolename: %s\n",list.list[i].rolename);
   puts("------------------------");
 }
}

int main() {
 if (svc_attach("USERADMIN", "AdminUser", "remote_host:service_mgr")) return -1;
 list.count=0; list.size=1000; 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
14.12.2015, 18:29
    #39127657
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список пользователей FireBird-а через API
Dark ManНО(опять же ОНО тут) на сервере, что под linux-ом, эти инструкции НЕ
РАБОТАЮТ(версия сервера и gsec/fbsvcmgr (из 2.5-х), со слов админа - последние,
конфигурация, вроде бы - classic server), выводят информацию только о USERADMINE и всё.

Это значит, что пользователю USERADMINE в базе security2.fdb не выдано разрешение на
использование роли RDB$ADMIN. Административная проблема, программно не решается.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.12.2015, 09:04
    #39128059
Dark Man
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список пользователей FireBird-а через API
Dimitry Sibiryakov, Пардон что не уточнил. Выдано. В противном случае и gsec/fbsvcmgr не выдают список всех пользователей пользователю без назначенной роли, даже если указать роль подключения.
...
Рейтинг: 0 / 0
15.12.2015, 12:29
    #39128333
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список пользователей FireBird-а через API
Dark Manэти инструкции НЕ РАБОТАЮТ(версия сервера и gsec/fbsvcmgr (из 2.5-х), со
слов админа - последние, конфигурация, вроде бы - classic server), выводят информацию
только о USERADMINE
и всё.
Dark ManВ противном случае и gsec/fbsvcmgr не выдают список всех
пользователей

Ну ты эта... Определись что ли...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.12.2015, 12:43
    #39128364
Dark Man
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список пользователей FireBird-а через API
Dimitry SibiryakovDark Manэти инструкции НЕ РАБОТАЮТ(версия сервера и gsec/fbsvcmgr (из 2.5-х), со
слов админа - последние, конфигурация, вроде бы - classic server), выводят информацию
только о USERADMINE
и всё.
Dark ManВ противном случае и gsec/fbsvcmgr не выдают список всех
пользователей

Ну ты эта... Определись что ли...


Я то определённее некуда.
Резюмирую. Если подключаться gsec/fbsvcmgr к серверу с моей локальной машины, то всё прекрасно работает. А вот если тоже самое делать на самом сервере, то увы - не работает. Роль RDB$ADMIN, как можно понять, назначена.
...
Рейтинг: 0 / 0
15.12.2015, 12:53
    #39128386
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список пользователей FireBird-а через API
Dark ManЕсли подключаться gsec/fbsvcmgr к серверу с моей локальной машины, то всё
прекрасно работает. А вот если тоже самое делать на самом сервере, то увы - не работает.
Роль RDB$ADMIN, как можно понять, назначена.
Значит либо это разные сервера, либо командные строки разные. Чудес не бывает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.12.2015, 13:43
    #39128495
Dark Man
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список пользователей FireBird-а через API
Dimitry Sibiryakov, Я и сам в чудеса не верю :) Но, сервер таки один. Из предположений осталось только то, что на сервере gsec/fbsvcmgr "не той конструкции" (с) что крайне маловероятно(я думаю). Собственно почему и начал колупать API. Админ или не может, или не хочет помочь :)
...
Рейтинг: 0 / 0
15.12.2015, 13:52
    #39128510
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список пользователей FireBird-а через API
Dark ManАдмин или не может, или не хочет помочь :)
Потребуй SSH доступ на сервер, а потом забей на админа.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.12.2015, 13:55
    #39128517
Dark Man
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список пользователей FireBird-а через API
Dimitry Sibiryakov, Тут опять же бяда - всё необходимо делать именно на сервере. :) в общем надо решить проблему только озвученными способами ибо других у меня просто нет :)
ЗЫ. Я конечно ещё сам попробую поднять под ubuntu огнептицу и покрутить настройки, вдруг чего нарою. Но что-то сомнительно мне это.
...
Рейтинг: 0 / 0
15.12.2015, 14:01
    #39128527
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список пользователей FireBird-а через API
Dark ManТут опять же бяда - всё необходимо делать именно на сервере.
Повторяю медленно: потребуй себе SSH доступ к серверу и добейся чтобы fbsvcmgr работал.
Без этого тебе никакое API не поможет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.12.2015, 14:05
    #39128535
Dark Man
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список пользователей FireBird-а через API
Dimitry SibiryakovDark ManТут опять же бяда - всё необходимо делать именно на сервере.
Повторяю медленно: потребуй себе SSH доступ к серверу и добейся чтобы fbsvcmgr работал.
Без этого тебе никакое API не поможет.

Да я собственно с первого раза понял :) Попробую, спасибо за совет.
...
Рейтинг: 0 / 0
15.12.2015, 14:19
    #39128567
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список пользователей FireBird-а через API
PS: Ставлю на то, что "админ" забыл экранировать доллар в командной строке.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.12.2015, 14:25
    #39128577
Dark Man
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Список пользователей FireBird-а через API
Dimitry SibiryakovPS: Ставлю на то, что "админ" забыл экранировать доллар в командной строке.

:) есть такая вероятность. Опять же спасибо за подсказку, в первую очередь проверю это.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Список пользователей FireBird-а через API / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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