巧用DAC解決SQL Server登錄失敗的問題
連接SQL Server數(shù)據(jù)庫的時候,使用window身份登錄,提示連接失敗,我們這時候可以巧用DAC登錄來解決,首先對登錄失敗過程進(jìn)行了說明,以便于我們找出原因。
為了安全,我把sa用戶設(shè)置為禁用,又因為我想在數(shù)據(jù)庫服務(wù)器上控制,只允許固定IP地址連接訪問,所以建立了一個觸發(fā)器,如下:
- USE master
- GO
- CREATE TRIGGER tr_LoginCheck
- ON ALL SERVER
- FOR LOGON
- AS
- IF EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]', 'varchar(15)') <> '192.168.1.1'
- ROLLBACK TRAN
- GO
允許的IP地址是另一臺服務(wù)器的IP地址,執(zhí)行該觸發(fā)器后,當(dāng)我在服務(wù)器上使用Windows身份登錄的時候,提示錯誤“無法連接到機(jī)器名\實例名”,其他信息:由于執(zhí)行觸發(fā)器,登錄名“機(jī)器名\用戶”的登錄失敗。已將數(shù)據(jù)庫上下文更改為“master”。已將語言設(shè)置更改為簡體中文(Microsoft SQL Server,錯誤:17892)。
而我在另一臺服務(wù)器上登錄時,因為登錄帳號只能訪問SQL 服務(wù)器某一個數(shù)據(jù)庫,所以登錄的時候也出現(xiàn)錯誤:
無法連接到服務(wù)器XXX.XXX.XXX.XXX。
服務(wù)器:消息4064,級別16,狀態(tài)1。
[Microsoft][ODBC SQL Server Driver][SQL Server]無法打開用戶默認(rèn)數(shù)據(jù)庫。登錄失敗。
各種提問,某大神告訴我用DAC登錄,老實說,孤陋寡聞了,第一次知道這個,于是本機(jī)登錄,命令行方式下執(zhí)行sqlcmd -A -S sql服務(wù)器名,然后執(zhí)行刪除觸發(fā)器的腳本:
- DROP TRIGGER tr_LoginCheck ON ALL SERVER
但是詭異的是有錯誤提示“消息 3701,級別 11,狀態(tài) 5,服務(wù)器 XXX,第 1 行 無法對觸發(fā)器'tr_LoginCheck' 執(zhí)行刪除,因為它不存在,或者您沒有所需的權(quán)限。”
執(zhí)行:
- select * from sys.server_triggers
卻又沒有結(jié)果,嘗試著用客戶端登錄,卻又可以登錄了。
以上就是用DAC實現(xiàn)登錄的過程,如果你有更好的解決辦法,歡迎您與我們分享,謝謝!
【編輯推薦】