SQL Server 2005 SysAdmin 登錄審計的詳細介紹
以下的文章主要向大家描述的是SQL Server 2005 SysAdmin 登錄審計,如果是以sysadmin角色的成員在SQL Server數據庫中出現(xiàn)時,我都有審計這一過程的想法。審計所有成功的登錄可以提供信息,然而,它記錄每一次連接。
Sysadmin登錄在一片喧鬧聲中正失去它自己的地位。我該怎樣做才能只通過SQL Server 2005 sysadmin登
無論何時以sysadmin角色的成員登錄到我的SQL Server中,我都想審計這一過程。審計所有成功的登錄可以提供信息,然而,它記錄每一次連接。Sysadmin登錄在一片喧鬧聲中正失去它自己的地位。我該怎樣做才能只通過sysadmin登錄到我的SQL Server實例呢?
專家解答
在SQL Server 2005 Service Pack 2中,微軟把登錄觸發(fā)器引入到核心功能中。與DDL和DML觸發(fā)器一樣,這些觸發(fā)器在特定的事件上被激活,在這個例子中,無論何時登錄到SQL Server實例中,它都會被激活。當某個特定角色的成員登錄時,比如syadmin固定服務器角色,我們可以使用一個登錄觸發(fā)器來審計。
為了審計SQL Server 2005 sysadmin固定服務器角色的成員,我們需要使用兩個系統(tǒng)視圖:sys.server_role_members 和 sys.server_principals。當登錄事件發(fā)生時,我們將連接這兩個視圖來確定這個登錄是不是sysadmin角色的成員。我們可通過如下連接兩個視圖來得到這些成員:
- SELECT sp.principal_id
- FROM sys.server_role_members srm
- INNER JOIN sys.server_principals sp
- ON srm.member_principal_id = sp.principal_id
- WHERE srm.role_principal_id = (
- SELECT principal_id
- FROM sys.server_principals
- WHERE [Name] = 'sysadmin')
這個查詢將是我們登錄觸發(fā)器的基礎。通過在我們代碼的最后一部分增加一個AND從句,我們可以測試引入的登錄是否是SQL Server 2005 sysadmin固定服務器角色的成員。
當事件發(fā)生時,我們也需要一些空間來記錄這些事件。其中最簡單的方法是在一個工作數據庫中使用一張表來達到這個目的。考慮到這些例子的目的性,我將假設這張表能夠以DBAWork名義存儲在一個DBA數據庫中。以下是相應的代碼:
- CREATE TABLE dbo.AuditSysAdminLogin
- (AuditEventId INT IDENTITY(1,1) NOT NULL,
- EventTime DATETIME NOT NULL,
- ServerLogin NVARCHAR(100) NOT NULL,
- CONSTRAINT PK_AuditSysAdminLogin PRIMARY KEY CLUSTERED (AuditEventID));
- GO
一旦我們有了審計表,我們就可以創(chuàng)建自己的登錄觸發(fā)器。登錄觸發(fā)器的基本句法和DDL觸發(fā)器的句法相類似,如下顯示:
- CREATE TRIGGER
- ON ALL SERVER
- FOR LOGON
- AS
按照這種格式和使用以上確定的查詢來確定哪一個是SQL Server 2005 SysAdmin角色的成員,那么我們缺少的唯一方面是確認登錄的一種方式。這里有一個系統(tǒng)功能ORIGINAL_LOGIN(),它提供了相關的信息,現(xiàn)在把它放在一起,那么下面就是我們的登錄觸發(fā)器:
- USE master;
- GO
- CREATE TRIGGER trigLogon_CheckForSysAdmin
- ON ALL SERVER
- FOR LOGON
- AS
- BEGIN
- IF EXISTS (
- SELECT sp.principal_id
- FROM sys.server_role_members srm
- JOIN sys.server_principals sp
- ON srm.member_principal_id = sp.principal_id
- WHERE role_principal_id = (
- SELECT principal_id
- FROM sys.server_principals
- WHERE NAME = 'sysadmin')
- AND ORIGINAL_LOGIN() = sp.NAME)
- BEGIN
- INSERT INTO DBAWork.dbo.AuditSysAdminLogin
- (EventTime, ServerLogin)
- VALUES
- (GETDATE(), ORIGINAL_LOGIN())
- END;
- END;
- GO
以上的相關內容就是對SQL Server 2005 SysAdmin登錄審計的介紹,望你能有所收獲。
【編輯推薦】