Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проверка наличия информации в базе по кредитных картах.  [new]
emphasizer
Member

Откуда:
Сообщений: 21
Здравствуйте, коллеги.

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

Я порылся в сети и накопал кучу скриптов для проверки наличия информации по кредитным картам в файловой системе, но для проверки в базе не нашел ни одной. Проблема в том, что сама база не может быть пропарсена таким скриптом так как информация в ней в зашифрованом виде хранится. И потому, собственно, назреш вопрос а как это можно реализовать в самой базе? Есть идеи?
30 авг 16, 19:24    [19609044]     Ответить | Цитировать Сообщить модератору
 Re: Проверка наличия информации в базе по кредитных картах.  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1698
emphasizer,

Ничего не скажешь попытка хорошая :D
30 авг 16, 19:30    [19609078]     Ответить | Цитировать Сообщить модератору
 Re: Проверка наличия информации в базе по кредитных картах.  [new]
emphasizer
Member

Откуда:
Сообщений: 21
felix_ff,

Я не пытаюсь получить номера карт, мне нужен алгоритм для их поиска в базах на сервере чтобы их от туда ремувнуть потом и всякие жулики не могли их найти так как политика компании не позволяет их хранить. Мне один знакомый ДБА предложил использовать редгейт sql - серч http://www.red-gate.com/products/sql-development/sql-search/, но как по мне то вещица не очень удобная, хотя и мощная. А мне надо запускать в командной строке скриптом или джобой на сервере, потому GUI не особо подходит. Так что ищу дальше другие варианты.
30 авг 16, 19:36    [19609099]     Ответить | Цитировать Сообщить модератору
 Re: Проверка наличия информации в базе по кредитных картах.  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1698
emphasizer,

Довольно странная политика у вашей партии. Базы данных обычно нужны что бы данные в них хранились. Допустим у вас бд содержит сведения по картам клиентов вы собираетесь эти данные удалить, а не думаете что из за этих ваших манипуляций консистентеость вашей бд будет нарушена? И вообще другой прикладной софт работающий с данной бд больше работать не будет?
30 авг 16, 19:40    [19609117]     Ответить | Цитировать Сообщить модератору
 Re: Проверка наличия информации в базе по кредитных картах.  [new]
emphasizer
Member

Откуда:
Сообщений: 21
felix_ff,

у нас компания не процессинговый центр и в идеале там не должно быть никакой информации по кредитным картам. Если же она попадает туда, то тогда уже менеджмент будет решать что с этим делать или удалять или же шифровать. Но для этого как минимум их надо сперва найти (точнее идентифицировать базу и таблицу где появилась данная информация). У нас просто много разработчиков и за всеми не уследишь, что они там пишут, какие таблицы создают и какую информацию туда вносят. Вот, собственно для этого и нужно создать джобу автоматически проверяющую наличие такой информации а базе и отправляющую нотификейшн менеджменту в случае обнаружения подобной информации. Но я как Девопс пока не знаю, как такое вообще можно сделать, хотя, теоретически идея не кажется такой уж и утопической. )
30 авг 16, 19:49    [19609151]     Ответить | Цитировать Сообщить модератору
 Re: Проверка наличия информации в базе по кредитных картах.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37155
emphasizer
felix_ff,

у нас компания не процессинговый центр и в идеале там не должно быть никакой информации по кредитным картам. Если же она попадает туда, то тогда уже менеджмент будет решать что с этим делать или удалять или же шифровать. Но для этого как минимум их надо сперва найти (точнее идентифицировать базу и таблицу где появилась данная информация). У нас просто много разработчиков и за всеми не уследишь, что они там пишут, какие таблицы создают и какую информацию туда вносят. Вот, собственно для этого и нужно создать джобу автоматически проверяющую наличие такой информации а базе и отправляющую нотификейшн менеджменту в случае обнаружения подобной информации. Но я как Девопс пока не знаю, как такое вообще можно сделать, хотя, теоретически идея не кажется такой уж и утопической. )
Бардак не автоматизируется. Аминь.
30 авг 16, 19:50    [19609158]     Ответить | Цитировать Сообщить модератору
 Re: Проверка наличия информации в базе по кредитных картах.  [new]
emphasizer
Member

Откуда:
Сообщений: 21
Гавриленко Сергей Алексеевич
Бардак не автоматизируется. Аминь.
Ок, так и скажу нашему руководству. Может тогда они отменят эту таску.)
30 авг 16, 19:54    [19609171]     Ответить | Цитировать Сообщить модератору
 Re: Проверка наличия информации в базе по кредитных картах.  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1698
emphasizer

Если немного отстранится от моего сарказма и самой абсурдности (в концептуальном плане) задачи.

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

