簡體   English   中英

SQL 服務器不存在或訪問被拒絕

[英]SQL Server does not exist or access denied

我們目前正在遷移服務器(2005 年到 2008 年),我們的主機備份了 SQL 數據庫並將其轉移到新服務器。

我已經轉移了網站文件並更改了連接字符串和 global.asa 文件中的 IP 地址。

所以從技術上講,我們在新服務器上有一個鏡像,但是當我嘗試啟動一個連接到 SQL 的頁面時,我收到以下錯誤。

SQL_Server_does_not_exist_or_access_denied。

檢查您的 TCP/IP 端口是否啟用

要檢查它:

-- 從啟動程序打開SQL Server 配置管理器
-- 展開SQL Server 網絡配置
-- 單擊XXXX 的協議
-- 右鍵單擊TCP/IP並打開屬性
- 啟用 TCP/IP
- 在 IP 地址選項卡中,在最后一個選項 (IPAll) 中設置端口 1433

這種情況下的錯誤消息很可能是正確的。 首先,驗證從您到新服務器的網絡路徑是否有效,並且您可以使用指定的用戶 ID/密碼進行連接。

1) 打開 Management Studio 並嘗試通過 IP 地址連接到 SQL Server 實例。 (順便說一句,如果您還沒有使用 SQL Server 用戶 ID/密碼,因為您在 Internet 主機上並且很可能沒有 Windows 身份驗證的 AD 上下文,您可能需要使用它。)

2) 如果您確實可以使用 Management Studio 連接到實例和數據庫,那么您可能在某處錯過了連接字符串。 嘗試為所述連接字符串僅保留 1 個位置,通常在配置文件中。 檢查詳細報告的錯誤行以發現正在使用哪個連接字符串並驗證它是否反映了新的服務器 IP。

如果在 SQL Config --> TCP/IP 連接中未正確配置克隆服務器的 IP,也會發生同樣的錯誤。

在 SQL TCP/IP 配置中使用錯誤配置的 IP 確實可以讓您:

  1. 使用 ODBC 連接使用服務器名稱從客戶端計算機連接
  2. 使用帶有 1433 端口號和服務器名稱的 TELNET 連接

當服務器從另一個 SQL 服務器克隆時會發生這種情況,該服務器將主服務器的 SQL IP 配置作為殘留物。

但是客戶端應用程序無法使用連接字符串進行連接,盡管使用服務器名稱並顯示以下消息:

[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied

執行以下操作以在 SQL Server 上進行驗證:

  1. 通過執行 IPCONFIG 注意服務器本身的 IP(可能是管理員在克隆盒子后更新了機器的 IP)
  2. 打開 SQL Server 配置管理器
  3. 展開 SQL Server 網絡配置
  4. 為 MSSQLSERVER 選擇協議
  5. 雙擊右側的 TCP/IP
  6. 切換到 IP 地址選項卡
  7. 向下滾動到 IPv4 部分以驗證它是否與機器本身的 IP 地址相同。 如果沒有,請修復 IP。 如果它是正確的,這不是問題。

在新計算機上設置安裝時,我也遇到了這個問題。

我遇到的連接問題是由於托管 MSSQL 的服務器上的防火牆設置。 該設置允許單個 IP 地址訪問它,這在我們的環境中“有效”,因為我們的管理員將 IP 地址描述為“粘性”。 一旦向我的新機器的 IP 地址授予防火牆訪問權限,我在本地 WAMP 設置中運行的 PHP odbc_connect(...)語句立即完成。

與許多問題一樣,遇到它們的方法可能不止一種,但我想盡可能明確地說明我的經歷。

如果我在我的 PC 上安裝了自己的 MSSQL 管理工作室,這可能會更清楚一些,但我沒有。

在包含 MSSQL 的服務器上的入站規則中,我發現了一個引用 MSSQL 實例的規則,並且確實在屬性選項卡“范圍”下找到了我舊機器的 IP 地址作為“遠程 IP 地址”。 希望我每次拿到下一台機器時都能記住這一點! (退役PC的IP已被刪除)

@Darren,如果你能在你接受的答案下發表評論,很高興知道@Tahbaza 的哪些建議讓你做出了決定。

您的數據庫的憑據是否配置為使用 SQL 用戶和登錄名而不是 Windows 用戶和登錄名?

如果是這樣,您可能需要將數據庫中的 SQL 用戶重新映射到服務器上的 SQL 登錄名。 要掃描以查看是否有此問題,您可以使用EXEC sp_change_users_login 'Report' 'Auto_Fix'選項將自動更正系統發現的問題。 您還可以運行ALTER USER $User WITH LOGIN $Login來單獨手動更正每個映射。

http://technet.microsoft.com/en-us/library/ms174378.aspx

導致此問題的原因是舊服務器上數據庫中為 SQL 用戶生成的 SID 與新數據庫上 SQL 登錄名的 SID 不匹配。 存儲過程糾正了差異。

從 Qt 連接到也在我的計算機上運行的 Microsoft SQL Server 2014 時,我遇到了這個問題......

我使用了以下 QODBC 連接字符串:

db.setDatabaseName("Driver={SQL Server};Server=DESKTOP-F6T7JPD\\sql_Instance_Name;Database=master;Uid=sa;Pwd=your_pwd;");

我只遇到了兩個問題:

  1. 確定用於服務器的內容,這必須是在 SQL 服務器實例上配置的服務器名稱,這可以通過打開“MicrosoftSql2014 management Studio”找到,然后通過查看屬性我找到了名稱( DESKTOP-F6T7JPD\\sql_Instance_Name

  2. 第二個問題實際上是必須通過在我的 PC 名稱和實例名稱之間添加另一個反斜杠\\來修改此名稱,因此在管理工作室中找到的名稱將類似於: PC_Name\\Sql_Instance 注意“\\”,...這必須作為Pc_Name\\\\Sql_Instance
    注意 PC 名稱和實例名稱之間的\\\\

一種可能的原因是服務器沒有運行。 如果即使在 Management Studio 中也無法連接,請檢查 SQL Server 服務是否已啟動,並且已將其配置為自動,以便在啟動時啟動。

如果在連接到 SQL 服務器時出現訪問被拒絕錯誤,請確保在 SQL 服務器網絡配置下啟用了 TCP/IP 協議。 請看下面的屏幕截圖

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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