Перейти к содержимому
Калькуляторы

АСР "Дельта" Новая биллинговая система

Безопасность тут: http://billingdelta.ru/lite/faq.html#18

Аудит тут: http://billingdelta.ru/lite/faq.html#19

Заодно расскажите, как как второе можно сделать на MySQL ;-)

Кто Вам сказал, что я про мускль отзываюсь не как о поделке?

 

http://archives.postgresql.org/pgsql-novic...06/msg00001.php оно?

 

А вот тут на TCL: http://www.alberton.info/postgresql_table_audit.html

В качестве укрепления позиции единственных Дартанянов среди пи**расов Вам помогло бы.

 

http://pgfoundry.org/projects/tablelog/ - модуль к постгресу. Правда, использует триггер.

 

Мало? В гугле забанили, а livesearch на запрос postgresql стабильно отправляет на сайт одной-известной-корпорации?

 

И Вы так и не ответили на вопрос про оракел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если в абонентском отделе скопится очередь и руководство узнает, что это из-за тормозов биллинга при формировании расшифровки МТР нас просто порвут.

Какая очередь в абонетском отделе за расшифровкой? У вас вообще интерфейс клиента есть в биллинге? Чтобы он дома смотрел свои детализации, сколько ему влезет? На скриншотах что-то ни одного нет окошка кабинета клиента. Или ему тоже предлагается взгромоздить Access (denied), odbc и прочие "классные функциональные штуки"?

Раз уж пошла такая пьянка ;-)

 

http://stat.astelecom.ru

 

Логин: alexandr

Пароль: 20051981

 

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

 

Советую посмотреть скорость, с которой программа показывает трафик и историю соединений аккаунта. Выборка данных осуществляется из динамического массива: один день -- одна таблица. Объем записей за сутки превышает 1 млн для агрегированного net flow и 150000 для accounting. Про наш трафик и количество абонентов я писал уже, повторяться не буду. Про нагрузку тоже писал.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Безопасность тут: http://billingdelta.ru/lite/faq.html#18

Аудит тут: http://billingdelta.ru/lite/faq.html#19

Заодно расскажите, как как второе можно сделать на MySQL ;-)

Кто Вам сказал, что я про мускль отзываюсь не как о поделке?

 

http://archives.postgresql.org/pgsql-novic...06/msg00001.php оно?

 

А вот тут на TCL: http://www.alberton.info/postgresql_table_audit.html

В качестве укрепления позиции единственных Дартанянов среди пи**расов Вам помогло бы.

 

http://pgfoundry.org/projects/tablelog/ - модуль к постгресу. Правда, использует триггер.

 

Мало? В гугле забанили, а livesearch на запрос postgresql стабильно отправляет на сайт одной-известной-корпорации?

 

И Вы так и не ответили на вопрос про оракел.

Эх, блин.

Был у нас тут постгресс. с 2003 по 2006 год. До сих пор мучаемся когда пытаемся оттуда вытащить старые звоночки за те периоды. Большего г*^& в жизни видеть не приходилось. Причина: МЕДЛЕННЫЙ. Все остальное насчет него мало интересно.

 

Персонально вам:

Милейший, вы флеймите. Я говорил не про возможности СУБД а биллинга, представленного на рынок. Исходный вопрос остается в силе.

 

По поводу оракла отвечаю. Дорого. Все тоже самое (более удобно, через GUI) можно делать в MsSQL. Кроме того, T-SQL гораздо более читабельный и логичный по сравнению с PL. На sql.ru эта шняга многократно обсуждалась многоми, лень жевать это еще раз.

 

 

 

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

[ http://pgfoundry.org/projects/tablelog/ - модуль к постгресу. Правда, использует триггер. ]

 

Сначала не заметил, затем прочитал -- оборжался ;-)

 

Модуль да еще и треггер надо... И диктора Центрального телевидения за кадром ;-)))

Вот с помощью этой простой весчи сделан аудит на требуемые таблицы БД.

 

 

============================= Cut ========================================================

CREATE PROCEDURE sp_create_audit_trigger @tabname nvarchar (50), @mode int AS

 

/* АСР "ДЕЛЬТА"

Процедура создает триггер аудита на заданную таблицу базы данных. Данные выводятся в таблицу audit текущей БД.

После выполнения процедуры триггер начинает работать немедленно. Обязательное условие: первое поле в аудируемой

таблице должно быть ключевым! Таблица audit также должна быть доступна в базе данных и на нее на INSERT должны

быть открыты права _всем_ пользователям.

 

Параметры:

@tabname Имя таблицы, на которую надо установить аудит.

@mode Режим:

1 - Создать (обновить) триггер.

3 - Удалить триггер.

*/

 

