Какие преимущества безопасности предоставляются при помощи хранимых процедур для доступа к данным?

В соответствии с Dockerfile из prometheus значение USER установлено на nobody.

Таким образом, имеет смысл, что вышеупомянутый каталог не доступен сервису.

Таким образом, проблема была решена путем выполнения

chgrp -R nogroup /prometheus_data

12
задан Matt Brunell 7 January 2009 в 18:51
поделиться

9 ответов

Поскольку путем ограничения всего доступа к тем сохраненный procs Вы установили определенный интерфейс к базе данных, через которую должен произойти весь доступ... Так как у Вас будет Прямой выбор DENY'd, вставить, обновить и удалить операции против таблиц и представления, никто не может непосредственно записать sql их собственного дизайна, который делает то, что они хотят... Если Вы хотите ограничить, вставляет в список сотрудников, где сотрудник присвоен больше чем трем проектам к только тем сотрудникам, которые имеют счет, больше, чем 85 на тесте мастерства, то можно записать, что ограничение intoi SaveEmployee sproc, и имеет его, выдают исключение к любому клиентскому коду, который пытается сделать это...

Уверенный Вы МОГЛИ сделать, то же самое с помощью клиентского кода, но с помощью sProcs делает процесс легче разработать и справиться, для порождения это - все в одном месте, и ВСЕ приложения, которые пытаются получить доступ к этой системе баз данных, должны соответствовать любым ограничениям и/или мерам обеспечения безопасности, которые Вы определяете в SProcs... Никакой разработчик жулика, пишущий новое отдельное клиентское приложение, которое поражает базу данных, не может проигнорировать или обходное решение ограничение или мера обеспечения безопасности в SProc если это SProc s ЕДИНСТВЕННЫЙ СПОСОБ вставить или обновить запись...

11
ответ дан 2 December 2019 в 05:16
поделиться

Вы не могли бы хотеть давать меню-blanc Matt для обновления определенных таблиц или столбцов непосредственно. Что, если Matt решил сделать это:

UPDATE Person.Address SET AddressLine1 = NULL

Ой. Matt забыл оператор Where и просто полил из шланга Вашу базу данных. Или возможно Matt просто получил pissed в своем боссе и решил выйти в конце дня. Или возможно пароль Matt не так безопасен, как это должно было быть, и теперь у хакера есть он.

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

10
ответ дан 2 December 2019 в 05:16
поделиться

В большинстве (все?) RDBMS можно 'ПРЕДОСТАВИТЬ' доступ на определенных таблицах определенным пользователям. Хранимая процедура может работать как другой пользователь, один с большим доступом. Но Хранимая процедура не является тем же как предоставлением доступа к целой таблице, скорее это могло сначала проверить некоторые вещи и только возвратить строки, которые соответствуют Вашим конкретным проблемам безопасности.

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

1
ответ дан 2 December 2019 в 05:16
поделиться

Хранимые процедуры обеспечивают дополнительную безопасность, позволяя пользователям работать, операции CRUD (вставьте, обновите, удалите), но только ограниченным способом. Например, позволяя пользователю Matt обновить адрес некоторых строк, но не других.

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

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

4
ответ дан 2 December 2019 в 05:16
поделиться

В SQL Server Вы не должны предоставлять прямой доступ к таблицам при надлежащем использовании сохраненного procs (который не означает динамического SQL). Это означает, что Ваши пользователи могут только сделать thoses вещи, определенные procs. Если у Вас есть какие-либо финансовые данные вообще в Вашей базе данных или данных деликатного характера, только наименьшее количество возможного числа людей (обычно только dbas) должно иметь прямой доступ к таблицам. Это серьезно снижает риск мошенничества или рассерженных сотрудников, повреждающих Ваши критически важные для бизнеса данные или сотрудников, крадущих персональный inmformation для фиксации хищения личных данных. В учете условий это - необходимый внутренний контроль и удобство разработчика или персональные требования сделать, все динамично от пользовательского интерфейса должно быть превзойдено ненадежностью данных. К сожалению, в слишком немногих компаниях, это не. Большинство разработчиков, кажется, только волнуется о внешних угрозах их данным, но внутренние часто намного более очень важны.

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

3
ответ дан 2 December 2019 в 05:16
поделиться

Хранимая процедура лучше, потому что безопасность на хранимой процедуре (IIRC) превзойдет безопасность на таблицах/столбцы.

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

Однако хранимая процедура может выполнить составную операцию, и можно установить безопасность соответственно на этом.

0
ответ дан 2 December 2019 в 05:16
поделиться

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

Обратите внимание, что мы говорим о "безопасности, которой управляет DBA", а не администратором сайта или системным администратором или программным модулем, все из которых полезны и часть полной инфраструктуры безопасности.

0
ответ дан 2 December 2019 в 05:16
поделиться

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

Например, у Вас есть система с обратной связью. Обратная связь может только быть отправлена после того, как управление запустило кампанию обратной связи. Это просто обновляет флаг в некоторой таблице. Затем, когда пользователь приезжает для представления обратной связи, SP может проверить, установлен ли флаг.

Select @IsFeedbackDefined = IsFeedbackDefined From sometable where ID = @ID

IF @IsFeedbackDefined is Null or @IsFeedbackDefined = false 
Begin
    Return -2   --can not submit feedback
End
0
ответ дан 2 December 2019 в 05:16
поделиться

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

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

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

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

0
ответ дан 2 December 2019 в 05:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: