随着业界安全管理要求的加强,微软正针对SQL Server建立更加安全并支持审计的功能。这些功能不只可以帮助DBA生成模式变更和安全相关事件的审计跟踪,还可以支持公司满足各种法规遵守的需求,并增强了企业数据和数据库基础架构的安全性。
登录审计
SQL Server登录审计是一种传统的审计形式,可以记录对服务器失败和成功的登录尝试。登录审计写到错误日志中。
记录连接尝试可以用来获知谁在尝试连接数据库,是否发送了恶意攻击或者尝试攻击是否成功。
登录审计可以按如下方式配置:
在对象资源管理器中右击SQL Server,选择属性。
点击安全。
设置登录审计属性。可以选择:无审计,只记录失败登录,只记录成功登录,以及失败和成功登录都记录。
点击确定然后重启SQL Server.
C2审计和通用遵从准则
你可以启用C2审计模式来记录访问语句和对象失败和成功的日志。C2审计模式保存了大量数据,所以日志文件很容易变得非常巨大。当文件达到200 MB时,SQL Server会打开一个新文件。如果记录日志的数据目录空间不足了,SQL Server会自动关闭记录功能。您可以按照如下方式启用C2审计模式:
在对象资源管理器中右击SQL Server,选择属性。
点击安全,然后选中“启用C2审计跟踪”.
点击确定。
当然,您也可以使用“sp_configure”来启动C2审计跟踪。
请注意,虽然C2安全标准在SQL Server 2012中是可用的,但它将被通用遵从准则替代,而且可能将在未来的SQL Server版本中删除掉。
通用遵从准则是一套审计标准,它仍然使用SQL Server跟踪捕获数据。通用遵从准则选项启用之后,登录审计也会启用。您可以按如下方式启用“通用遵从准则”:
在对象资源管理器中右击SQL Server,然后选择属性。
点击安全,然后选中C2审计跟踪。
点击确定。
SQL事件探测器跟踪安全审计事件,可以被用来跟踪任何对象访问和登录配置,以及安全事件。跟踪结果保存在跟踪文件或者数据库表中。[page]
数据定义语言(DDL)触发器
DDL触发器可以用于把DDL信息和SQL Server有关安全的事件日志记录到表中。DDL事件日志记录提供给你审计和特权提升攻击的潜在警告(用户被赋予太多权限或者用户误用了他们的权限)。
在定义触发器时,你可以指定作用域为服务器或者数据库。服务器作用域的触发器对服务器对象事件(比如登录对象)触发执行。数据库作用域的触发器响应数据库对象事件(比如,数据库模式,表和视图)触发。“EventData”函数提供关于DDL或者安全相关事件(引起DDL触发器被触发的事件)的明细信息。“EventData”函数返回类型为xml的值。该模式的差异与事件类型有关。
下面的代码在服务器上创建了一个DDL触发器,将审计并存储在SQL Server上发生的所有连接和安全有关事件,结果会记录到master数据库的“SecurityLog ”表中。
USE [master]
GO
DROP TABLE [dbo].[SecurityLog]
GO
CREATE TABLE [dbo].[SecurityLog](
[EventType] [nvarchar](128) NULL,
[EventTime] [datetime] NULL,
[EventLog] [xml] NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
现在,创建一个DDL触发器(ddl_trig_capture_security_events)来捕获并存储所有连接和安全有关事件:
USE [master]
GO
IF EXISTS (SELECT * FROM sys.Server_triggers
WHERE name = 'ddl_trig_capture_security_events‘)
DROP TRIGGER ddl_trig_capture_security_events
ON ALL Server;
GO
CREATE TRIGGER ddl_trig_capture_security_events
ON ALL Server;
FOR LOGON, DDL_Server_SECURITY_EVENTS,
DDL_DATABASE_SECURITY_EVENTS
AS
INSERT INTO [master][SecurityLog] (EventType, EventTime, EventLog)
SELECT EVENTDATA()。value(’(/EVENT_INSTANCE/EventType)[1]','nvarchar(128)‘)
,EVENTDATA()。value(’(/EVENT_INSTANCE/PostTime)[1]','datetime‘)
,EVENTDATA()
GO
Once the trigger has been created, you can test to see if it is working:
USE [master]
GO
CREATE LOGIN [TestDDL] WITH PASSWORD=N'TestDDL'
GO
USE [AdventureWorks2012]
GO
CREATE USER [TestDDL] FOR LOGIN [TestDDL]
GO
ALTER ROLE [db_datareader] ADD MEMBER [TestDDL]
GO
GRANT EXECUTE ON [dbo].[uspGetBillOfMaterials] TO [TestDDL]
GO
(编辑:开发网_郴州站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|