2

SQL Server で ASP.NET (VB.NET) を使用しており、ユーザーが Web フォームからサーバー ログインとデータベース ユーザーを作成できるようにしたいと考えています。

ログインとユーザーを作成するコマンドを実行して、これを機能させました。

Dim cmd As New OleDb.OleDbCommand(
    "CREATE LOGIN [" & login & "] FROM WINDOWS WITH DEFAULT_DATABASE = Db; " & _
    "CREATE USER " & username & " FOR LOGIN [" & login & "]; ",
    connection)
cmd.ExecuteNonQuery()

loginとはusername、サニタイズして (できる限り) に直接挿入するユーザー入力ですCommandText。これが機能している間、私はこのようにすべきだとは思わない。

次のように、パラメーター化されたクエリに似たものを望んでいます。

Dim cmd As New OleDb.OleDbCommand(
    "CREATE LOGIN [@login] FROM WINDOWS WITH DEFAULT_DATABASE = Db; " & _
    "CREATE USER @username FOR LOGIN [@login]; ",
    connection)
cmd.Parameters.AddWithValue("@login", login)
cmd.Parameters.AddWithValue("@username", username)
cmd.ExecuteNonQuery()

ただし、podiluskaで言及されているように、パラメーター化された値を許可していないように見えるためCREATE LOGIN、これは機能しません。CREATE USER

「@username」付近の構文が正しくありません。

ユーザー入力からログインとユーザーを作成するより良い方法はありますか?

4

2 に答える 2

1

CREATE USERandCREATE LOGINコマンドをパラメーター化することはできません。

sp_addlogin(非推奨)およびでパラメーターを使用するストアド プロシージャを作成できますsp_adduserが、Windows ログインでユーザーを作成するには、CREATE LOGIN動的 SQL を使用する必要があります。

于 2012-07-24T19:32:38.717 に答える
0

sp_addlogin考えられるオプションの1つは、ストアドプロシージャを使用するsp_adduserことです.

ただし、この質問で説明されているように、を使用CREATE LOGINCREATE USERて文字列に構築することにより、ストアド プロシージャで使用できるようです。質問に含まれるパラメーター化されたクエリ コード スニペットは、小さな変更を加えてストアド プロシージャを使用するように適合させることができます。EXEC

cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "sp_storedprocname"
于 2012-07-24T21:44:37.343 に答える