簡體   English   中英

如何在SQL Server Express 2008中創建新數據庫並允許連接?

[英]How to create new database in SQL Server Express 2008 and allow for connecting?

我有一個在我的本地PC上運行的SQL Server Express 2008 R2實例。

  • 身份驗證是“混合”的,因此我可以使用Windows登錄使用SQL Server身份驗證登錄。
  • 命名管道已啟用
  • TCP / IP已啟用
  • 允許遠程連接

我采取了以下步驟來創建一個新的登錄和數據庫:

  1. 我使用SQL Server Management Studio Express登錄並創建了新的登錄名
  2. 我使用新創建的登錄名作為所有者創建了一個新數據庫

新登錄

登錄詳細信息

新數據庫

數據庫安全

數據庫所有者概述

正如您在上一個屏幕截圖中看到的那樣,有一個用戶名 “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工作!

  1. 不要嘗試將dbo映射到您的登錄名。 dbo是一個特殊的用戶。

  2. 要使用SQL身份驗證連接到SQL Server,您需要通過登錄而不是用戶進入(讓我們暫時將Denali中包含的數據庫留在討論中)。 因此,您永遠不應該嘗試在連接字符串中指定數據庫用戶(如dbo)。 我強烈建議創建一個登錄,然后在數據庫級別創建一個與登錄名相同的用戶 - 這比嘗試將login_foo映射到user_bar要困難得多。 我還建議遠離用戶或登錄的特殊字詞(例如dbo)。

  3. 我建議學習設置這些東西所需的DDL和存儲過程,並停止指向並點擊UI。 雖然對於某些任務而言UI可能看起來更快,但是很難重現您已完成的工作,並且需要花費大量精力來確定您在對話框中的選項卡上設置了哪些選項我們可以'看。 如果您使用腳本,您可以發布一個腳本,我們可以在不詢問其他問題的情況下看到它,您也可以保存該腳本並參考它(這將至少與您的記憶一樣好,但幾乎可以肯定更好)。

以下是我將如何添加服務器登錄,將它們作為用戶放入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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM