Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Болталка (https://forum.antichat.xyz/forumdisplay.php?f=46)
-   -   Про Oracle (https://forum.antichat.xyz/showthread.php?t=16614)

podkashey 27.03.2006 22:41

Про Oracle
 
Пишу статью первый раз, поэтому извиняйте если что-то не так.
Сразу хочется отметить, что все что будет изложено ниже, является исключительно точкой зрения автора, поэтому возможны неточности, ошибки и даже откровенный бред. ;)
Итак, только для www.antichat.ru :
Введение в СУБД Oracle
Oracle является клиент-серверной СУБД, сильно похожей на MSSQL (для тех кто знает). Так же как в MSSQL в Oracle есть свое процедурное расширение языка sql, называющееся PL-SQL – аналог T-SQL. Программирование на Pl-SQL напоминает обычное программирование, например в Pascal. Т е существует возможность написания отдельных программ, выполняющих какие-либо действия исключительно с использованием PL-SQL.
Мне не известны результаты тестов производительности, защищенности и тд. Но вроде как Oracle считается одной из самых защищенных и надежных СУБД, обладает огромным количеством настроек, тонкостей и соответственно стоит много денег. ;) . В связи с этим грамотные DBA (Database Administrator) Oracle очень высоко ценятся. Правда, чтобы получить сертификат нужны немалые деньги (http://www.certification.ru/library/.../big35.html?26 – чуть-чуть инфы).
Дальше немного слухов:
Слышал про то, что при выпуске очередной версии Oracle, компания сделала сайт на его базе и предложила его сломать всем желающим. Через месяц примерно он рухнул, но попыток взлома было очень много и компания осталась довольна результатом.
С другой стороны в каком-то релизе СУБД, была ошибка с left join, в связи с чем, любой пользователь мог получать любые права. Но ее быстро устранили
Также авторизация происходит регистронезависимая (не знаю по поводу последних версий), т е AntiChat и aNtiCHAt это один и тот же пароль или логин, что существенно увеличивает возможность подбора пароля.
Некоторые факты по Oracle8 (вышла в 1997, по новым не знаю, кому интересно – найдет, на данный момент последняя версия Oracle10):
- фиксирование транзакций, откат, блокировка записей и таблиц на update, insert – почти везде сейчас есть
- встроенная в ядро Java-машина, т е можно использовать Java, а можно PL-SQL
- управление БД, объемом до 512 ПЕТАбайт (это на 1997 год, петабайт = 1024 терабайт)
- возможность создания распределенной БД
- секционирование таблиц и индексов (горизонтальная фрагментация)
- постепенный переход к объектной СУБД – абстрактные типы данных Object и др. BLOB,CLOB и др. – видео файлы, тексты и тд. Весом до 4 Гбайт.
- политика безопасности: поддерживается срок действия пароля, блокировка аккаунта после N попыток входа и др.
- главные пользователи SYS (По умолчанию пароль change_on_install) и SYSTEM (По умолчанию пароль manager)
Сам SQL в Oracle мало отличается от MSSQL. Попробую описать какие-то особенности Оракла, конечно не все, но так сходу трудно сказать, что особенность, а что нет, так как не общался тесно с другими СУБД:
Надо отметить, что каждому пользователю Oracle соответствует определенная схема – набор объектов БД: таблицы, привилегии, вьюхи и тд. У каждой схемы только один пользователь. Для просмотра схемы текущего пользователя можно использовать запрос select * from user_objects
Выполнение команд через ; должно работать, но это не факт. Обход фильтрации кавычек можно осуществить с помощью Chr(цифры разные тут).
Конкатенация (или как там это называется) строк осуществляется при помощи ‘stroka’||’stroka2’.
Существует таблица dual. Используется чаще всего для вывода констант в запросах. Например, select to_date(‘20063112’,’yyyyddmm’) NY from dual, чтобы не писать везде в запросе длинную конструкцию тудэйт. To_date не обязательная контрукция, но желательная, так как формат даты зависит от настроек. Можно и DateOf = ’27.03.2006’ писать.
Существует метатаблица ALL_TAB_COLUMNS, в которой основные поля: owner, table_name, column_name, data_type.
Data_type может пригодится при sql-inj так как при использовании UNION требуется приводить соответствующие поля к одному типу. Null может сработать, только для строкового типа поля. Также в Oracle обязательно писать select null FROM table. Хотя в качестве table вполне сойдет dual, доступ к которой имеют все пользователи.
Вместо top в MSSQL и limit в MySQL используется конструкция where rownum = 1 или in (1,2).
Также в Оракле возможны операции типа:
insert into table1 select 'че-нить типа шелла' from dual
и
update table1 tcd1 set tcd1.id = (select sub1.id from
(select tcd.idCD, tor.id from tableO tor, tableCC tcc,tableCD tcd
where tor.idO = tcc.idO and tcc.IDCC = tcd.IDCC) sub1
where
sub1.idCD = tcd1.idCD
)
where
tcd1.idD is null
В запрос можно не вникать – скопировал его из файла, убрав имена таблиц. ;)
Т е можно передать в апдейт, делит и инсерт результат подзапроса.
Есть типы полей BFILE, в которых содержится ссылка на файл. Правда не много где применяется. Думаю можно использовать в корыстных целях. ;)))
Комментарии в Oracle обозначаются стандартно:
--однострочный
/*многострочный*/
Если интересует что-то конкретно, то спрашивайте - по возможности отвечу.

