SQLCODE =-30081 не удается подключиться к базе данных IBM DB2 с помощью python

#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. Также спасибо за ваш комментарий. Я надеюсь, что это полезно. Спасибо.