本文属于SQL Server安全专题系列
在某些日常工作中,安全配置文件可能会成为需要保护的对象。下面对这些可能进行简介, 并演示元数据如何帮助你验证或实施策略。
Code Signing:
代码签名,代码注入攻击明显是违反了安全策略,可以使用代码签名来防御这类工具,假设安全策略上要求所有程序集和存储过程必须使用代码签名来最小化安全威胁。
下面的代码返回在数据库中的存储过程那些已经进行代码签名和是否签名有效。代码中使用了两个安全元数据对象,第一个是sys.Certificates。另外一个是sys.fn_check_object_signatures()。
视图用于返回证书信息,而函数返回所有可签名对象的列表,并指示对象是否由指定证书或非对称密钥签名。 如果对象是由指定证书或非对称密钥签名,则还会返回该对象的签名是否有效。
DECLARE @thumbprint VARBINARY(20) ;
--从sys.certificates中查询数据库的代码签名证书指纹(thumbprint)
SET @thumbprint =
(
SELECT thumbprint
FROM sys.certificates
WHERE name LIKE '%SchemaSigningCertificate%'
) ;
--把指纹传递给函数sys.fn_check_object_signatures检查存储过程的架构名
SELECT entity_id
, SCHEMA_NAME(o.schema_id) + '.' + OBJECT_NAME(entity_id) AS
ProcedureName
, is_signed
, is_signature_valid
FROM sys.fn_check_object_signatures ('certificate', @thumbprint) cos
INNER JOIN sys.objects o
ON cos.entity_id = o.object_id
WHERE cos.type = 'SQL_STORED_ PROCEDURE ' ;
GO
特定表的权限:
对于很多系统,可能会有一些包含敏感数据的表,这些表根据安全策略要进行权限控制并做跟踪。此时可以使用SQL Server的元数据信息来协助。
SQL Server提供了一个系统存储过程sp_table_privileges来识别安全主体,并且获取对应的权限清单。如下代码列出库中所有表的权限:
EXEC sp_table_privileges @Table_name = '%' ;
本机结果如下:
说明:
由于可用的存储过程、视图、函数非常的多,无法一一列举,读者可以举一反三地在微软文档中找到其他扩展功能,比如sys.fn_check_object_signatures这个函数,当你了解它的功能之后,不妨看看左边的其他相关功能进行类比和尝试:
举一反三才能真正地扩展知识面。