podkashey 27.03.2006 22:43

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

qBiN 27.03.2006 23:02

Цитата:

Щас посмотрел на часы - чуть не прослезился - времени ушло многовато...
Угу а ничего и не написал.
Ты уж прости но это не статья, а одна вода.

podkashey 27.03.2006 23:12

Цитата:

Угу а ничего и не написал.
Ты уж прости но это не статья, а одна вода.
ZaCo попросил написать статью про отличие Oracle от других СУБД. Я написал. Можно было конечно как обычно написать, что надо подобрать количество столбцов в скл-инж, найти тот, который выводится на экран, вывести первую запись итд. Но на одном античате я думаю таких тем с десяток. Я написал то, что такое Оракл вообще и то, чем он отличается от остального.

ZaCo 28.03.2006 00:15

2qBiN ну не соглашусь :) имхо довольно полезная статья, хоть по информации наделся чуть на большее. тем более описания оракла "вкратце" пока не видел.
2podkashey спасибо за статью, узнал кое-чего нового. надеюсь на продолжение, хотелось бы увидеть более подроное описание пунктов:
-встроенная в ядро Java-машина, т е можно использовать Java, а можно PL-SQL
-Выполнение команд через ; должно работать, но это не факт
-Null может сработать, только для строкового типа поля. Также в Oracle обязательно писать select null FROM table.
третий не очень понятен из-за двух протеворечивых предложений+) все таки мне кажется (следуя стандартам) null - специальный типа данных, содержащий пустое значение ЛЮБОГО типа. Ещё хотелось бы узнать по-больше о системный таблицах как dual и тд

podkashey 28.03.2006 00:56

Цитата:

встроенная в ядро Java-машина, т е можно использовать Java, а можно PL-SQL
Про это лучше почитать в интернете, потому что я не совсем понял, что ты имеешь в виду - пример программы на Java? ;)
При установке Оракла и создании БД под него - указываешь, реализовать ли поддержку Java Или нет. Интересный факт: на Пентиуме 4 Oracle8 глючит при установке его с поддержкой Java. Надо ставить либо пропатченную версию (трудно найти, не всегда помогает), либо еще как-то. Причем причины глюков толком не ясны и много где обсуждаются в инете. Хотя на АМД все нормально.
Цитата:

Выполнение команд через ; должно работать, но это не факт
Работать они должны на 99,9 процентов. Не правильно выразился. Тут аналогично MSSQL... на сколько я MSSQL помню...
Цитата:

Также в Oracle обязательно писать select null FROM table.
select null /* не прокатит, а select null from dual/* прокатит. В отличии от MSSQL, где можно написать Union select null/* при скл-инж и не указывать откуда брать нул.
Цитата:

Null может сработать, только для строкового типа поля.
select id from table1 union select null from dual
выдаст ошибку ORA-1790 (описание ошибок http://nkaram.h1.ru/ora_err/16-17.htm#17 )
Надо писать select id from table1 union select to_number(null) from dual
Исключение составляет, если select tut_strokovoe_pole from table1 union select null from dual.
Могут еще помочь функции to_date и to_char.
Цитата:

Ещё хотелось бы узнать по-больше о системный таблицах как dual и тд
Только сейчас обратил внимание, что забыл вставить небольшой кусок.
select * from user_tables – таблицы схемы текущего пользователя
select user from dual - текущий user
select * from V$session – текущие сессии
select * from user_objects – вся схема текущего пользователя


Время: 04:50