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的安全性。实施这些措施可以保护数据库中存储的敏感数据,并防止未经授权的访问。