Концепция будет следующей рекурсивно обходя каждую базу данных, вы производите сканирование метаданных таблиц ищете каждое поле которое типа char, varchar длинна которого больше или равна 16 знаков (если поиск будет предполагать номер карты),

составляете что то типа временной таблицы хранения предполагаемых объектов которые могут хранить в себе искомые данные
CREATE TABLE #tmp (
        [DBID] INT,
        [TableName] sysname,
        [ColumnName] VARCHAR(255)
)


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

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

+
больше всего это похоже на хацкерство и довольно топорным методом
30 авг 16, 19:58    [19609180]     Ответить | Цитировать Сообщить модератору
 Re: Проверка наличия информации в базе по кредитных картах.  [new]
emphasizer
Member

Откуда:
Сообщений: 21
felix_ff,

Спасибо за ваш ответ. Да, задача странная, так как я тоже думаю, что сотрудники компании должны читать какую информацию они туда должны вносить, а какую нет. Но не мне обычному девопу спорить с менеджерами. Потому ищу хоть какое-то работающее решение. С виду это похоже на хацкерство, но если бы это было так, то я бы начинал с того что спрашивал как получить несанкционированный доступ к серверу БД.) Так что это не тот случай.
30 авг 16, 20:09    [19609218]     Ответить | Цитировать Сообщить модератору
 Re: Проверка наличия информации в базе по кредитных картах.  [new]
emphasizer
Member

Откуда:
Сообщений: 21
felix_ff
Концепция будет следующей рекурсивно обходя каждую базу данных, вы производите сканирование метаданных таблиц ищете каждое поле которое типа char, varchar длинна которого больше или равна 16 знаков (если поиск будет предполагать номер карты),

А это уже что-то. Осталось только напистаь запрос и запихнуть его в хранимую процедуру. Спасибо.) Главное чтобы не уложить прод сервер такой проверкой так как я так понимаю сканирование будет проходить долго и может потребовать много ресурсов.
30 авг 16, 20:13    [19609232]     Ответить | Цитировать Сообщить модератору
 Re: Проверка наличия информации в базе по кредитных картах.  [new]
ппп-п
Guest
Гавриленко Сергей Алексеевич
emphasizer
felix_ff,

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


На Западе сейчас довольно модный тренд - deidentification и anomization solutions. Люди же научились изображения на картинках распознавать... И там компании готовы платить большие деньги за это, ибо просто так бэкап с продакшена на стейджинг окружении с медицинскими данными не восстановишь. Я уже не говорю, разработчикам не отдашь...
30 авг 16, 22:13    [19609714]     Ответить | Цитировать Сообщить модератору
 Re: Проверка наличия информации в базе по кредитных картах.  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 34760
Блог
emphasizer,

с помощью системных представлений INFORMATION_SCHEMA нужно пробежаться по таблицам/столбцам, где в именах имеются "подозрительные" PIN, VALIDTO, MII, IIN, BIN, checksun, chk, CARDHOLDER, NUMBER, ACCOUNT%IDENTIFIER

а потом глазами
30 авг 16, 23:18    [19609935]     Ответить | Цитировать Сообщить модератору
 Re: Проверка наличия информации в базе по кредитных картах.  [new]
o-o
Guest
Критик
emphasizer,

с помощью системных представлений INFORMATION_SCHEMA нужно пробежаться по таблицам/столбцам, где в именах имеются "подозрительные" PIN, VALIDTO, MII, IIN, BIN, checksun, chk, CARDHOLDER, NUMBER, ACCOUNT%IDENTIFIER

а потом глазами

глаза не отвалятся?
у нас valid_to чуть ли не в каждой таблице.
но карточек нет

К сообщению приложен файл. Размер - 38Kb
31 авг 16, 09:03    [19610448]     Ответить | Цитировать Сообщить модератору
 Re: Проверка наличия информации в базе по кредитных картах.  [new]
Хе-хе )
Guest
Текстовые поля от 16 символов, данные в которых начинаются с бина (первые шесть цифр)
Список бинов а нете, например https://binov.net/
31 авг 16, 10:32    [19610770]     Ответить | Цитировать Сообщить модератору
 Re: Проверка наличия информации в базе по кредитных картах.  [new]
it17
Member

Откуда:
Сообщений: 108
emphasizer,

похоже кто-то стандартизируется по PCI DSS :-)

Мы делали так:
1. Собирается список полей от разработчиков, в каких таблицах и полях они хранят номера ПК
Им лучше знать куда пишутся данные.
2. Если размер БД позволяет - выгрузить скрипт с данными и прогнать поиском по бинам
3. Поиск по файловой системе, если речь идет о логах ПО

