2012-07-24 119 views
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() 

loginusername是,我消毒的用戶輸入(如最好我可以),並在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() 

但是,這並不工作,因爲CREATE LOGINCREATE USER似乎並沒有允許參數值,由podiluska提到:

「@username」附近的語法不正確。

有沒有更好的方式從用戶輸入創建登錄和用戶?

+0

@Jupaol:OP想要創建數據庫[登錄](http://msdn.microsoft.com/en -us/library/ms189751.aspx),而不是成員用戶。 – 2012-07-24 19:32:22

+0

存儲過程如何? – 2012-07-24 19:35:13

+0

@WaqarJanjua起初我沒有考慮過它,因爲'sp_addlogin'已被棄用,並且參數對我無效。感謝您提及它 - 您的評論讓我找到[this](http://stackoverflow.com/questions/837358/sql-create-logon-cant-use-parameter-as-username)。 – Zhihao 2012-07-24 21:54:18

回答

0

一個可能的選擇是使用存儲的過程,我之前避免了由於sp_addloginsp_adduserdeprecated(如podiluska所述)。

然而,似乎可以通過在與EXEC一個字符串,其在this question描述構建他們使用CREATE LOGINCREATE USER在存儲過程中。包含在問題中的參數化查詢代碼片段然後可以適合於使用存儲過程有細微的變化:

cmd.CommandType = CommandType.StoredProcedure 
cmd.CommandText = "sp_storedprocname" 
1

您不能參數化CREATE USERCREATE LOGIN命令。

您可以創建一個對(不建議使用)sp_addloginsp_adduser使用參數的存儲過程,但與Windows登錄創建用戶,你需要使用CREATE LOGIN,因此動態SQL。