成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

用SQL Server 2005內置工具建立審查系統

2010-08-28 10:50:18來源:西部e網作者:

  作為收費應用方面的數據庫管理員(DBA),公司首席信息官(CIO)經常邀請我與Sarbanes-Oxley審查員開會討論公司數據的安全與整合問題。簡單地說,他希望我們通過適當的文件回答許多問題:如誰訪問了我們的數據、如何批準訪問權、以及我們如何對訪問進行監控,以防止某些人入侵、登錄數據或做他們不該做的事情。

  我的CIO與我了解了一些證明Sarbanes-Oxley法案遵守的商業解決方案。但是,我們決定應用SQL Server 2005內置工具來建立我們“自產的”審查系統。

  Server 2005新功能

  在使用SQL Server 2005之前,我們應用數據操作語言(DML)觸發器來了解數據庫中何時會發生數據變化。我們可以指著審查日志說,這里有一個列表,列出了自上次審查以來我們發布的所有插入(INSERT)、更新(UPDATE)與刪除(DETELE)語句,包括執行語句的時間、日期、個人或程序。

  DML觸發器是一個數據庫引擎啟動的專用存儲程序,它在為數據變化建立審查索引方面有很大的作用。但是,DML觸發器只有在數據發生變化時才會啟動。在使用SQL Server 2005之前,我們沒有較好的辦法來追蹤數據庫服務器中的結構或安全變化。

  SQL Server 2005支持數據定義語言(DDL)觸發器。在發生服務器或數據庫級事件時,這些觸發器才會建立并啟動。DDL觸發器允許我們追蹤數據庫中的重要變化——有意的、無意的或惡意的改變。

  追蹤所有注冊

  下面是一個DDL觸發器改善數據庫監控能力的典型例子。在以前版本的SQL Server中,我們很難了解何時建立新注冊、何時建立新數據庫、或是何時給不同用戶分配了新許可。

  在SQL Server 2005中,追蹤這樣的安全變化要相對容易一些。為說明這一點,無論用戶是誰,讓我們設計了一個追蹤服務器上所有行為的解決方案。我們將用DDL觸發器事件DDL_LOGIN_EVENTS來建立審查索引。這個事件觸發器將尋找服務器上的任何注冊事件,包括所有的建立注冊(CREATE LOGIN)、修改注冊(ALTER LOGIN)與刪除注冊(DELETE LOGIN)事件。

  在SQL Server 2005中,通過運行CREATE DATABASE DDLTriggerTest語句建立一個審查索引數據庫,然后定義下列域:

  IDCol SMALLINT IDENTITY(1,1) PRIMARY KEY,

  XMLEvent XML

  DatabaseName VARCHAR(50)

  SystemUser VARCHAR(50)

  EntryDate DATETIME DEFAULT (GETDATE())

  注意表格中利用了XML數據類型,這是SQL Server 2005中新增的功能。顧名思義,它的作用是保存XML數據。

  一旦表格做好準備追蹤事件,就可以建立必要的觸發器來監控這些事件。第一步,我們的解決方案尋找服務器上發生的注冊事件,包括任何建立注冊(CREATE LOGIN)、修改注冊(ALTER LOGIN)與刪除注冊(DELETE LOGIN)事件。運行以下腳本來建立觸發器:

  CREATE TRIGGER tr_Security

  ON ALL SERVER

  For DDL_LOGIN_EVENTS

  AS

  BEGIN

  ?INSERT INTO DDLTriggerTest..EventtableData(XMLEvent, DatabaseName, SystemUser)

  ?VALUES (EVENDATA(), DB_NAME(), SYSTEM_USER)

  END

  這段腳本建立一個觸發器,宣稱我們希望尋找服務器上發生的所有DDL注冊事件。啟動觸發器所得到的信息將進入我們前面建立的DDLTriggerTest表格中。注意,我們使用三個函數將數據插入表格中。在此例中,EVENTDATA函數將收集與注冊有關的信息,因為它是FOR DDL_LOGIN_EVENTS語句指定的事件。SYSTEM_USER函數執行當前語句,返回注冊。而且,如你所猜測的,DB_NAME()函數返回執行當前語句的數據庫的名稱。由于建立一個注冊是一個服務器級事件,我們的審查索引記錄下發生在主數據庫中的語句。

  為測試新的觸發器,我們必須在服務器上提出一個LOGIN事件。執行CREATE LOGIN TestLogin WITH PASSWORD = '123456xxYYbaz這樣的命令,是建立一個新注冊的最簡單方法。

  運行該語句后,如果我們查看信息窗口,就可看到信息(1行受影響)。由于我們安排好審查,所以此語句才會發生。當我們在服務器上運行CREATE LOGIN語句時,DDL觸發器被啟動,一項記錄插入到DDLTriggerTest數據庫的EventTableData表格中。

  XML中有什么?

  你可以在DDLTriggerTest表格中運行SELECT查詢來證明我們向表格中寫入了記錄。如果你習慣應用SQL Server 2000,那么XMLEvent一欄中的數據可能對你來說有些陌生。在SQL Server Management Studio (SSMS)中,點擊XMLEvent一欄中的鏈接即可查看它包含的XML數據。

  XMLEvent域由EVENTDATA()函數從觸發器中的INSERT語句中移植過來。在這種情況下,EVENTDATA()函數返回與注冊有關的XML數據,包括注冊的時間與日期、服務器名稱、用戶ID與機器系統ID。

  還只是開始

  DDL_LOGIN_EVENT觸發器只是有助于證明系統安全,你能夠進行監控的60多個DDL事件中的一個。其它Sarbanes-Oxley審查感興趣的事件包括:建立或終止其它數據庫對象,如表格、程序、觸發器、概念、函數等。

  在本文中,我們的討論僅限于服務器級事件。在以后的文章中,我將說明一個追蹤數據庫級事件的觸發器。我還將向你展示那些觸發器如何執行追蹤事件以外的功能——實際上,它們可阻止你不想發生的未授權的事件在數據庫中出現。

  Tim Chapman是金融服務行業一家大公司的數據庫管理員。

關鍵詞:SQLServer
主站蜘蛛池模板: 凤冈县| 资源县| 盖州市| 阳信县| 大丰市| 鸡东县| 汝州市| 桐梓县| 万宁市| 即墨市| 阿拉善右旗| 新民市| 阿勒泰市| 湟源县| 光泽县| 沐川县| 酉阳| 鄂托克旗| 澄城县| 北辰区| 固安县| 祁门县| 密山市| 阜平县| 班玛县| 五原县| 南和县| 信阳市| 兴化市| 巨鹿县| 田林县| 广饶县| 南溪县| 双峰县| 英吉沙县| 宿松县| 图们市| 渑池县| 永城市| 溆浦县| 县级市|