Я разрабатываю веб-сайт ASP2.0 с базой данных Microsoft SQL Server 2005.Мне нужно реализовать функциональность, которая позволяет пользователям создавать запрос на выборку (ничего сложного), чтобы на веб-сайте отображалась страница с набором результатов запроса.Мой вопрос заключается в том, как я могу санировать запрос, чтобы убедиться, что нет вставки / обновления / удаления / удаления или других вредоносных инъекций.
также мне нужно заключить запрос в предложение «with», чтобы я могМожно добавить столбец идентичности в набор результатов.(Мне нужно, чтобы результаты правильно отображались на странице)
мой код CSharp для форматирования запроса выглядит следующим образом (немного упрощено):
string query = txtQuery.Text;
query = query.ToLower();
query = query.Trim();
int orderByIndex = query.LastIndexOf("order by");
string orderBy = "";
if (orderByIndex != -1)
{
orderBy = query.Substring(orderByIndex);
query = query.Replace(orderBy, "");
}
query = "with query as (" + query + ") select row_number() over(order by (select 0)) as rowID, * from query " + orderBy;
Я хочу создать сохраненныйпроцедура для выполнения запроса.Я думал о чем-то вроде этого:
CREATE PROCEDURE usp_execute_query
@sql nvarchar(max)
with execute as 'RestrictedUser'
as
begin
exec sp_executesql @sql
end
с RestrictedUser, похожим на это:
CREATE USER RestrictedUser WITHOUT LOGIN
EXEC sp_addrolemember db_datareader, RestrictedUser
Мои вопросы: есть ли способ проверить роли RestrictedUser в хранимой процедуречтобы убедиться, что они не были подделаны?И raiserror, если они есть.Как вы думаете, все это правильный путь?Любое предложение?