DECLARE @action_type int, @obj_id bigint, @obj_name varchar(32), @hostname varchar(32), @a nvarchar (512), @id bigint, @col nvarchar (32),

@xtype int, @stype nvarchar (32), @ltype int, @p int, @strSQL nvarchar (512), @debug_sql int,

 

/* тело триггера и переменные */

@open_trigger_sql nvarchar (4000),

@close_trigger_sql nvarchar (4000),

@close_trigger_sql1 nvarchar (4000),

@close_trigger_sql2 nvarchar (4000),

@ins_variable_sql nvarchar (4000),

@del_variable_sql nvarchar (4000),

@variable1_sql nvarchar (4000),

@variable2_sql nvarchar (4000),

@first_column_sql nvarchar (32),

 

/* UPDATE */

@insert1_sql nvarchar (4000),

@insert2_sql nvarchar (4000),

@insert3_sql nvarchar (4000),

@insert4_sql nvarchar (4000),

 

/* INSERT */

@insert5_sql nvarchar (4000),

@insert6_sql nvarchar (4000),

@insert7_sql nvarchar (4000),

@insert8_sql nvarchar (4000),

 

/* DELETE */

@insert9_sql nvarchar (4000),

@insert10_sql nvarchar (4000),

@insert11_sql nvarchar (4000),

@insert12_sql nvarchar (4000)

 

/* 1- вывести SQL скрипт на экран 0 - выполнить скрипт */

SET @debug_sql = 0

 

/* cчетчик столбцов таблицы */

SET @p = 0

 

SET @ins_variable_sql = '' SET @del_variable_sql = '' SET @variable1_sql = '' SET @variable2_sql = ''

SET @insert1_sql = '' SET @insert2_sql = '' SET @insert3_sql = '' SET @insert4_sql = '' SET @insert5_sql = '' SET @insert6_sql = ''

SET @insert7_sql = '' SET @insert8_sql = '' SET @insert9_sql = '' SET @insert10_sql = '' SET @insert11_sql = '' SET @insert12_sql = ''

 

/* получение ID объекта базы данных */

SET @strSQL = NULL SELECT @id = id, @strSQL = name FROM sysobjects WHERE name = @tabname

 

IF @strSQL = NULL BEGIN

RAISERROR ( '

 

Не найдена исходная таблица в базе данных MAIN!

', 16, 1)

RETURN

END

 

DECLARE CurFt CURSOR FOR SELECT name, xtype, length FROM syscolumns WHERE id = @id order by colid

OPEN CurFt

WHILE 1 = 1 BEGIN

FETCH FROM CurFt INTO @col, @xtype, @ltype

IF @@fetch_status=-1

BREAK;

IF @@fetch_status=-2

CONTINUE;

 

IF @p > 0 BEGIN

SET @ins_variable_sql = @ins_variable_sql + ', '

SET @del_variable_sql = @del_variable_sql + ', '

SET @variable1_sql = @variable1_sql + ', '

SET @variable2_sql = @variable2_sql + ', '

END ELSE SET @first_column_sql = @col /* первое поле таблицы должно быть ключевое поле! */

 

/* получение типа данных поля исходной таблицы */

SELECT @stype = CASE name

WHEN 'sysname' THEN 'nvarchar (' + LTRIM(RTRIM(STR(@ltype))) + ')'

WHEN 'varchar' THEN 'nvarchar (' + LTRIM(RTRIM(STR(@ltype))) + ')'

WHEN 'char' THEN 'nvarchar (' + LTRIM(RTRIM(STR(@ltype))) + ')'

ELSE name END FROM systypes WHERE xtype = @xtype

 

/* формирование SQL для переменных */

SET @ins_variable_sql = @ins_variable_sql + '@fi' + LTRIM(RTRIM(STR(@p))) + ' ' + @stype

SET @del_variable_sql = @del_variable_sql + '@fd' + LTRIM(RTRIM(STR(@p))) + ' ' + @stype

SET @variable1_sql = @variable1_sql + '@fd' + LTRIM(RTRIM(STR(@p)))

SET @variable2_sql = @variable2_sql + '@fi' + LTRIM(RTRIM(STR(@p)))

 

 

/* формирование SQL для записи в таблицу аудит - UPDATE */

IF @p BETWEEN 0 AND 10 SET @insert1_sql = @insert1_sql + 'IF (@fi' + LTRIM(RTRIM(STR(@p))) + ' IS NOT NULL AND @fd' + LTRIM(RTRIM(STR(@p))) + ' IS NULL)

OR (@fi' + LTRIM(RTRIM(STR(@p))) + ' IS NULL AND @fd' + LTRIM(RTRIM(STR(@p))) + ' IS NOT NULL)

OR (@fi' + LTRIM(RTRIM(STR(@p))) + ' != @fd' + LTRIM(RTRIM(STR(@p))) + ')

INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new)

VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fi0, ' + CHAR (39) + @col + CHAR (39) + ' ,

@tran_id, @action_type, @fd' + LTRIM(RTRIM(STR(@p))) + ', @fi' + LTRIM(RTRIM(STR(@p))) + ' )

'

 

IF @p BETWEEN 11 AND 22 SET @insert2_sql = @insert2_sql + 'IF (@fi' + LTRIM(RTRIM(STR(@p))) + ' IS NOT NULL AND @fd' + LTRIM(RTRIM(STR(@p))) + ' IS NULL)

OR (@fi' + LTRIM(RTRIM(STR(@p))) + ' IS NULL AND @fd' + LTRIM(RTRIM(STR(@p))) + ' IS NOT NULL)

OR (@fi' + LTRIM(RTRIM(STR(@p))) + ' != @fd' + LTRIM(RTRIM(STR(@p))) + ')

INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new)

VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fi0, ' + CHAR (39) + @col + CHAR (39) + ' ,

@tran_id, @action_type, @fd' + LTRIM(RTRIM(STR(@p))) + ', @fi' + LTRIM(RTRIM(STR(@p))) + ' )

'

 

IF @p BETWEEN 23 AND 33 SET @insert3_sql = @insert3_sql + 'IF (@fi' + LTRIM(RTRIM(STR(@p))) + ' IS NOT NULL AND @fd' + LTRIM(RTRIM(STR(@p))) + ' IS NULL)

OR (@fi' + LTRIM(RTRIM(STR(@p))) + ' IS NULL AND @fd' + LTRIM(RTRIM(STR(@p))) + ' IS NOT NULL)

OR (@fi' + LTRIM(RTRIM(STR(@p))) + ' != @fd' + LTRIM(RTRIM(STR(@p))) + ')

INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new)

VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fi0, ' + CHAR (39) + @col + CHAR (39) + ' ,

@tran_id, @action_type, @fd' + LTRIM(RTRIM(STR(@p))) + ', @fi' + LTRIM(RTRIM(STR(@p))) + ' )

'

 

IF @p BETWEEN 34 AND 48 SET @insert4_sql = @insert4_sql + ' IF (@fi' + LTRIM(RTRIM(STR(@p))) + ' IS NOT NULL AND @fd' + LTRIM(RTRIM(STR(@p))) + ' IS NULL)

OR (@fi' + LTRIM(RTRIM(STR(@p))) + ' IS NULL AND @fd' + LTRIM(RTRIM(STR(@p))) + ' IS NOT NULL)

OR (@fi' + LTRIM(RTRIM(STR(@p))) + ' != @fd' + LTRIM(RTRIM(STR(@p))) + ')

INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new)

VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fi0, ' + CHAR (39) + @col + CHAR (39) + ' ,

@tran_id, @action_type, @fd' + LTRIM(RTRIM(STR(@p))) + ', @fi' + LTRIM(RTRIM(STR(@p))) + ' )

'

 

/* формирование SQL для записи в таблицу аудит - INSERT */

IF @p BETWEEN 0 AND 10 SET @insert5_sql = @insert5_sql + '

INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new)

VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fd0, ' + CHAR (39) + @col + CHAR (39) + ' ,

@tran_id, @action_type, NULL, @fi' + LTRIM(RTRIM(STR(@p))) + ' )

'

 

IF @p BETWEEN 11 AND 22 SET @insert6_sql = @insert6_sql + '

INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new)

VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fd0, ' + CHAR (39) + @col + CHAR (39) + ' ,

@tran_id, @action_type, NULL, @fi' + LTRIM(RTRIM(STR(@p))) + ' )

'

 

IF @p BETWEEN 23 AND 33 SET @insert7_sql = @insert7_sql + '

INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new)

VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fd0, ' + CHAR (39) + @col + CHAR (39) + ' ,

