Безопасность является главным беспокойством. Идеально Ваш сервер базы данных должен находиться позади брандмауэра только с портами, требуемыми выполнить открытый доступ к данным. Ваше веб-приложение должно соединяться с сервером базы данных с учетной записью SQL, которая имеет как раз достаточно прав для приложения функционировать и не больше. Например, необходимо удалить права, которые разрешают отбрасывать объектов, и несомненно Вы не должны соединять учетные записи использования, такие как 'sa'.
, Если Вы теряете веб-сервер налету (т.е. полноценное расширение полномочий к правам администратора), худший вариант развития событий - то, что база данных Вашего приложения может быть поставлена под угрозу, но не целый сервер базы данных (как имел бы место, если бы сервер базы данных и веб-сервер были той же машиной). Если Вы зашифровали свои строки соединения с базой данных, и хакер не является достаточно здравым смыслом для дешифрования их тогда все, что Вы потеряли, веб-сервер.
Непроверено:
public class HighlightBoundField : DataControlField {
//property to indicate if this field should be highlighted, given the value of this property
//
public string HighlightField {
get {
object value = ViewState["HighlightField"];
if (value != null) {
return Convert.ToString(value);
}
return "";
}
set {
ViewState["HighlightField"] = value;
OnFieldChanged();
}
}
//property to display as text in the cell
//
public string DataField {
get {
object value = ViewState["DataField"];
if (value != null) {
return value.ToString();
}
return string.Empty;
}
set {
ViewState["DataField"] = value;
OnFieldChanged();
}
}
//bound field creation
//
protected override DataControlField CreateField() {
return new BoundField();
}
//override the method that is used to populate and format a cell
//
public override void InitializeCell(DataControlFieldCell cell, DataControlCellType cellType, DataControlRowState rowState, int rowIndex) {
base.InitializeCell(cell, cellType, rowState, rowIndex);
//if this celltype is a data row
//
if (cellType == DataControlCellType.DataCell && !string.IsNullOrEmpty(HighlightField)) {
//create label control to display text
//
var lblText = new Label();
//add event listener for when the label is bound
//
lblText.DataBinding += new EventHandler(lblText_DataBinding);
//add label to controls collection
//
cell.Controls.Add(lblText);
}
}
void lblText_DataBinding(object sender, EventArgs e) {
//retrieve data item and set label text
//
Label lblText = (Label) sender;
object dataItem = DataBinder.GetDataItem(lblText.NamingContainer);
lblText.Text = DataBinder.GetPropertyValue(dataItem, DataField).ToString();
//check if value should be highlighted
//
if (Convert.ToBoolean(DataBinder.GetPropertyValue(dataItem, HighlightField))) {
lblText.Style.Add("background-color", "yellow");
}
}
}