监督SqlServer访问,提升系统安全

1.概述

由于SqlServer数据库是应用程序的核心,关键信息通常存储在其中。因此,安全控制对SqlServer数据库访问非常重要。有许多方面需要考虑来监督SqlServer访问的安全性,例如访问控制、身份验证和审计跟踪。

2.访问控制

SqlServer访问控制可以通过多种方式进行,包括创建用户、角色、资源池和登录。这些对象都可以用来限制用户的权限,并为数据库提供一些安全措施。

2.1 创建角色

角色是SqlServer的一种对象,它定义了一个用户组的权限。可以将用户添加到角色中,以便有权限执行角色所定义的操作。下面是创建角色的示例:

CREATE ROLE [RoleName] AUTHORIZATION [dbo]

在上面的代码中,我们创建了一个名为RoleName的角色,并将其授予dbo所有者的权限。

2.2 创建资源池

资源池可用于控制在SqlServer中并发处理的数量。资源池允许将资源分配给指定的用户或用户组,以保证任务在数据库服务器上均匀分布。下面是如何创建资源池的一个示例:

USE [master]

GO

CREATE RESOURCE POOL [pool_name]

WITH (

MAX_CPU_PERCENT = 25

);

在上面的代码中,我们创建了一个名为pool_name的资源池,并将最大CPU使用率限制为25%。

3.身份验证

SqlServer使用身份验证来验证用户的身份,并控制他们能访问哪些资源。内置的身份验证方式包括Windows身份验证和SqlServer身份验证。

3.1 Windows身份验证

Windows身份验证使用Windows操作系统的安全性而被广泛接受。它允许用户使用他们的Windows域帐号登录,因此可以使用Windows身份验证登录SqlServer服务器。下面是如何启用Windows身份验证的示例:

USE [master]

GO

CREATE LOGIN [Domain\user_name] FROM WINDOWS WITH DEFAULT_DATABASE=[master]

在上面的代码中,我们创建了一个Windows登录名为Domain\user_name并将默认数据库设置为master。

3.2 SqlServer身份验证

SqlServer身份验证由SqlServer数据库管理。用户需要在SqlServer服务器上设置帐户名和密码,才能使用SqlServer身份验证登录。下面是如何设置SqlServer身份验证的示例:

USE [master]

GO

CREATE LOGIN [SQL_login_name] WITH PASSWORD=N'password' MUST_CHANGE, DEFAULT_DATABASE=[master], CHECK_EXPIRATION=ON, CHECK_POLICY=ON

在上面的代码中,我们创建了一个名为SQL_login_name的SqlServer登录,并将其密码设置为password。

4.审计跟踪

SqlServer提供了审计功能,可以记录用户和应用程序对数据库进行的操作。可通过审计记录来查看这些操作,以识别潜在的安全风险。审计可以记录多种事件,包括成功或失败的登录尝试、表或视图访问、SQL语句执行以及更改跟踪。

4.1 启用审计

启用SqlServer审计功能需要创建一个审计规范并将其应用于SqlServer实例。下面是如何启用审计的示例:

CREATE SERVER AUDIT [Audit_Name] TO FILE

(

FILEPATH = N'C:\Audit\'

,MAXSIZE = 5 MB

,MAX_ROLLOVER_FILES = 20

,RESERVE_DISK_SPACE = OFF

)

WITH

(

QUEUE_DELAY = 1000

,ON_FAILURE = CONTINUE

)

GO

ALTER SERVER AUDIT SPECIFICATION [Audit_Spec_Name] ADD (DATABASE_OBJECT_ACCESS_GROUP);

在上面的代码中,我们创建了名为Audit_Name的服务器审计,并定义其文件路径和最大文件大小。还定义了服务器审计规范,并将它关联到名为Audit_Spec_Name的用户定义类型。 继续将DATABASE_OBJECT_ACCESS_GROUP添加到此审计规范中。

4.2 查看审计记录

一旦SqlServer审计记录可用,就可以使用SqlServer Management Studio查看,并与跟踪事件关联。下面是如何查看审计记录的示例:

SELECT

audit_file_name

,event_time

,succeeded

,server_principal_name

,server_instance_name

,database_name

,statement

FROM sys.fn_get_audit_file ('C:\Audit\Audit_Name*',default,default);

在上面的代码中,我们使用fn_get_audit_file函数来查询名为Audit_Name的SqlServer审计文件,并选择所需的审计事件。

5.结论

在SqlServer上实施安全控制是非常重要的。通过访问控制、身份验证和审计跟踪等多种技术和方法相结合,可以极大地提高SqlServer的安全性。实施这些措施可以保护数据库中存储的敏感数据,并防止未经授权的访问。

数据库标签