• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Lotus и MS SQL

  • Автор темы IsAvailable
  • Дата начала
I

IsAvailable

Возникла необходимость подключиться к MS SQL Server'у из Лотуса.
Про LSX почитал - в общем-то понятно как пользоваться. Ничего сложного не наблюдается. Как читать и писать данные теоретически понятно. Единственно столкнулся с одной проблемой:
Чтобы воспользоваться методом ConnectTo у ODBCConnection мне необходимо указать в качестве первого параметра - некий источник данных... Вот тут и загвоздка.
1. Нужно сначала скачать драйвер ODBC? (откуда его можно скачать? Что-то поиск по Сети не рулит =( Описалово есть всякое, а вот линков на скачку - не видать. Он платный? Из дистра MS SQL его можно взять?)
2. Через менеджер драйвера добавить нужный источник данных?

Ну со вторым вопросом, думаю, смогу разобраться (как миниммум методом тыка :())), а вот с первым вопросом помогите, пожалуйста.
 
E

Elena Nefedova

Драйвер скачивать не нужно
Control Panel -> Administrative Tools -> Data Sources (ODBC)
Вкладка System DSN (лучше, чем User DSN)
Кнопка Add
В конце списка выбрать драйвер для SQL Server
Далее специфическая настройка
 
I

IsAvailable

О! Как оказывается, всё просто было )))))
Elena Nefedova, огромное спасибо за помощь!
 
G

Gor

Здравствуйте.

Интересует вот какой вопрос.

Как в определённую таблицу определённой базы MSSQL записать данные из лотусового документа?

Хотябы куда копать, где почитать, как вообще сделать лучше связь MSSQL и Lotus?
Если у кого нибудь найдутся какие либо исходники буду очень благодарен)

Решение с кодом для ODBC уехало сюда.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
Сергей выкладывал код на конект к базам
есть еще DECS и LSX
что подойдет для вашей задачи - решать Вам
 
O

osmor

Здравствуйте.

Интересует вот какой вопрос.

Как в определённую таблицу определённой базы MSSQL записать данные из лотусового документа?

Хотябы куда копать, где почитать, как вообще сделать лучше связь MSSQL и Lotus?
Если у кого нибудь найдутся какие либо исходники буду очень благодарен)
Как вариант использовать ADODB
Вот кусок кода который запихивает пользователей из DD в таблицу на MS SQL.
если пользователь с таким NotesGUID уже есть в таблице MS SQL, то обновляет данные, если нет, то добавляет нового.
строка подключения к SQL серверу формируется на Postopen из профильного документа
Код:
	Set doc = db.GetProfileDocument("frmSetupServer")
strConnect = "Provider=sqloledb;Data Source=" & doc.SQLServIP(0) & ";Initial Catalog=" & doc.SQLServBDName(0) & ";User Id=" & doc.SQLServLogin(0) & ";Password=" & doc.SQLServPass(0)

Документация по ADO есть на сайте MS
Выбрал с корнем из рабочей базы, так что могут быть оборванные хвосты
<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='vb'> Dim ws As NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim docCurrent As NotesDocument
Dim doc As NotesDocument
Dim db As NotesDatabase
Dim view As NotesView
Dim strGUID As String
Dim con
Dim rst
Dim session As New NotesSession
Dim nameUser As String
Dim books As Variant
books = session.AddressBooks
Forall b In books
If b.ispublicAddressbook Then Set db = b
End Forall
Set con = CreateObject("ADODB.Connection")
con.ConnectionString = strConnect
con.open
Call db.Open("","")
Set rst = CreateObject("ADODB.Recordset")
Set view = db.GetView("People")
Set doc = view.GetFirstDocument
While Not(doc Is Nothing)
nameUser = session.CreateName(doc.GetItemValue("FullName")(0)).common
strGuid = Cstr(doc.UniversalID)
rst.open "select count(*) from dbo.tblLotusUser where NotesGUID = '" & strGuid & "'", con
If Isnull(rst.fields(0).value ) Or rst.fields(0).value = 0 Then
con.execute "INSERT INTO dbo.tblLotusUser (NameLotusUser, FullAccess, NotesGUID) Values ('" & nameUser & "' , 0 ,'" & strGuid & "')"
Else

