Подключение Ingres от C
Мне нужно подключиться к поставляемому Ingres demodb через OpenAPI, и приложение Ingres, и C работают на Windows. Что я сделал:
- Создал "узел" в Ingres Network Utility с именем "usernode".
- созданные учетные записи пользователей в установке Ingres (с именем "пользователь", пароль "пользователь") и в управлении пользователями Windows (те же кредиты.)
- Предоставлены необходимые привилегии пользователю в базе данных.
- В коде 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.
- Вы должны создать учетную запись с паролем в ОС.
- Вы должны создать узел с тем же именем пользователя и паролем, как в ОС. Не забудьте присвоить параметру "Удаленный узел" в блоке "Информация о соединении", например, значение "localhost" (!). Это РЕАЛЬНЫЙ АДРЕС (!). Параметр "Адрес прослушивания" преобразуется во внутренний порт. Оставь это "II".
- В VDBA вы, вероятно, создали "пользовательскую" учетную запись ВНУТРИ АДМИНИСТРАТОРА. Таким образом, этот аккаунт не должен иметь никакого пароля (!). Вы можете удалить его, введя установленный флажок "Удалить старый пароль".
- Для авторизации обычно должны использоваться учетные данные процесса.
- Поэтому оставьте только параметр user::demodb co_target = "usernode::demodb".
Любые вопросы?