Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
emphasizer Member Откуда: Сообщений: 21 |
Здравствуйте, коллеги. Возможно кто-то уже сталкивался с такой задачей, когда нужно проверить все базы данных на сервере на наличие информации по кредитным картам (есть ли она на сервере в какой-либо таблице) так как структура данных на сеорвере постоянно меняется и нужно время от времени проверять чтобы информация такого рода на сервер не попадала, а если и попала то не хранилась в открытом виде. Я порылся в сети и накопал кучу скриптов для проверки наличия информации по кредитным картам в файловой системе, но для проверки в базе не нашел ни одной. Проблема в том, что сама база не может быть пропарсена таким скриптом так как информация в ней в зашифрованом виде хранится. И потому, собственно, назреш вопрос а как это можно реализовать в самой базе? Есть идеи? |
30 авг 16, 19:24 [19609044] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1698 |
emphasizer, Ничего не скажешь попытка хорошая :D |
30 авг 16, 19:30 [19609078] Ответить | Цитировать Сообщить модератору |
emphasizer Member Откуда: Сообщений: 21 |
felix_ff, Я не пытаюсь получить номера карт, мне нужен алгоритм для их поиска в базах на сервере чтобы их от туда ремувнуть потом и всякие жулики не могли их найти так как политика компании не позволяет их хранить. Мне один знакомый ДБА предложил использовать редгейт sql - серч http://www.red-gate.com/products/sql-development/sql-search/, но как по мне то вещица не очень удобная, хотя и мощная. А мне надо запускать в командной строке скриптом или джобой на сервере, потому GUI не особо подходит. Так что ищу дальше другие варианты. |
30 авг 16, 19:36 [19609099] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1698 |
emphasizer, Довольно странная политика у вашей партии. Базы данных обычно нужны что бы данные в них хранились. Допустим у вас бд содержит сведения по картам клиентов вы собираетесь эти данные удалить, а не думаете что из за этих ваших манипуляций консистентеость вашей бд будет нарушена? И вообще другой прикладной софт работающий с данной бд больше работать не будет? |
30 авг 16, 19:40 [19609117] Ответить | Цитировать Сообщить модератору |
emphasizer Member Откуда: Сообщений: 21 |
felix_ff, у нас компания не процессинговый центр и в идеале там не должно быть никакой информации по кредитным картам. Если же она попадает туда, то тогда уже менеджмент будет решать что с этим делать или удалять или же шифровать. Но для этого как минимум их надо сперва найти (точнее идентифицировать базу и таблицу где появилась данная информация). У нас просто много разработчиков и за всеми не уследишь, что они там пишут, какие таблицы создают и какую информацию туда вносят. Вот, собственно для этого и нужно создать джобу автоматически проверяющую наличие такой информации а базе и отправляющую нотификейшн менеджменту в случае обнаружения подобной информации. Но я как Девопс пока не знаю, как такое вообще можно сделать, хотя, теоретически идея не кажется такой уж и утопической. ) |
30 авг 16, 19:49 [19609151] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
|
||
30 авг 16, 19:50 [19609158] Ответить | Цитировать Сообщить модератору |
emphasizer Member Откуда: Сообщений: 21 |
|
||
30 авг 16, 19:54 [19609171] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1698 |
emphasizer Если немного отстранится от моего сарказма и самой абсурдности (в концептуальном плане) задачи. То тут у вас путей не много. Не зная структуры баз данных и их логических связей вы можете только наобум грохнуть данные и молится что где то это у вас не отвалится. Концепция будет следующей рекурсивно обходя каждую базу данных, вы производите сканирование метаданных таблиц ищете каждое поле которое типа char, varchar длинна которого больше или равна 16 знаков (если поиск будет предполагать номер карты), составляете что то типа временной таблицы хранения предполагаемых объектов которые могут хранить в себе искомые данные CREATE TABLE #tmp ( [DBID] INT, [TableName] sysname, [ColumnName] VARCHAR(255) ) потом Вам необходимо определиться хотя бы с приблизительным шаблоном по которому вы будете осуществлять поиск в собранных метаданных, т.е. какую именно информацию вы будете искать в колонке найденной таблицы. ну и опять циклически пишите динамику которая выбирает данные из необходимой таблицы. Вообще вопрос очень эфемерен, поэтому и ответ соответствующий.
|
|
30 авг 16, 19:58 [19609180] Ответить | Цитировать Сообщить модератору |
emphasizer Member Откуда: Сообщений: 21 |
felix_ff, Спасибо за ваш ответ. Да, задача странная, так как я тоже думаю, что сотрудники компании должны читать какую информацию они туда должны вносить, а какую нет. Но не мне обычному девопу спорить с менеджерами. Потому ищу хоть какое-то работающее решение. С виду это похоже на хацкерство, но если бы это было так, то я бы начинал с того что спрашивал как получить несанкционированный доступ к серверу БД.) Так что это не тот случай. |
30 авг 16, 20:09 [19609218] Ответить | Цитировать Сообщить модератору |
emphasizer Member Откуда: Сообщений: 21 |
А это уже что-то. Осталось только напистаь запрос и запихнуть его в хранимую процедуру. Спасибо.) Главное чтобы не уложить прод сервер такой проверкой так как я так понимаю сканирование будет проходить долго и может потребовать много ресурсов. |
||
30 авг 16, 20:13 [19609232] Ответить | Цитировать Сообщить модератору |
ппп-п
Guest |
На Западе сейчас довольно модный тренд - deidentification и anomization solutions. Люди же научились изображения на картинках распознавать... И там компании готовы платить большие деньги за это, ибо просто так бэкап с продакшена на стейджинг окружении с медицинскими данными не восстановишь. Я уже не говорю, разработчикам не отдашь... |
||||
30 авг 16, 22:13 [19609714] Ответить | Цитировать Сообщить модератору |
Критик Member Откуда: Москва / Калуга Сообщений: 34760 Блог |
emphasizer, с помощью системных представлений INFORMATION_SCHEMA нужно пробежаться по таблицам/столбцам, где в именах имеются "подозрительные" PIN, VALIDTO, MII, IIN, BIN, checksun, chk, CARDHOLDER, NUMBER, ACCOUNT%IDENTIFIER а потом глазами |
30 авг 16, 23:18 [19609935] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
глаза не отвалятся? у нас valid_to чуть ли не в каждой таблице. но карточек нет К сообщению приложен файл. Размер - 38Kb |
||
31 авг 16, 09:03 [19610448] Ответить | Цитировать Сообщить модератору |
Хе-хе )
Guest |
Текстовые поля от 16 символов, данные в которых начинаются с бина (первые шесть цифр) Список бинов а нете, например https://binov.net/ |
31 авг 16, 10:32 [19610770] Ответить | Цитировать Сообщить модератору |
it17 Member Откуда: Сообщений: 108 |
emphasizer, похоже кто-то стандартизируется по PCI DSS :-) Мы делали так: 1. Собирается список полей от разработчиков, в каких таблицах и полях они хранят номера ПК Им лучше знать куда пишутся данные. 2. Если размер БД позволяет - выгрузить скрипт с данными и прогнать поиском по бинам 3. Поиск по файловой системе, если речь идет о логах ПО В результате такой работы стало известно, что терминальное оборудование номера карт не хранило в БД, но писало в логи в открытом виде. В столбцах таблицы номера карт не хранились в открытом виде, но в поле типа XML сохранялся пакет с запросом, в котором был полный номер ПК. |
1 сен 16, 11:17 [19616228] Ответить | Цитировать Сообщить модератору |
emphasizer Member Откуда: Сообщений: 21 |
Дело в том, что текучка в компании присутствует, и из новых разрабов никто не знает пишется ли такая инфа куда-то, ну а старых уже нет с нами, они уже работают в других компанихя, и я их не знаю, ну и им честно говоря - оно нафиг не нужно.)
Ок, спасибо. За наводку. Попробую также проверить логи на наличие подобнрой информациии еще раз. Только знать бы какие.) |
||||||||||
3 сен 16, 17:35 [19624881] Ответить | Цитировать Сообщить модератору |
emphasizer Member Откуда: Сообщений: 21 |
Кстати, а есть возможность искать в mssql с помощью регулярки? Это явно бы упростило задачу. |
3 сен 16, 17:39 [19624888] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
emphasizer Member Откуда: Сообщений: 21 |
Здравствуйте. Спасибо всем за помощь. Данная процедура проверки была реализована нашим девелопером. Так что яч лишь ее прикрутил к повершел скрипту и все заработало. Тему можно закрывать. |
1 дек 16, 23:52 [19957847] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |