Длина SQL команды

Va1entin
Дата: 20.01.2005 09:20:52
Чем ограничена длина строки в sqlcommand.commandtext?
Дело в том, что я хочу запускать длинный batch...
Misha 'Karn' Ivanov
Дата: 20.01.2005 10:35:06
Ничем. Это String. Только хинт я вам дам: SQL-injection еще никто не отменял, поэтому лучше используйте ХП и ее имя для CommandText
Va1entin
Дата: 20.01.2005 11:06:56
Хинт верный. Интранет у меня большой.
Да и вообще, скомпилированная ХП,
если её правильно написать,
наверное, быстрее выполняться будет,
меньше данных через сеть пересылается.
Так и сделаю.
Спасибо.
Alexey Kudinov
Дата: 20.01.2005 12:32:30
Добавлю, что вынос логики в SP сам по себе не спасает от SQL-injection
А спасает только в сочетании с грамотной политикой прав.
Misha 'Karn' Ivanov
Дата: 20.01.2005 13:12:20
Alexey Kudinov
Добавлю, что вынос логики в SP сам по себе не спасает от SQL-injection
А спасает только в сочетании с грамотной политикой прав.



отвечу:) Вообще то, права хорошо, но если это не процедура

CREATE Procedure str_exec
@str varchar(5000)
AS
exec @str
GO

То спасает великолепно.Я по крайней мере не вижу, как можно через ХП MS SQL Server-а выполнить SQL-иньекцию
Va1entin
Дата: 20.01.2005 13:20:29
2Alexey Kudinov
Говорим SQL-injection, подразумеваем права на выполнение.
Думаю, что Миша в первом ответе это и имел ввиду.

2Misha 'Karn' Ivanov
А @str = 'drop ...'?
Alexey Kudinov
Дата: 20.01.2005 13:24:03
2 Va1entin
Во первых вы сами привели пример с Динамич. SQL
А во вторых - есть еще строка подключения :)
Alexey Kudinov
Дата: 20.01.2005 13:26:07
Alexey Kudinov
2 Va1entin
Во первых вы сами привели пример с Динамич. SQL
А во вторых - есть еще строка подключения :)
Извиняюсь, я хотел написать 2 Misha 'Karn' Ivanov
Va1entin
Дата: 20.01.2005 13:29:36
2Alexey

А каких неприятностей ожидать от строки подключения?
Там тоже команда?
Misha 'Karn' Ivanov
Дата: 20.01.2005 13:29:58
Va1entin
2Alexey Kudinov
Говорим SQL-injection, подразумеваем права на выполнение.
Думаю, что Миша в первом ответе это и имел ввиду.


Нет,я имел ввиду не это. Я имел ввиду что если у вас процедура авторизации имеет вид:

Create Procedure Authorize
@Login varchar(50),
@Pass varchar(50)
AS
select * from LoginPassword where Login=@Login AND [Password]=@Pass
GO

И вы ее вызываете так:
SqlCommand cmdAuth = new SqlCommand(this._sqlConn);
cmdAuth.CommandText = "Authorize";
cmdAuth.CommandType = CommandType.StoredProcedure;
cmdAuth.Parameters.Add("@Login", SqlDbType.varchar).Value = tbxLogin.Text;
cmdAuth.Parameters.Add("@Pass", SqldbType.varchar).Value = tbxPass.Text;
SqlDataReader dr = cmdAuth.ExecuteReader();
dr.read();
//нет записей если неверные логин пароль

то все нормально и спокойно. А если вы делаете так:
SqlCommand cmdAuth = new SqlCommand(this._sqlConn);
cmdAuth.CommandText = "select * from LoginPassword where Login='"
+ tbxLogin.Text +"' AND [Password]='" + tbxPass.Text +"'";
cmdAuth.CommandType = CommandType.Text;
SqlDataReader dr = cmdAuth.ExecuteReader();
dr.read();

то вроде тоже все пучком. Но если в tbxPass введут такой текст:
adadasdad' OR 1=1 --
То ваша команда выполнится всегда успешно. Вот это и есть SQL-иньекция и именно ее я и имел ввиду.






Va1entin

2Misha 'Karn' Ivanov
А @str = 'drop ...'?


Этот пример я и привел как пример уязвимой ХП:)