con.execute "UPDATE dbo.tblLotusUser Set NameLotusUser = '" & nameUser & "' WHERE NotesGUID = '" & strGuid &"'"
End If
rst.close
Set doc = view.GetNextDocument(doc)
Wend
con.close[/CODE]
 
K

Klido

Несколько лет назад, когда не удалось настроить нормальный коннект из-под линуха к ms sql (проблемы с кодировкой возвращаемых запросами данных) проблема была решена через domino on win2003 (благо такой оказался неподалёку) odbc и т.д...

Ноыве задачи, новая организация, domino по-прежнему на линухе, задача коннекта к ms sql 2005 возникла опять... и целый отдел админов линуха и реляционки заверяют меня в том, что ничего не изменилось и не выйдет нормально подключаться в такой конфигурации... Выхода видится 2: ставить domino на win рядышком и использовать старую схему (организация против), либо пытаться запускать линуховый скрипт (реально perl или-что-там-ещё) на сервере, который будут принимать параметры, выполнять действия в реляционке и возвращать результаты в файло, которое обрабатывать.

В связи с чем вопросы (перед тем как проводить эксперименты): случалось ли вам связываться из-под линухового лотуса с ms sql или случалось использовать скрипты под линуксом из-под domino? Особенно смущают всякие ограничения по командам ОС и темы вроде
"Shell: Window styles are ignored." - что именно игнорируется? Стоит ли заморачиваться или проще на win лотус поднять для коннекта?
 
K

Klido

вот там и проблема с кодировками кириллицы - была, но утверждают, что до сих пор...
мне хотелось бы знать, что есть место, где реально работает норм - тогда я напрягу адептов серьёзнее подойти к решению вопроса :)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
не понял суть проблемы....
JDBC получает резалт - перекодировать сложно?
что такое скрипты под линухом на домине?
всё что может линух - можно запустить из домины
 
K

Klido

JDBC получает резалт - перекодировать сложно?
нет никаког ожелания ещё и тут что-то делать..
хочется банального и обычного: источник, логин, пароль, вызов сторед-процедуры, получение результатов.... не хватало тут где-то ещё перекодировкой заниматься.. на дворе всё-таки почти 2010 год :)
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
2010 г. - а в какой кодировке драйвер (писаный МС) отдаёт строки?

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

занятие перекодировкрй - 1на строка, если это сложней инсталяции на винду домины, то я не знаю как прокоментировать :)
 

vincent_vega

Green Team
02.04.2005
169
1
BIT
0
хочется банального и обычного: источник, логин, пароль, вызов сторед-процедуры, получение результатов..

Как раз на JDBC так и получается :) Хотелось бы поподробней узнать про проблему с кодировкой. Какие кодовые таблицы использует МС СКЛ? и при каком моменте возникает проблема с кодировкой?
 
K

Klido

и при каком моменте возникает проблема с кодировкой?

есть как минимум 3 подразделения: админы ОС (линуха), реляционщики и лотусисты, все не пересекаются в возможностях, доступах и пр.
Админы настраивают на линухе коннект к реляционке и сообщают имя, логи, пароль лотусистам. Те применяют любимый способ - в результатах кракозяблы. Админы мучают локали, таблицы символов, хз что ещё - нет результата. Про "кодовые таблицы использует МС СКЛ" я ничего пока не знаю, хочется верить, что коллеги достаточно компетентны и помнят про них :)

ОК, я понял, надо самому закопаться в это дело и понять раз и навсегда в чем траблы... И пошто у них тут MS SQL, а не оракл на линухе? там всё прекрасно :)
 

vincent_vega