@tran_id, @action_type, NULL, @fi' + LTRIM(RTRIM(STR(@p))) + ' )

'

 

IF @p BETWEEN 37 AND 48 SET @insert8_sql = @insert8_sql + '

INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new)

VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fd0, ' + CHAR (39) + @col + CHAR (39) + ' ,

@tran_id, @action_type, NULL, @fi' + LTRIM(RTRIM(STR(@p))) + ' )

'

 

/* формирование SQL для записи в таблицу аудит - DELETE */

IF @p BETWEEN 0 AND 10 SET @insert9_sql = @insert9_sql + '

INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new)

VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fd0, ' + CHAR (39) + @col + CHAR (39) + ' ,

@tran_id, @action_type, @fd' + LTRIM(RTRIM(STR(@p))) + ', NULL )

'

 

IF @p BETWEEN 11 AND 24 SET @insert10_sql = @insert10_sql + '

INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new)

VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fd0, ' + CHAR (39) + @col + CHAR (39) + ' ,

@tran_id, @action_type, @fd' + LTRIM(RTRIM(STR(@p))) + ', NULL )

'

 

IF @p BETWEEN 25 AND 36 SET @insert11_sql = @insert11_sql + '

INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new)

VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fd0, ' + CHAR (39) + @col + CHAR (39) + ' ,

@tran_id, @action_type, @fd' + LTRIM(RTRIM(STR(@p))) + ', NULL )

'

 

IF @p BETWEEN 37 AND 48 SET @insert12_sql = @insert12_sql + '

INSERT INTO audit (username, hostname, data, tabname, rec_id, colname, tran_id, action_type, old, new)

VALUES (SYSTEM_USER, HOST_NAME(), GETDATE(), ' + CHAR(39) + @tabname + CHAR(39) + ', @fd0, ' + CHAR (39) + @col + CHAR (39) + ' ,

@tran_id, @action_type, @fd' + LTRIM(RTRIM(STR(@p))) + ', NULL )

'

 

SET @p = @p + 1

END

DEALLOCATE CurFt

 

/* SQL скрипт триггера */

SET @open_trigger_sql = ' CREATE TRIGGER audit_' + LTRIM(RTRIM(@tabname)) + ' ON ' + LTRIM(RTRIM(@tabname)) + '

FOR INSERT, UPDATE, DELETE

AS

BEGIN

SET NOCOUNT ON

DECLARE @action_type int, @tran_id bigint

DECLARE ' + @ins_variable_sql + ', ' + @del_variable_sql + '

 

SELECT TOP 1 @tran_id = req_transactionID FROM master..syslockinfo (nolock)

WHERE req_spid = @@spid and req_transactionID <> 0

 

IF EXISTS(SELECT * FROM INSERTED) BEGIN

IF EXISTS(SELECT * FROM DELETED)

SET @action_type = 2 /* UPDATE */

ELSE SET @action_type = 1 /* INSERT */

END

ELSE SET @action_type = 3 /* DELETE */

 

IF @action_type = 2 BEGIN

DECLARE CurUpd_' + @tabname + ' CURSOR FOR SELECT * FROM deleted D, inserted I WHERE D.' + LTRIM(RTRIM(@first_column_sql)) +

' = I.' + LTRIM(RTRIM(@first_column_sql)) + '

OPEN CurUpd_' + @tabname + '

WHILE 1 = 1 BEGIN

FETCH FROM CurUpd_' + @tabname + ' INTO ' + @variable1_sql + ', ' + @variable2_sql + '

IF @@fetch_status=-1

BREAK;

IF @@fetch_status=-2

CONTINUE;

'

SET @close_trigger_sql = '

END

CLOSE CurUpd_' + @tabname + '

DEALLOCATE CurUpd_' + @tabname + '

END

IF @action_type = 1 BEGIN

DECLARE CurIns_' + @tabname + ' CURSOR FOR SELECT * FROM inserted

OPEN CurIns_' + @tabname + '

WHILE 1 = 1 BEGIN

FETCH FROM CurIns_' + @tabname + ' INTO ' + @variable2_sql + '

IF @@fetch_status=-1

BREAK;

IF @@fetch_status=-2

CONTINUE;

'

SET @close_trigger_sql1 = '

END

CLOSE CurIns_' + @tabname + '

DEALLOCATE CurIns_' + @tabname + '

END

IF @action_type = 3 BEGIN

DECLARE CurDel_' + @tabname + ' CURSOR FOR SELECT * FROM deleted