В результате такой работы стало известно, что терминальное оборудование номера карт не хранило в БД, но писало в логи в открытом виде.
В столбцах таблицы номера карт не хранились в открытом виде, но в поле типа XML сохранялся пакет с запросом, в котором был полный номер ПК.
1 сен 16, 11:17    [19616228]     Ответить | Цитировать Сообщить модератору
 Re: Проверка наличия информации в базе по кредитных картах.  [new]
emphasizer
Member

Откуда:
Сообщений: 21
it17
emphasizer,

похоже кто-то стандартизируется по PCI DSS :-)

Да, именно. Будь оно неладно.)


it17
Мы делали так:
1. Собирается список полей от разработчиков, в каких таблицах и полях они хранят номера ПК
Им лучше знать куда пишутся данные.


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

it17
2. Если размер БД позволяет - выгрузить скрипт с данными и прогнать поиском по бинам
Слишком много баз, замахаемся делать експорт. ) Лучше искать прямо в базах.
it17
Поиск по файловой системе, если речь идет о логах ПО
Нале вот такую вот программульку. Слишком много совпадений выдает - https://adamcaudill.com/ccsrch/ хотя информация явно не о картах, а какие-то хеши.

it17
В результате такой работы стало известно, что терминальное оборудование номера карт не хранило в БД, но писало в логи в открытом виде.
В столбцах таблицы номера карт не хранились в открытом виде, но в поле типа XML сохранялся пакет с запросом, в котором был полный номер ПК.

Ок, спасибо. За наводку. Попробую также проверить логи на наличие подобнрой информациии еще раз. Только знать бы какие.)
3 сен 16, 17:35    [19624881]     Ответить | Цитировать Сообщить модератору
 Re: Проверка наличия информации в базе по кредитных картах.  [new]
emphasizer
Member

Откуда:
Сообщений: 21
Кстати, а есть возможность искать в mssql с помощью регулярки? Это явно бы упростило задачу.
3 сен 16, 17:39    [19624888]     Ответить | Цитировать Сообщить модератору
 Re: Проверка наличия информации в базе по кредитных картах.  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1698
emphasizer,

есть

https://github.com/zzzprojects/Eval-SQL.NET/wiki/SQL-Server-Regex-|-Use-regular-expression-to-search,-replace-and-split-text-in-SQL#introduction

https://www.simple-talk.com/sql/t-sql-programming/tsql-regular-expression-workbench/
3 сен 16, 19:52    [19625138]     Ответить | Цитировать Сообщить модератору
 Re: Проверка наличия информации в базе по кредитных картах.  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4256
-- EXEC usp_find_string 'credit'

CREATE procedure usp_find_string @string as varchar(1000)
as
begin
declare @mincounter as int
declare @maxcounter as int
declare @stmtquery as varchar(1000)
set @stmtquery=''
create table #tmp(tablename varchar(128),columnname varchar(128),rowid int identity)
create table #tablelist(tablename varchar(128),columnname varchar(128))
declare @tmp table(name varchar(128))
declare @tablename as varchar(128)
declare @columnname as varchar(128)

insert into #tmp(tablename,columnname)
select a.name,b.name as columnname from sysobjects a
inner join syscolumns b on a.name=object_name(b.id)
where a.type='u'
and b.xtype in(select xtype from systypes
    where name='text' or name='ntext' or name='varchar' or name='nvarchar' or name='char' or name='nchar')
order by a.name

select @maxcounter=max(rowid),@mincounter=min(rowid) from #tmp 
while(@mincounter <= @maxcounter )
begin
 select @tablename=tablename, @columnname=columnname from #tmp where rowid=@mincounter
 set @stmtquery ='select top 1  ' + '[' +@columnname+']' + ' from ' + '['+@tablename+']' + ' where ' + '['+@columnname+']' + ' like ' + '''%' + @string + '%'''
 insert into @tmp(name) exec(@stmtquery)
 if @@rowcount >0
 insert into #tablelist values(@tablename,@columnname)
 set @mincounter=@mincounter +1
end
select * from #tablelist
end


Сообщение было отредактировано: 6 сен 16, 01:30
5 сен 16, 10:12    [19627877]     Ответить | Цитировать Сообщить модератору
 Re: Проверка наличия информации в базе по кредитных картах.  [new]
emphasizer
Member

Откуда:
Сообщений: 21
Здравствуйте.
Спасибо всем за помощь.
Данная процедура проверки была реализована нашим девелопером. Так что яч лишь ее прикрутил к повершел скрипту и все заработало.

Тему можно закрывать.
1 дек 16, 23:52    [19957847]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить