• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Lotus и MS SQL (jdbc)

  • Автор темы Klido
  • Дата начала
K

Klido

Итак, по рекомендациям в топике ниже решено подключиться к sql2005 через JDBC. Из-под LD 8.5.1

Вроде всё просто, качаем jdbc-драйвер, кладем его куда-то, прописываем путь в classpath переменную среды, пишем коротенький тестовый агентик для подключения вроде

<!--shcode--><pre><code class='java'>import lotus.domino.*;
import java.sql.*;

public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String connectionUrl = "jdbc:sqlserver://ИмяСервера:Порт;user=Юзер;password=Пароль;";
Connection con = DriverManager.getConnection(connectionUrl);

}
catch (Exception e) {
e.printStackTrace();
}
}
}[/CODE]
и вместо ожидаемого положительного результата получаем (и на клиенте под XP, и на серваке под линухом...):
java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
at java.lang.Class.forNameImpl(Native Method)
at java.lang.Class.forName(Class.java:136)
at JavaAgent.NotesMain(JavaAgent.java:11)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)
Внимательное чтение доки и гугление по этому поводу наводят на мысль, что у кучи народа похожие траблы с подключением класса, даже не под лотусом. Воркэраунд наводит на воспоминания, что как-то джава лотусиная была требовательна к местоположению джаров. В переменную JavaUserClasses путь к папке с драйвером указан...

Есть ли какие-то ньюансы ещё, чтобы помочь подключить этот класс?
 

vincent_vega

Green Team
02.04.2005
169
1
BIT
0
Для лотуса не надо прописывать класспасс. Просто скопируйте джарку в каталог Domino\jvm\lib\ext\ или Notes\jvm\lib\ext\ после копирования перегрузите клинт лотуса или сервак. Ошибка говорит как раз о том что не найден класс драйвера
 
S

susinmn

м-д-а
скока не говори - юзайте jdbc...
но "продожали есть кактус" ;)
lmike, а есть пример использования jdbc? Если есть покажи, пожалуйста)

Драйвер jdbc в базу куда запихивать?)
Как этот драйвер использовать в скрипте?
(import com.sybase.jdbc.*;
import java.sql.*:(

Вот скрипт подключения, только не знаю он рабочий или нет)
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='java'> public BasicJDBCDemo()
{
try
{
Class.forName("com.mysql.jdbc.Driver").newInstance();
String url = "jdbc:mysql://localhost/coffeebreak";
conn = DriverManager.getConnection(url, "username", "password");
doTests();
conn.close();
}
catch (ClassNotFoundException ex) {System.err.println(ex.getMessage());}
catch (IllegalAccessException ex) {System.err.println(ex.getMessage());}
catch (InstantiationException ex) {System.err.println(ex.getMessage());}
catch (SQLException ex) {System.err.println(ex.getMessage());}
}

Вот пример запроса

private void doSelectTest()
{
System.out.println("[OUTPUT FROM SELECT]");
String query = "SELECT COF_NAME, PRICE FROM COFFEES";
try
{
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(query);
while (rs.next())
{
String s = rs.getString("COF_NAME");
float n = rs.getFloat("PRICE");
System.out.println(s + " " + n);
}
}
catch (SQLException ex)
{
System.err.println(ex.getMessage());
}
}[/CODE]Мне не понятно что за ex.?)

Очень хочется разобраться, помогите)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177

читайте там about this database
и говорите спасибо Сергею ;)
ex - переменная - там перехватываются исключения типа SQLException
 
S

susinmn

Не понял, как драйвер присоединять к агенту)

Если это вот так, то где хратится драйвер в базе?
как его вообще к базе прикрутить?(
Class.forName(doc.getItemValueString("JDBCDriver"));
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
вы хэлп к базе читали?
код смотрели?
а ещё гугл есть ;)
у MSSQL:
com.microsoft.jdbc.sqlserver.SQLServerDriver

и вот

у оракла:
oracle.jdbc.driver.OracleDriver
 
S

susinmn

вы хэлп к базе читали?
код смотрели?
...

*Для соединения с SQLite использовался jdbc-драйвер sqlitejdbc-v053.jar (http://www.zentus.com/sqlitejdbc/)
Драйвер присоединен к агенту. *


Я хочу, что бы этот драйвер лежал где-то в бд и что бы у любого пользователя работал connection без предварительной установки драйвера. такое возможно?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
я уже отвечал на подобные вопросы...
драйвер положить либо как в хэлпе, либо в jvm/lib/ext/
цепляете в базу драйвера (в к-л док), проверяете, при старте, присут их в нужном каталоге
если нет - кладёте туда и просите перезапустить Нотус (никакой установки!)
каталог jvm:
System.getProperty("java.home")
 
M

morpheus

Првиет всем, та же ошибка

тестирую под клиентом 7.0.2
sqljdbc.jar и sqljdbc4.jar - лежат по "D:\notes\jvm\lib\ext" , Java.Home = D:\notes\jvm

что может быть

уже и комп перегружал и все равно при запуске локального агента

java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
путь к драйверу com.microsoft.sqlserver.jdbc.SQLServerDriver
версия драйвера:
после скачивания страницы/сохранения и открытия/принятия условий


из notes\jvm\lib\ext убрать все "лишние" бибиотеки, кот. предоставляют com.microsoft.sqlserver.jdbc.SQLServerDriver
иначе класс может не загрузиться
 
M

morpheus

двигаемся дальше, следущая ошибка
java.sql.SQLException: No suitable driver


<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код агента</div></div><div class="sp-body"><div class="sp-content">
Код:
import lotus.domino.*;
import java.sql.*;

public class JavaAgent extends AgentBase {


public void NotesMain() {

try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();


// Get connection 
DriverManager.registerDriver(new	com.microsoft.sqlserver.jdbc.SQLServerDriver());
Connection connection = DriverManager.getConnection(
"jdbc:microsoft:sqlserver://MySQL:1433","USER","PASS");
if (connection != null) { System.out.print("Enter the data: "); }


} catch(Exception e) {
e.printStackTrace();
}
}
}


java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getConnection(DriverManager.java:579)
at java.sql.DriverManager.getConnection(DriverManager.java:189)
at JavaAgent.NotesMain(JavaAgent.java:16)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
"jdbc:microsoft:sqlserver://MySQL:1433","USER","PASS"
мне кажется странным такой стринг соединения :)

Добавлено: и на линухах "это" возможно не заработает (там dll, в xa каталоге)

Добавлено: у них в хелпе такие варианты:
Connect to the default database on the local computer by using a user name and password:

jdbc:sqlserver://localhost;user=MyUserName;password=*****;
Note: Although the previous example uses a username and password in the connection string, if you are running your application on a Windows operating system, you should use integrated security as it is more secure. For more information, see the Connecting with Integrated Authentication section later in this topic.

Connect to the default database on the local computer by using integrated authentication:

jdbc:sqlserver://localhost;integratedSecurity=true;

Connect to a named database on a remote server:

jdbc:sqlserver://localhost;databaseName=AdventureWorks;integratedSecurity=true;

Connect on the default port to the remote server:

jdbc:sqlserver://localhost:1433;databaseName=AdventureWorks;integratedSecurity=true;

Connect by specifying a customized application name:

jdbc:sqlserver://localhost;databaseName=AdventureWorks;integratedSecurity=true;applicationName=My
App;
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
есть альтернативные драйвера




и стринги соединения

до кучи, искалка jdbc
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
а порт дефолтный?
и притом - не ясно как ОЛЕ соединяется
он могет через пайпы (есть такой тип коннектов), а не по TCP/IP (думаю по другому java коннект не пройдет, хотя... х.з. МС)
в таком расладе - надо разрешить коннектиться к серваку по TCP
 
M

morpheus

lmike
порт дефолтный

всё решилось строкой
Connection connection = DriverManager.getConnection( "jdbc:sqlserver://INSCOMP\\inscomsrv;integratedSecurity=false;","user","pass");

на сколько я понимаю означает не использовать безопасность винды
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 933
609
BIT
177
на сколько я понимаю означает не использовать безопасность винды
почти..., но только это больше касается ввода имени и пароля :)
иначе используется виндовый акк
Connect to the default database on the local computer by using integrated authentication:
jdbc:sqlserver://localhost;integratedSecurity=true;
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Всем привет!
Вот пытался выполнить

В результате вот такая ошибка
java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
at java.lang.Class.forName(Class.java:136)
at Connect.getConnection(Unknown Source)
at Connect.displayDbProperties(Unknown Source)
at Connect.main(Unknown Source)

в чем прикол?
 
M

morpheus

NickProstoNick
Бы ла такая же ошибка, неизвесный хост ( не может достучаться до сервера )
 
N

nvyush

NickProstoNick
java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver
Тема начинается этой ошибкой, да и в руководстве по установке драйвера она указывается в первых абзацах. Рецепт лечения:
link removed
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!