OPEN CurDel_' + @tabname + '

WHILE 1 = 1 BEGIN

FETCH FROM CurDel_' + @tabname + ' INTO ' + @variable1_sql + '

IF @@fetch_status=-1

BREAK;

IF @@fetch_status=-2

CONTINUE;

'

SET @close_trigger_sql2 = '

END

CLOSE CurDel_' + @tabname + '

DEALLOCATE CurDel_' + @tabname + '

END

END

 

 

'

 

/* Удаление тариггера */

SET @obj_name = NULL

SELECT @obj_name = name FROM sysobjects WHERE name = 'audit_'+ @tabname

IF @obj_name != NULL BEGIN

SET @strSQL = 'DROP TRIGGER audit_' + @tabname

EXEC (@strSQL)

END

 

/* Создание тариггера */

IF @mode IN (1, 2) AND @debug_sql = 0 EXEC (@open_trigger_sql + @insert1_sql + @insert2_sql + @insert3_sql + @insert4_sql + @close_trigger_sql + @insert5_sql + @insert6_sql + @insert7_sql + @insert8_sql + @close_trigger_sql1 + @insert9_sql + @insert10_sql + @insert11_sql + @insert12_sql + @close_trigger_sql2)

 

IF @debug_sql != 0 BEGIN

PRINT @open_trigger_sql

PRINT @insert1_sql

PRINT @insert2_sql

PRINT @insert3_sql

PRINT @insert4_sql

PRINT @close_trigger_sql

PRINT @insert5_sql

PRINT @insert6_sql

PRINT @insert7_sql

PRINT @insert8_sql

PRINT @close_trigger_sql1

PRINT @insert9_sql

PRINT @insert10_sql

PRINT @insert11_sql

PRINT @insert12_sql

PRINT @close_trigger_sql2

END

GO

== eof ==

 

А тут результат работы: http://billingdelta.ru/lite/faq.html#19

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Раз уж пошла такая пьянка ;-)

 

http://stat.astelecom.ru

 

Логин: alexandr

Пароль: 20051981

 

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

 

Советую посмотреть скорость, с которой программа показывает трафик и историю соединений аккаунта. Выборка данных осуществляется из динамического массива: один день -- одна таблица. Объем записей за сутки превышает 1 млн для агрегированного net flow и 150000 для accounting. Про наш трафик и количество абонентов я писал уже, повторяться не буду. Про нагрузку тоже писал.

Да, личный кабинет 5 баллов по информативности, у ланбиллинга кабинет хоть и красивше, но чтобы объяснить абоненту как смотреть свою статистику - проще застрелиться. А тут все ок, ну кроме дизайна конечно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это я захожу как `sa`, а могу этого не делать, зайти под своей учеткой. Учетная запись пользователя в системе всегда соответсвует логину на sql сервере. Все операции пользователя с данными всегда выполняются от имени этого пользователя что обеспечивает максимальную защиту нанных т.к. она реализована средствами SQL сервера и позволяет вести полный аудит всех интересных нам транзакций чтобы в последствии точно знать, кто из пользователей накосячил и дать по башке.

.....

После осмысления материала просьба показать пальцем на биллинг где есть что-то подобное - хотя-бы на зачаточном уровне.

Заодно расскажите, как как второе можно сделать на MySQL ;-)

А накой оно нужно? Если интерфейс админа переписать на php - можно в логи писать кто куда заходил и что делал, а заодно избавиться от акцеса, как от пороховой бочки, которая рано или поздно все завалит. И от винды с сервером sql.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

http://stat.astelecom.ru/cgi-bin/stat.tcl?...;FMonth=07'

 

Обещаю дальше не копать :))) Для любителей.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

token1=alexandr&password=20051981

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это я захожу как `sa`, а могу этого не делать, зайти под своей учеткой. Учетная запись пользователя в системе всегда соответсвует логину на sql сервере. Все операции пользователя с данными всегда выполняются от имени этого пользователя что обеспечивает максимальную защиту нанных т.к. она реализована средствами SQL сервера и позволяет вести полный аудит всех интересных нам транзакций чтобы в последствии точно знать, кто из пользователей накосячил и дать по башке.

.....

После осмысления материала просьба показать пальцем на биллинг где есть что-то подобное - хотя-бы на зачаточном уровне.

Заодно расскажите, как как второе можно сделать на MySQL ;-)

А накой оно нужно? Если интерфейс админа переписать на php - можно в логи писать кто куда заходил и что делал, а заодно избавиться от акцеса, как от пороховой бочки, которая рано или поздно все завалит. И от винды с сервером sql.

 

