![](/img/trans.png)
[英]Visual Studio 2008 web express: create new SQL Server database
[英]How to create new database in SQL Server Express 2008 and allow for connecting?
我有一個在我的本地PC上運行的SQL Server Express 2008 R2實例。
我采取了以下步驟來創建一個新的登錄和數據庫:
正如您在上一個屏幕截圖中看到的那樣,有一個用戶名 “dbo”,它“屬於” 登錄名 “mylogin”。 我正在嘗試使用以下連接字符串,但它不起作用:
數據源=(本地)\\ sqlexpress;初始目錄= newdb;用戶ID = mylogin;密碼= mypass
SQL Server Management Studio中的錯誤日志表明:
用戶'mylogin'登錄失敗。 原因:無法打開顯式指定的數據庫。 [客戶:xxx.xxx.x.xx]。 錯誤:18456,嚴重性:14,狀態:38
如果我將連接字符串中的用戶ID更改為“dbo”,則會報告以下錯誤:
用戶'dbo'登錄失敗。 原因:找不到與提供的名稱相匹配的登錄信息。 [客戶:xxx.xxx.x.xx]。
我現在開始變得非常瘋狂。 我根本不知道如何訪問任何數據庫......我的SQL Server實例是否已損壞?
當我嘗試從我的ASP.NET應用程序連接時,只會出現此問題。 使用SQL Server Management Studio Express連接,使用提到的憑據DOES工作!
不要嘗試將dbo映射到您的登錄名。 dbo是一個特殊的用戶。
要使用SQL身份驗證連接到SQL Server,您需要通過登錄而不是用戶進入(讓我們暫時將Denali中包含的數據庫留在討論中)。 因此,您永遠不應該嘗試在連接字符串中指定數據庫用戶(如dbo)。 我強烈建議創建一個登錄,然后在數據庫級別創建一個與登錄名相同的用戶 - 這比嘗試將login_foo映射到user_bar要困難得多。 我還建議遠離用戶或登錄的特殊字詞(例如dbo)。
以下是我將如何添加服務器登錄,將它們作為用戶放入newdb數據庫,將它們添加到db_owner(非dbo)角色,並將其默認數據庫設置為newdb。 在Management Studio中打開一個新的查詢窗口並連接到master,然后運行以下命令:
USE [master];
GO
CREATE LOGIN Ropstah_test WITH PASSWORD = 'secure password';
GO
USE newdb;
GO
CREATE USER Ropstah_test FROM LOGIN Ropstah_test;
GO
EXEC sp_addrolemember 'db_owner', 'Ropstah_test';
GO
USE [master];
GO
ALTER LOGIN Ropstah_test WITH DEFAULT_DATABASE = newdb;
GO
現在,來自.NET的連接字符串應如下所示:
Data Source=.\SQLEXPRESS;Initial Catalog=newdb;User ID=Ropstah_test;Password=secure password;
如果這不起作用,我將驗證您的ASP.NET應用程序是否在與SQL Express實例相同的計算機上運行。 網絡服務器也在你的機器上,對嗎? 除此之外,這應該有效,如果它不起作用,還有一些其他變量並不明顯。 您不必讓用戶成為實際的數據庫所有者進行連接,但如果上述內容仍無法解決問題,請查看以下腳本是否更改了行為或至少更改了日志中記錄的錯誤消息:
USE newdb;
GO
DROP USER Ropstah_test;
GO
USE [master];
GO
ALTER AUTHORIZATION ON DATABASE::newdb TO Ropstah_test;
這會將用戶從數據庫中刪除,然后將其重新添加為官方所有者(這與db_owner角色不同,這實際上只是授予權限模板的簡寫)。 這不應該是必要的,但它可能有助於理清為什么你不能讓這個通常簡單的過程工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.