2011-03-07 65 views
14

嘿大家,有一些SQL和C#交互的麻煩。我在安裝程序中創建數據庫和登錄腳本,然後實際的客戶端程序應該登錄,但每次運行客戶端程序時,它都會彈出,並在日誌文件中出現此錯誤。 (順便說一句:客戶端程序在另一臺機器上的預先存在的數據庫上工作。)SQL登錄失敗,用戶X ...只有Windows認證

SQL登錄失敗,用戶'用戶'。原因:嘗試使用SQL身份驗證登錄失敗。服務器僅配置爲用於Windows身份驗證。 [客戶端:] 錯誤18456,嚴重程度:14狀態:58

這些都是我失去了

CREATE LOGIN [user] WITH PASSWORD='pass', DEFAULT_DATABASE=[data], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF 
EXEC sys.sp_addsrvrolemember @loginame = N'user', @rolename = N'sysadmin' 
EXEC sys.sp_addsrvrolemember @loginame = N'user', @rolename = N'serveradmin' 
USE [data] CREATE USER [user] FOR LOGIN [user] WITH DEFAULT_SCHEMA=[dbo] 

用於創建登錄/用戶的命令......什麼?
感謝您的幫助!

+0

您是否嘗試在用戶之前添加域?例如:'myDomain \ user' – 2011-03-07 17:35:46

回答

31

您的SQL Server實例設置爲僅支持Windows身份驗證。您的創建用戶腳本嘗試創建一個SQL用戶帳戶,該帳戶由於數據庫實例僅支持Windows身份驗證而失敗。

要允許您的數據庫支持您的創建用戶語句,請打開SSMS。右鍵單擊您的服務器並單擊屬性。轉到安全選項卡,並將您的服務器身份驗證從Windows身份驗證模式更改爲SQL Server和Windows身份驗證模式。

一旦完成,您的腳本應該可以正常工作。

+0

實際上,它在創建時不會失敗,它會嘗試使用它登錄失敗。服務器屬性的變化已經發揮作用,但腳本會做什麼。我寧願不將SSMS安裝到我們所有的客戶機器上,只是爲了完成這一項任務。 – 2011-03-07 19:01:08

+0

從Windows到混合模式的安全更改是一次性更改。完成一次後,您無需擔心在所有客戶端計算機上安裝SSMS。據我所知,這是你安裝SQL Server時必須指定的東西,或者你可以在SSMS中重寫的東西,請參閱http://stackoverflow.com/questions/1393654/how-to-change-from-sql-server -windows-mode-to-mixed-modesql-server-2008查看詳細信息 – 2011-03-07 19:15:34

+0

我正在使用的程序使用微軟的集成發佈服務,只需點擊一下即可安裝我的先決條件。其中之一就是sql server 2008 express edition。它只會要求我在安裝數據庫服務器時同意EULA。所以我的選擇真的限於安裝SSMS或手動安裝MSSQL'08 express將其更改爲SQL Server和Windows身份驗證模式? ...或者我只是在註冊表中找到了一種方法...真的想編寫一個查詢來執行此操作... – 2011-03-07 19:45:45