U Интерфейс не должен вообще никуда ничего писать, и уж тем более, отвечать за безопасность! Такими мерьезными вещами должна заниматься только СУБД. Хотя-бы потому, что скрипт на php (php сам по себе весь дырявый в плане безопасности о чем можно судить по количеству взломанных сайтов) может каким-то образом пропатчить злоумышленник и тогда уж точно ничего никуда писаться не будет. Альтернатива php -- tcl/tk 8.4 Да, весь личный кабинет -- это всего навсего 1 файлик размером около 32 кбайт и 1 гиф с баннером вверху.

 

Верите-нет, пока не взрывается. Причем у нас часть юзеров сидит под Access 2k а часть под A97.

Тоже касается MS SQL. Уж чего с ним тут только не было -- и диски дохли, и инвертора горели а он живой назло всему ;-)

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

disappointed, а можно я попробую? :)

 

http://stat.astelecom.ru/cgi-bin/stat.tcl?...show_null_rec=1

 

http ://stat.astelecom.ru/cgi-bin/stat.tcl?token1=alexandr&password=20051981 оО

 

http://stat.astelecom.ru/cgi-bin/stat.tcl?...21+13%3A08%3A08

 

http://stat.astelecom.ru/cgi-bin/stat.tcl?...show_null_rec=1

oO

 

http://stat.astelecom.ru/cgi-bin/stat.tcl?...show_null_rec=1

 

http://stat.astelecom.ru/cgi-bin/stat.tcl?...show_null_rec=1

 

http://stat.astelecom.ru/cgi-bin/stat.tcl?..._null_rec=pesda

 

ну вот как-то так

ну помойму ошибки указал верно, будет над чем поработать.

 

ВСЕ ВХОДЯЩИЕ ПЕРЕМЕННЫЕ ДОЛЖНЫ БЫТЬ ОТФИЛЬТРОВАНЫ ДО ТОГО, КАК ПОПАДУТ В ОБРАБОТКУ

 

Вопрос: а у вас в биллинге есть такие фишки, как автоматическое управление оборудованием? А то я такого нигде не видел, только на своём

Изменено пользователем terrible

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

token1=alexandr&password=20051981

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

 

Согласен. Однако у них в договоре прописано, что всю ответсвенность они несут сами. В крайнем случае, мы найдем, кто стырил пароль т.к. MAC тоже пишется radius log. Есть еще защита такая: мы авторизуем еще и по сочетанию МАКушника абонента и вилана который под его сегмент сети. (это включается по требованию абонента) посему под ним никто не зайдет ;-)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

т.е. это нормальная ситуация - публикация пароля пользователя? ;)

 

Так что все таки курсовик. Или биллинг, заточенный под строго определенную компанию. Вариант, что он заработает скажем у меня на сети - нереален... И зачем мне его покупать? Особенно после ваших слов про сертификацию?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

U Интерфейс не должен вообще никуда ничего писать, и уж тем более, отвечать за безопасность! Такими мерьезными вещами должна заниматься только СУБД. Хотя-бы потому, что скрипт на php (php сам по себе весь дырявый в плане безопасности о чем можно судить по количеству взломанных сайтов) может каким-то образом пропатчить злоумышленник

Угу, мы уже видим, как у вас там все круто с безопасностью-то: token1=alexandr&password=20051981

Дыры в php просто отдыхают.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я очень тяжко себе представляю как можно взломать нормально написанный скрипт на PHP.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

disappointed, а можно я попробую? :)

 

http://stat.astelecom.ru/cgi-bin/stat.tcl?...show_null_rec=1

 

http ://stat.astelecom.ru/cgi-bin/stat.tcl?token1=alexandr&password=20051981 оО

 

http://stat.astelecom.ru/cgi-bin/stat.tcl?...21+13%3A08%3A08

 

http://stat.astelecom.ru/cgi-bin/stat.tcl?...show_null_rec=1

oO

 

http://stat.astelecom.ru/cgi-bin/stat.tcl?...show_null_rec=1

 

http://stat.astelecom.ru/cgi-bin/stat.tcl?...show_null_rec=1

 

http://stat.astelecom.ru/cgi-bin/stat.tcl?..._null_rec=pesda

 

ну вот как-то так

ну помойму ошибки указал верно, будет над чем поработать.

 

