Подключение Ingres от C

Мне нужно подключиться к поставляемому Ingres demodb через OpenAPI, и приложение Ingres, и C работают на Windows. Что я сделал:

  1. Создал "узел" в Ingres Network Utility с именем "usernode".
  2. созданные учетные записи пользователей в установке Ingres (с именем "пользователь", пароль "пользователь") и в управлении пользователями Windows (те же кредиты.)
  3. Предоставлены необходимые привилегии пользователю в базе данных.
  4. В коде C я вызвал функцию IIapi_connect() со структурой IIAPI_CONNPARM. Используемые члены: co_target = "usernode::demodb", co_username = "user", co_password = "user"

Но вызов IIapi_connect() возвращает ошибку:

"Пользователь предоставил vnode как часть имени базы данных (vnode::dbname), но информация о соединении для этого vnode отсутствует. Введите информацию о соединении для vnode с помощью NETUTIL."

Кто-нибудь знает что-то странное понятие "узел"?

Какие минимальные шаги (при администрировании базы данных и передаче параметров функции) необходимы для успешного подключения?

2 ответа

Решение

Вы получаете следующую ошибку, потому что ваш идентификатор пользователя не был добавлен на сервер.

"Пользователь предоставил vnode как часть имени базы данных (vnode::dbname), но информация о соединении для этого vnode отсутствует. Введите информацию о соединении для vnode с помощью NETUTIL."

Я предполагаю, что передаваемый идентификатор пользователя определен в определении виртуального узла (он же vnode), и именно этот пользователь должен быть добавлен в список пользователей на сервере. Следующее добавит пользователя из командной строки, замените USERNAME на имя пользователя, которого вы хотите добавить:

Для Windows:

echo "create user USERNAME\g" | sql iidbdb

Для UNIX/Linux/OS X:

sql iidbdb <<EOSQL
create user USERNAME\g
\q

В качестве альтернативы вы можете использовать динамический vnode в вашем соединении, так что co_target определяет всю информацию о соединении (включая информацию о пользователе):

@server,protocol,listen_address[user,password]::database

например

@localhost,tcp_ip,II[ingres,secret]::iidbdb

Если вы хотите увидеть работающий пример кода OpenAPI для Ingres, взгляните на расширение Ingres PECL.

  1. Вы должны создать учетную запись с паролем в ОС.
  2. Вы должны создать узел с тем же именем пользователя и паролем, как в ОС. Не забудьте присвоить параметру "Удаленный узел" в блоке "Информация о соединении", например, значение "localhost" (!). Это РЕАЛЬНЫЙ АДРЕС (!). Параметр "Адрес прослушивания" преобразуется во внутренний порт. Оставь это "II".
  3. В VDBA вы, вероятно, создали "пользовательскую" учетную запись ВНУТРИ АДМИНИСТРАТОРА. Таким образом, этот аккаунт не должен иметь никакого пароля (!). Вы можете удалить его, введя установленный флажок "Удалить старый пароль".
  4. Для авторизации обычно должны использоваться учетные данные процесса.
  5. Поэтому оставьте только параметр user::demodb co_target = "usernode::demodb".

Любые вопросы?

Другие вопросы по тегам