#python #db2 #database-connection
#python #db2 #база данных-подключение
Вопрос:
Я прекрасно могу подключиться к DB2 с помощью своего приложения TOAD, однако мне нужна возможность подключения в Python для создания некоторых автоматических отчетов.
Я установил ibm_db
библиотеку и пытаюсь следовать инструкциям, но продолжаю получать ошибку SQLCODE=-30081
.
import ibm_db
conn_str = 'database=XXXX;hostname=XXXX.host.com;port=11111;protocol=tcpip;uid=user;pwd=password'
conn = ibm_db_conn = ibm_db.connect(conn_str,'','')
Обратная трассировка:
Traceback (most recent call last):
File "C:/Users/username/PycharmProjects/Report/MAIN/MAIN.py", line 4, in <module>
conn = ibm_db_conn = ibm_db.connect(conn_str,'','')
SQLCODE=-30081
Поиск -30081
не очень полезен, поскольку это может быть вызвано списком вещей.
Я где-то читал, что, возможно, ibm_db
поддерживается только на Python 3.4, и я использую Python 3.6, однако я не могу установить Python 3.4 на свой рабочий компьютер прямо сейчас, поскольку его администратор заблокирован.
Обновить:
Проверено подключение с использованием командной строки с двумя различными параметрами подключения, доступными для ibm_db.
Оба типа соединений:
import ibm_db
conn_str = 'database=XXXX;hostname=111.111.111.111;port=11111;protocol=tcpip;uid=username;pwd=password'
try:
conn = ibm_db.connect(conn_str, '', '')
except:
print("no connection:", ibm_db.conn_errormsg())
else:
print("The 1st connection was successful")
try:
conn = ibm_db.connect('XXXX', 'username', 'password')
except:
print("no connection:", ibm_db.conn_errormsg())
else:
print("The 2nd connection was successful")
Ошибка:
C:UsersusernameDesktopPython 3.6.2>python test.py
no connection: [IBM][CLI Driver] SQL30081N A communication error has been detected. Communication protocol being used: "TCP/IP". Communication API being used: "SOCKETS". Location where the error was detected: "111.111.111.111". Communica SQLCODE=-30081etecting the error: "recv". Protocol specific error code(s): "10054", "*", "0". SQLSTATE=08001
no connection: [IBM][CLI Driver] SQL30082N Security processing failed with reason "19" ("USERID DISABLED or RESTRICTED" SQLCODE=-30082001
Будем признательны за любые рекомендации.
Комментарии:
1. Правильный ли это порт? Есть какие-либо подробности об ошибке? Можете ли вы подключиться по telnet к этому хосту и порту?
2. @data_henrik Порт недействителен для публикации, но порт, используемый в коде, правильный, поскольку я могу нормально подключиться, используя мои другие инструменты запросов. Подробных ошибок нет. Эта обратная трассировка — все, что я получаю. Я не могу подключиться к telnet, поскольку это не та функция, которую мне разрешено выполнять на работе, однако я могу отлично запускать запросы, используя другие мои инструменты отчетности, такие как TOAD.
3. Какой-либо брандмауэр или параметр безопасности Db2 (например, доверенный контекст), который фильтрует на основе имени приложения или аналогичного?
4. @data_henrik насколько мне известно, нет. Я подключался к другим базам данных с использованием python, таким как Oracle, с этого же компьютера, поэтому я не верю, что они фильтруют для каждого приложения. Также я использовал power query в Excel для подключения к базам данных и другим приложениям.
5. Мой python 3.7 отлично работает с ibm_db в Windows7. Отредактируйте свой вопрос, чтобы добавить версию ibm_db, которую вы используете. В вашем обработчике исключений выведите ibm_db.conn_errormsg(), чтобы увидеть полное сообщение об ошибке.
Ответ №1:
В вашем сообщении об ошибке говорится:
Сбой обработки безопасности SQL30082N по причине «19» («ИДЕНТИФИКАТОР ПОЛЬЗОВАТЕЛЯ ОТКЛЮЧЕН или ОГРАНИЧЕН» SQLCODE =-30082001
Вот одна из хороших статей для этого сообщения:
Ошибка SQL30082N Код причины 19 или 24
https://www.ibm.com/support/pages/error-sql30082n-reason-code-19-or-24
Здесь вырезано, возможно, нам потребуется выполнить в Windows:
4.) Если вы используете Windows, пожалуйста, убедитесь, что добавлена группа, в которую пользователь не входит: «Доступ к этому компьютеру из сети». Чтобы проверить это, пожалуйста, выполните следующее:
Нажмите «Пуск»-> «Выполнить» в меню «Пуск» Windows, введите «secpol.msc», перейдите в «Локальные политики»-> «Назначения прав пользователя». Дважды щелкните «Получить доступ к этому компьютеру из сети»
Для получения дополнительной информации по этому вопросу, пожалуйста, смотрите «Связанный URL» для получения дополнительной информации
Надеюсь, это поможет.
Комментарии:
1. К сожалению, я не могу получить доступ
secpol.msc
к своему рабочему компьютеру. Моя проблема уже решена, но спасибо за информацию, это может быть полезно кому-то, у кого есть доступ к этому msc.2. Также спасибо за ваш комментарий. Я надеюсь, что это полезно. Спасибо.