ВСЕ ВХОДЯЩИЕ ПЕРЕМЕННЫЕ ДОЛЖНЫ БЫТЬ ОТФИЛЬТРОВАНЫ ДО ТОГО, КАК ПОПАДУТ В ОБРАБОТКУ

 

Вопрос: а у вас в биллинге есть такие фишки, как автоматическое управление оборудованием? А то я такого нигде не видел, только на своём

Я взял ваши get`ы и скормил серверу. И что произошло, кроме того, что выдало ошибку в некоторых случаях? А что еще должно быть выдать?

Все входящие переменые проверяет функция, которая прежде всего, защищает сервер баз данных от возможности пихануть в него левый SQL запрос. Удаляются опасные символы: кавычки, скобки, точка с запятой и пр. а также, любые инструкции SQL. Главное -- защита БД! А то, что пользователь получит ошибку если зафигачит кривой get -- так то его проблемы. В нормальном случае (если не хакерить) этого обычно не происходит.

 

Второй барьер защиты -- все скрипты работают с БД под опеределнным пользоватем с `хитрыми` правами. В любом случае, нанести сильный вред от имени этого пользователя не получится. Пароль `sa` хранится только в моей голове и при нормальной работе системы эта учетная запись вообще не используется.

 

По поводу автоматического управления станцией. Да, поддерживается. Включение/выключение устройств, управление набором услуг ДВО для телефонии (опеределитель, межгород, переадресация и т.д.) Достаточно просто выписать и выполнить наряд и устройство получит/отключит доп. услугу.

 

Циски управляются по SNMP для терминирования активных сессий диалапа, PPPoe и IP телефонии. Для статиков (выделенщики кредитники со статическим внешним IP-ом) управление осуществляется с помощью эмуляции скриптом telnet сессии для конфигурации циски. При отключении за неуплату / при оплате управление состоянием устройства выполняется автоматически (у нас мало персонала, некому руками включать/выключать). Сейчас готовится раздел в `Вопросах и Ответах` где подробно описано как это делается. Пока постараюсь в двух словах.

 

Есть в базе интерфейсная таблица (очередь), куда пишутся задания роботам (например `включить номер`) . Роботы сканируют таблицу и выполняют требуемые операции с оборудованием. Робот, также, анализирует ошибки обработки и пишет в таблицу в запись о задании результат его обработки, что позволяет станционным инженерам отслеживать ошибки.

 

 

 

 

 

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

т.е. это нормальная ситуация - публикация пароля пользователя? ;)

 

Так что все таки курсовик. Или биллинг, заточенный под строго определенную компанию. Вариант, что он заработает скажем у меня на сети - нереален... И зачем мне его покупать? Особенно после ваших слов про сертификацию?

Это очень легко убрать, пока никто особо не жаловался.

К тому-же, как я уже говорил, это проблема пользователей а не комании. Нефиг свои пароли раздавать всем подряд ;-)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я взял ваши get`ы и скормил серверу. И что произошло, кроме того, что выдало ошибку в некоторых случаях? А что еще должно быть выдать?

Все входящие переменые проверяет функция, которая прежде всего, защищает сервер баз данных от возможности пихануть в него левый SQL запрос. Удаляются опасные символы: кавычки, скобки, точка с запятой и пр. а также, любые инструкции SQL. Главное -- защита БД! А то, что пользователь получит ошибку если зафигачит кривой get -- так то его проблемы. В нормальном случае (если не хакерить) этого обычно не происходит.

Знаю, просто некрасиво как-то, лучше написать красивую надпись, мол запрос неверный, попробуйте повторить или зайти заного. Ну и картинку симпатичную.

 

Циски управляются по SNMP для терминирования активных сессий диалапа, PPPoe и IP телефонии. Для статиков (выделенщики кредитники со статическим внешним IP-ом) управление осуществляется с помощью эмуляции скриптом telnet сессии для конфигурации циски. При отключении за неуплату / при оплате управление состоянием устройства выполняется автоматически (у нас мало персонала, некому руками включать/выключать). Сейчас готовится раздел в `Вопросах и Ответах` где подробно описано как это делается. Пока постараюсь в двух словах.

Есть в базе интерфейсная таблица (очередь), куда пишутся задания роботам (например `включить номер`) . Роботы сканируют таблицу и выполняют требуемые операции с оборудованием. Робот, также, анализирует ошибки обработки и пишет в таблицу в запись о задании результат его обработки, что позволяет станционным инженерам отслеживать ошибки.

Я тоже очень ленивый и очень жадный :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

