在登入觸發器錯誤情況下串連SQL Server的方法

來源:互聯網
上載者:User

錯誤:

圖一

如果不能很好地執行登入觸發器,那麼將會導致登入失敗。

例如,如果建立了這個觸發器,那麼就可以設計下面的代碼來達到失敗的目的。

複製代碼 代碼如下:CREATE TRIGGER BadLogonTrigger ON ALL SERVER FOR LOGON
AS
BEGIN
INSERT INTO BadDB.dbo.SomeTable VALUES ('Test');
END;
GO

沒有一個資料庫稱為BadDB,這意味著在BadDB內也沒有一張表叫SomeTable。因此,任何登入到該伺服器的正常嘗試都會失敗,因為這個觸發器涉及到一個不存在的對象。為了糾正這一問題,你也需要:
使用一個現有的建立串連,該串連擁有合適的許可權。
使用專用管理員連接(DAC)串連SQL Server。
如果你現有的一個串連可以刪除觸發器或者使觸發器不可用,那麼請使用現有的串連來糾正這個問題。但是可能在一些情況下,你的串連沒有這種功能,那麼你需要依賴專用管理員連接。
預設情況下,這個專用管理員連接只能在本機伺服器中使用。這就意味著,你需要通過登入到本機電腦或者使用另一種方式如遠端桌面來串連。一旦你登入了,你就可以使用SQLCMD或者SSMS。
如果你使用SQLCMD,你要通過該專用管理員連接指定一個-A開關來串連。如果你通過SSMS串連,那麼要確定通過在伺服器名前面指定ADMIN:來串連,二。

圖二
產生這種現象的原因是SQL Server通過專用管理員連接把對串連的檢查和資源減到最少。當一個或多個進程消耗一個SQL Server而造成登入不能正常進行時,這種方法就給資料庫管理員一個“後門”。當通過DAC串連時,SQL Server不做的一件事是執行任何登入觸發器。因此,你可以使用DAC,你不會被這個不好的觸發器所阻礙。然後如果需要,你可以使這個觸發器不可用或者刪除這個觸發器。
例如,一旦通過DAC串連,我就可以執行下面的命令來完全擺脫這個觸發器: 複製代碼 代碼如下:DROP TRIGGER BadLogonTrigger ON ALL SERVER;
GO

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.