Има и други начини да го направите. Зависи от това кой смятате, че идва след вашия низ за връзка и какъв тип достъп и нива на умения ще има. Низът за връзка е там, някъде, без значение как се опитвате да го скриете.
Знаейки, че низът за връзка може да бъде хакнат, винаги предполагам, че ще бъде хакнат, и вземам предпазни мерки от другата страна.
Ние правим няколко неща в края на DB сървъра, за да сме сигурни, че дори ако низът за връзка е компрометиран, данните все още са защитени.
- Потребителят, който е свързан с низа за свързване, има практически нулеви разрешения на сървъра. Единствените разрешения, които имат, са ИЗПЪЛНЕНИЕ и КОНТРОЛ върху СХЕМАТА, която съдържа съхранените процедури.
- Единственият достъп, който предният край има, е чрез съхранени процедури. Ние никога не позволяваме на предния край да изпраща SQL низове.
- Данните се съхраняват в отделна схема от изпълнимите файлове, в схемата DATA потребителят, асоцииран с низа за връзка, има НУЛЕВИ разрешения, не може да ги гледа, помирисва или докосва.
- Запазените процедури делегират разрешения на потребител без влизане, който има достатъчно разрешения за изпълнение на процедурата. (С ИЗПЪЛНЕНИЕ КАТО „потребител без влизане“)
Това е почти всичко, което можем да направим. Не намерихме начин да предотвратим показването на низа за свързване по някакъв начин някъде.
В отговор на въпроса, който Алекс зададе по-долу. (твърде дълго за коментар)
Забележка. Следното е за MS SQL Server, може да се отнася за други DBMS системи, но не мога да гарантирам за други.
Базата данни съдържа схема, а схемата съдържа обекти на база данни като таблици, изгледи, съхранени процедури. Schmea ви позволява да оградите обекти на база данни, например, ако имате група таблици, които всеки има право да вижда, тогава те могат да влязат в ОБЩА схема, ако имате информация за заплати, която трябва да защитите, можете да поставите това в схема за ЗАПЛАТИ. След това можете да поставите различни мерки за сигурност на SCHEMA въз основа на типа обекти, които са вътре в тях. Графично те изглеждат като папки на твърд диск и под тях са всички обекти на базата данни, които съдържат. Когато стартирате вашия сървър, има няколко схеми, които се създават автоматично. Този, с който сте най-запознат, е DBO schmea. Може да не знаете за това, ако вашият администратор е задал това като ваша схема по подразбиране.
Това, което правим, е да поставим всички данни в DATA schmea, което означава, че са разрешени само таблици. Така че, ако имахме база данни за заплати, тогава таблиците с данни щяха да влязат в схема, наречена dataPayroll.
Съхранената процедура е блок или блокове от SQL код, които сървърът на базата данни може да изпълни, когато бъде извикан. Може да върне таблица с данни или една стойност. Мислете за това като за метод в C#.
Съхранените процедури имат входни и връщани параметри, които се използват в SQL кода. Параматаризираните съхранени процедури са силна защита срещу атаки чрез SQL инжектиране.
Нашият протокол казва, че всички съхранени процедури и изгледи се съхраняват в схема, предшествана от „prog“. Така че в случая на базата данни за заплати всички обекти, които не са данни, са вътре в схемата progPayroll.
Потребителят, който е дефиниран от низа за свързване, тогава има само разрешения за контрол и изпълнение на схемата „prog“. Това им позволява да извикат съхранената процедура. На потребителя, който е дефиниран от низа за връзка, са отказани всички други разрешения. На този потребител също са отказани ВСИЧКИ разрешения навсякъде другаде. В съхранената процедура разрешението за достъп до данните се делегира на потребител БЕЗ ВХОД, който има разрешение да извлича данните от схемата „данни“ с помощта на командата EXECUTE AS.
В предния край НЯМА sql. Всичко, което предните програмисти знаят, е името на съхранените процедури, параметрите и типовете и стойностите на връщане.
По този начин, дори ако атакуващият успее да измъкне низа за свързване от вашата програма, той все още трябва да свърши много работа, за да може да направи каквото и да е с вашата база данни, тъй като потребителят, който имат, може да изпълни само съхранена процедура.
Ако нямате представа какво представляват тези неща, наистина трябва да потърсите DB програмист, който да настрои системата ви.