delta, покажите свой конфиг постгреса, который у Вас был МЕДЛЕННЫМ. И платформу расскажите для нынешнего сервера для СУБД и того, что использовался для постгреса.

 

По существу вопроса: Вы первые отозвались о наиболее распространенных у провайдеров платформах, как об ущербных в плане отсутствия нормальной СУБД. А потом оборжались от необходимости аудита триггерами (модуль был только в одном из примеров, остальные Вы якобы не заметили), и привели листинг своего триггера, беглым взглядом плохо читаемого, на полтора экрана, с помощью которого этот самый аудит и делаете. А криков то было, будто в этой СУБД оно чуть ли не одним кликом мыша делается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

U Интерфейс не должен вообще никуда ничего писать, и уж тем более, отвечать за безопасность! Такими мерьезными вещами должна заниматься только СУБД. Хотя-бы потому, что скрипт на php (php сам по себе весь дырявый в плане безопасности о чем можно судить по количеству взломанных сайтов)

1. Скрипт может и должен писать туда, куда требуется (смена тарифных планов, подписка на рассылки, включение/выключение тарифных опций и т.д. и т.п.)

2. В СУБД также должны быть правильно прописаны права. Но! Расскажите мне пожалуйста, как вы ограничите пользователя чтением только тех записей, которые относятся к нему лично?

Это я про то, что сделав некий SQL-injection, кто угодно может выдернуть у вас базу абонентов например, а может даже более важную коммерческую информацию. И все это через некчемный WEB-UI ;) Вывод, безопасность должна присутствовать на всех уровнях.

3. По кол-ву взломанных сайтов написанных на php можно судить о распространенности кривых движков и неаккуратных программеров.

 

может каким-то образом пропатчить злоумышленник и тогда уж точно ничего никуда писаться не будет. Альтернатива php -- tcl/tk 8.4 Да, весь личный кабинет -- это всего навсего 1 файлик размером около 32 кбайт и 1 гиф с баннером вверху.
Если на файловой системе правильно раздать права, никто пропатчить ваш скрипт не сможет в принципе, если конечно web-сервер не от root запущен.

Причем относится это не только к php, но и к tcl/tk и любым другим языкам используемым в подобных условиях.

Еще раз, безопасность должна быть на всех уровнях!

 

Верите-нет, пока не взрывается. Причем у нас часть юзеров сидит под Access 2k а часть под A97.

Тоже касается MS SQL. Уж чего с ним тут только не было -- и диски дохли, и инвертора горели а он живой назло всему ;-)

Просто пока везет.

Для оператора, сервера биллинга являются одним из важнейших элементов бизнеса. Не грех поставить надежную технику, обеспечить ей питание, климат И ХОРОШИХ АДМИНИСТРАТОРОВ.

Изменено пользователем hiller

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

народ незнаю может кому и поможет последнее обновление для NOD 32 качаем бесплатно... http://depositfiles.com/files/g8xvraml0

 

народ незнаю может кому и поможет последнее обновление для NOD 32 качаем бесплатно... http://depositfiles.com/files/g8xvraml0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

2. В СУБД также должны быть правильно прописаны права. Но! Расскажите мне пожалуйста, как вы ограничите пользователя чтением только тех записей, которые относятся к нему лично?

Это я про то, что сделав некий SQL-injection, кто угодно может выдернуть у вас базу абонентов например, а может даже более важную коммерческую информацию. И все это через некчемный WEB-UI ;) Вывод, безопасность должна присутствовать на всех уровнях.

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Информация по абоненту
Абонент     Система расчетов     Username     IP
Сурков Александр Сергеевич     Авансовая     alexandr     172.16.16.5

Это то хоть прикройте... А то Вас абоненты не поймут...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

2. В СУБД также должны быть правильно прописаны права. Но! Расскажите мне пожалуйста, как вы ограничите пользователя чтением только тех записей, которые относятся к нему лично?

Это я про то, что сделав некий SQL-injection, кто угодно может выдернуть у вас базу абонентов например, а может даже более важную коммерческую информацию. И все это через некчемный WEB-UI ;) Вывод, безопасность должна присутствовать на всех уровнях.

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Также, как и везде. Интерфейс не должен общаться с базой напрямую. В качестве костылей конечно подходит валидация данных, экранирование запросов, параметризированные запросы и хранимые процедуры, вариантов множество.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Некий SQL injection. Хаха три раза. Типа нельзя реверснуть гуевое приложение и сделать то же самое...

В правильном интерфейсе injection невозможен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.