2012-03-05 3 views
0

У меня есть таблица с названием категории. Категория столбца имеет значения, такие как «6,7,9,22,44». Я хотел бы знать, эффективен ли этот подход для SQL Server 2005 или 2008. В основном я передаю значение «6,7,9,22,44» в хранимую процедуру. Я открытые ссылки/предложения для лучшего подхода.Dynamic sql - Это хороший подход?

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~ Примечание. Я должен уточнить, что я поддерживаю приложение, написанное кем-то другим, а столбец категории уже имеет значения, разделенные запятой. Я бы поместил данные в отдельную таблицу, но я не смогу это сделать в краткосрочной перспективе. Что касается SQL Injection - столбец заполняется значениями, отмеченными из списка флажков. Пользователи не могут вводить или вводить какие-либо данные, которые могут повлиять на конкретный сохраненный процесс. Возможно ли использование SQL-инъекций в этом сценарии? Пожалуйста, объясните, как. Благодарю. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~

CREATE PROCEDURE [dbo].[GetCategories] 
    -- Add the parameter that contain the string that is passed in 
    @catstring varchar(300) 
AS 
DECLARE @SQLQuery nvarchar(500); 
BEGIN 

    /* Build Transact-SQL String with parameter value */ 
    SET @SQLQuery = 'select id,category from categoryTable where id in ('+ @catstring +')' 
    /* Execute Transact-SQL String */ 
    EXECUTE(@SQLQuery) 
END 
GO 
+3

Нет. Ваш код подвержен [SQL injection] (http://bobby-tables.com/). –

+0

Неверно хранить значения, разделенные запятыми, в столбце. –

+0

Вы используете C# или другой язык программирования на стороне сервера? – Meryovi

ответ

2

Это очень плохая идея, потому что она оставляет вашу систему открытой для SQL-инъекции. Злоумышленник может передать строку типа «') DROP TABLE categoryTable -« (обратите внимание на одну цитату в начале строки) или что-то еще хуже.

Существует множество способов защитить себя от SQL-инъекций, и есть много ресурсов. Я предлагаю вам исследовать его самостоятельно, так как это слишком большая область для охвата в одном вопросе.

Но для вашей конкретной проблемы, я хотел бы предложить этот сайт, чтобы узнать, как создать таблицу оцененной параметр для передачи в списке целочисленных идентификаторов: http://www.sommarskog.se/arrays-in-sql-2008.html

Это справедливо только для SQL Server 2008, вы должны следовать ссылки в этой статье для решений для SQL Server 2005, если вам нужно.

Смежные вопросы