Как построить параметризованный запрос или пользователь, выходящий из этого оператора SQL в C #? - PullRequest
3 голосов
/ 26 августа 2011
command.CommandText = String.Format("CREATE LOGIN {0} WITH password='{1}'", loginName, password);

loginName и пароль основаны на вводе данных пользователем

Я понимаю, что делать это таким образом - плохая практика, но как избежать SQL-инъекций здесь?

Ответы [ 5 ]

8 голосов
/ 26 августа 2011

Позвоните sp_addlogin вместо этого - он уже параметризован

0 голосов
/ 03 января 2012

Вы можете параметризовать такие запросы, заключив ваш запрос DDL в exec следующим образом:

command.CommandText = "exec ('CREATE DATABASE ' + @DB)"

Если затем добавить параметр для @DB как обычно, это должно работать (по крайней мере, в t-sql).

Должно быть возможно использовать CREATE LOGIN таким же образом.

0 голосов
/ 27 августа 2011

Кажется, что самый правильный способ сделать это - использовать SQL Server SMO SDK. Мне не нужны никакие другие движки SQL, так как мы никогда точно не перейдем с SQL Server.

0 голосов
/ 26 августа 2011

Можно попробовать что-то вроде этого:

SqlCommand cmd = new SqlCommand(
                "CREATE LOGIN @login WITH password=@pwd", conn);
SqlParameter param  = new SqlParameter();
param.ParameterName = "@login ";
param.Value         = usertextforlogin; 
cmd.Parameters.Add(param);

param  = new SqlParameter();
param.ParameterName = "@pwd";
param.Value         = usertextforpwd;   

cmd.Parameters.Add(param);
0 голосов
/ 26 августа 2011

Вот как можно параметризовать ваш SQL. Вы также можете проверить эту статью о написании DAO , которая обрабатывает подобные вещи. Я не уверен, что вы можете параметризовать LoginName. Вам, вероятно, лучше всего позвонить sp_addlogin, как сказал предыдущий автор.

       command.CommandText=  @"CREATE LOGIN @LoginName WITH password=@Password";
        command.CommandType = CommandType.Text;
        command.Parameters.Add(new SqlParameter()
            {
                ParameterName = "@LoginName",
                Value = "MyLoginNameValue",
                SqlDbType = SqlDbType.NVarChar,
                Size = 50
            });
        command.Parameters.Add(new SqlParameter()
            {
                ParameterName = "@Password",
                Value = "MyPasswordValue",
                SqlDbType = SqlDbType.NVarChar,
                Size = 50
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...