Green Team
02.04.2005
169
1
BIT
0
Если использовать JDBC никаких админов не надо (по крайней мере с начала) :)
1. Качаете драйвер ( )
2. Пишите на java агент. Драйвер можно вставить сначала в агент (потом лучше выложить его в каталог на сервере домино)
3. Конект к базе логин и пароль указываете в агенте. Пример:
Код:
String connectionUrl = "jdbc:sqlserver://localhost:1433;" +
"databaseName=AdventureWorks;user=MyUserName;password=*****;";
Connection con = DriverManager.getConnection(connectionUrl);

Собственно все что нужно от админов это логин и пароль.
 
K

Klido

все что нужно от админов
зато всё что нужно от лотусистов - переписывать заново код, который норм работает который год... и это вместо банально подключиться и получить всё, что необходимо...
В общем почти понятно, что с шашкой и без бубна не пройти... И подключается вроде норм, а вот дальше...
Вот тест агента - почти хелп (в реляционке 1 таблица и 2 поля с русскими именами "поле1" и "поле2")
<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">
Код:
Sub Initialize
Dim con As New ODBCConnection
Dim msg As String
If Not con.ConnectTo("olapMSSQL","sa","123") Then
Print "Cannot connect to ....."
Exit Sub
End If
If con.IsConnected Then
Print "подключено"
Print con.DataSourceName
tables = con.ListTables("olapMSSQL")
Print "SQL contains the following tables:" & Chr(10)
For n% = Lbound(tables) To Ubound(tables)
Print tables(n%)
Next
fields = con.ListFields("Table1")
Print "Table contains the following fields:" & Chr(10)
For n% = Lbound(fields) To Ubound(fields)
Print fields(n%)
Next
con.Disconnect
End If
End Sub
печальный результат... что интересно, строк хоть и пустых должно быть 2 для полей, а видим одну....
<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">
04/08/2009 15:37:32 AMgr: Start executing agent 'odbctest'
04/08/2009 15:37:32 Agent Manager: Agent printing: подключено
04/08/2009 15:37:32 Agent Manager: Agent printing: olapMSSQL
04/08/2009 15:37:32 Agent Manager: Agent printing: SQL contains the following tables:
04/08/2009 15:37:32 Agent Manager: Agent printing:
04/08/2009 15:37:32 Agent Manager: Agent printing: Table contains the following fields:
04/08/2009 15:37:32 Agent Manager: Agent printing:
04/08/2009 15:37:32 AMgr: Agent 'odbctest' completed execution
добавив extendederror получаем после коннекта (якобы) при получении таблиц
04/08/2009 16:05:09 Agent Manager: Agent printing: [unixODBC][FreeTDS][SQL Server] Unable to connect to data source
ну и как это назвать, если isConnected даёт true, а реально - ничего подобного?
 
K

Klido

дальше - хуже... при попытке напрямую выполнить запрос за выборку из таблицы, где поля именованы на русском и значения на русском такой вот еррор..
Agent Manager: Agent printing: [unixODBC][FreeTDS][SQL Server]Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier
грустно...
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
215
пынятно ;)
выж грили про JDBC (вернее мы, а вы подтвердили)
а оказалось юниксовый ОДБЦ, да ещё и в LS....
 

vincent_vega

Green Team
02.04.2005
169
1
BIT
0
ИМХО, лучше 1 раз по нормальному переписать и больше не заморачиватсья на зависимости от ОС.
 
K

Klido

оказалось юниксовый ОДБЦ, да ещё и в LS....
про него изначально речь и шла, а вы как раз порекомендовали JDBC, я лишь сказал, что в своё время пробовали всё, что смогли и были проблемы, которые обошлись только виндовым лотусом и ODBC...
как бы что в инете, что вообще тема, что ODBC работает из-под линуха в ms sql, но... похоже до сих пор не с кириллицей (юникодом?).
ОК, будем искать... или на джаве писать ;)
 
Мы в соцсетях:

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