У меня также есть решение со стандартными входами и выходами
#include<stdio.h>
#include<malloc.h>
int main()
{
char *str,ch;
int size=10,len=0;
str=realloc(NULL,sizeof(char)*size);
if(!str)return str;
while(EOF!=scanf("%c",&ch) && ch!="\n")
{
str[len++]=ch;
if(len==size)
{
str = realloc(str,sizeof(char)*(size+=10));
if(!str)return str;
}
}
str[len++]='\0';
printf("%s\n",str);
free(str);
}
Для цели безопасности хорошо разделить веб-и машины баз данных, предпочтительно имея брандмауэр между двумя. Веб-сервер подвергнут миру в целом. К сожалению, существуют люди, которые берут удовольствие в краже или повреждении информации, содержавшей на тех серверах.
Тогда существует аспект производительности . Это общеизвестно, что SQL Server любит память. Также - IIS, особенно если веб-сайт делает широкое применение информации о сессии и кэширования. Таким образом, у Вас есть потенциальный конфликт здесь также. Наличие выделенной машины для SQL Server ясно лучше, чем наличие единственной машины, делающей всю загрузку.
Затем разделение позволяет более легкая идентификация потребности настроиться и способность настроить отдельные аппаратные компоненты.
Таким образом, машина, достаточно мощная для преодоления требований и IIS и SQL Server в продуктивной среде , не обязательно будет более дешевой, чем две машины specced для конкретных требований каждого сервера. (Jeff Atwood, упомянутый в одном из подкастов, то обновление одной машины стоило бы того же как получения второй машины) .
безопасность @MarkR
действительно улучшена путем перемещения SQL Server в другое поле, и это относится к представленной Поверхности атаки.
веб-сервер подвергнут злонамеренному доступу из Интернета. Каждый надеется, что этого никогда не происходило бы, но было (и мог в будущем, быть), уязвимости, которые могут быть использованы через уродливые запросы то пересечение брандмауэры.
Использование одной из этих уязвимостей могло привести к произвольной способности кода выполниться.
, Если веб-сервер поставился под угрозу таким образом, что-либо еще, что работает на той машине, теперь уязвимо, и программное обеспечение использования могло потенциально работать в привилегированном контексте. Поверхность атаки поставившей под угрозу машины намного более широка.
, Если SQL Server установлен на той же машине, любая база данных уязвима.
Теперь, если SQL Server установлен на отдельной машине, к нему можно самостоятельно только получить доступ через ее открытый интерфейс. Поверхность присоединения базы данных ограничена тем интерфейсом. Так, чтобы поставить под угрозу базу данных, теперь необходимо поставить под угрозу веб-сервис сначала, ТОГДА SQL Server. Это НАМНОГО более трудно, чем наличие их на той же машине.
Расширение принципа далее, это - также аргумент в пользу использования сохраненного procs. Если веб-сервер только в состоянии получить доступ к сохраненному procs использования сервера базы данных, интерфейс, и следовательно поверхность атаки, в широком масштабе ограничиваются. Если веб-сервер в состоянии выполнить произвольный SQL против сервера базы данных, поверхность атаки снова намного больше тогда, это должно быть, и риск для данных значительно увеличен.
В системах, где данные ценны, эти риски, в то время как относительно маленький, очень реальны и решают, что бизнес-воздействие таких рисков является существенным аспектом дизайна решения.
Помещение их на той же машине:
, Если приложение не нужно в дублировании и не должно масштабировать горизонтально, помещение их на том же поле является определенной победой - намного легче поддержать.
я не думаю, что аргумент безопасности несет любой вес - я не вижу преимущества безопасности разделения их. Веб-сервер должен был бы иметь достаточно доступа к базе данных, чтобы просмотреть и изменить все или большинство данных так или иначе, поэтому если бы это полностью поставилось под угрозу, поле SQL эффективно поставилось бы под угрозу также.