SQL Server等级测评方法及知识点
查看版本
1 | select @@version; |
身份鉴别
鉴别方式
Windows身份验证模式
当用户通过Windows用户帐户连接时,SQL Server使用操作系统中的Windows主体标记验证帐户名和密码。也就是说,用户身份由Windows进行确认。SQL Server不要求提供密码,也不执行身份验证。Windows身份验证是默认身份验证模式,并且比SQL Server身份验证更为安全。Windows身份验证使用Kerberos安全协议,提供有关强密码复杂性验证的密码策略强制,还提供帐户锁定支持,并且支持密码过期。通过Windows身份验证创建的连接有时也称为可信连接,这是因为SQL Server信任由Windows提供的凭据。
通过使用Windows身份验证,可以在域级别创建Windows组,并且可以在SQL Server中为整个组创建登录名。在域级别管理访问可以简化帐户管理。SQL Server身份验证模式
当使用SQL Server身份验证时,在SQL Server中创建的登录名并不基于Windows用户帐户。用户名和密码均通过使用SQL Server创建并存储在SQL Server中。使用SQL Server身份验证进行连接的用户每次连接时都必须提供其凭据(登录名和密码)。当使用SQL Server身份验证时,必须为所有SQL Server帐户设置强密码。
可供SQL Server登录名选择使用的密码策略有三种。- 用户在下次登录时必须更改密码
要求用户在下次连接时更改密码。更改密码的功能由SQL Server Management Studio提供。如果使用该选项,则第三方软件开发人员应提供此功能。
- 用户在下次登录时必须更改密码
- 强制密码过期
对SQL Server登录名强制实施计算机的密码最长使用期限策略。
- 强制密码过期
- 强制实施密码策略
对SQL Server登录名强制实施计算机的Windows密码策略。这包括密码长度和密码复杂性。此功能需要通过NetValidatePasswordPolicyAPI实现,该API只在WindowsServer2003和更高版本中提供。
- 强制实施密码策略
密码复杂度及密码过期
查看路径打开SQL Server Management Studio
,选择对象资源管理器→安全性→登录名
,右键每个用户→常规
登录失败
若勾选走了强制实施密码策略
,则匹配本地操作系统的登录失败处理功能。
登录超时
- 远程查询连接超时值,默认600秒
路径:右键连接名→属性→连接
鉴别信息传输保密性
双因子
微软云的SQL Server云数据库通过高版本的SQL Server Management Studio可进行基于MFA的验证
访问控制
用户
syslogins
系统用户表
1 | select * from sys.syslogins; |
列名 | 数据类型 | 描述 |
---|---|---|
sid | varbinary(85) | 安全标识符。 |
status | smallint | 仅限内部使用。 |
createdate | datetime | 添加登录的日期。 |
updatedate | datetime | 更新登录的日期。 |
accdate | datetime | 仅限内部使用。 |
totcpu | int | 仅限内部使用。 |
totio | int | 仅限内部使用。 |
spacelimit | int | 仅限内部使用。 |
timelimit | int | 仅限内部使用。 |
resultlimit | int | 仅限内部使用。 |
name | nvarchar(128) | 用户的登录 ID。 |
dbname | nvarchar(128) | 建立连接时,用户的默认数据库名。 |
password | nvarchar(128) | 用户的加密密码(可以是NULL)。 |
language | nvarchar(128) | 用户的默认语言。 |
denylogin | int | 如果登录是 Microsoft® Windows NT® 用户或组且已被拒绝访问,则为 1。 |
hasaccess | int | 如果已授权登录访问服务器,则为 1。 |
isntname | int | 如果登录是 Windows NT 用户或组,则为 1;如果登录是 Microsoft SQL Server™ 登录,则为 0。 |
isntgroup | int | 如果登录是 Windows NT 组,则为 1。 |
isntuser | int | 如果登录是 Windows NT 用户,则为 1。 |
sysadmin | int | 如果登录是 sysadmin 服务器角色成员,则为 1。 |
securityadmin | int | 如果登录是 securityadmin 服务器角色成员,则为 1。 |
serveradmin | int | 如果登录是 serveradmin 固定服务器角色成员,则为 1。 |
setupadmin | int | 如果登录是 setupadmin 固定服务器角色成员,则为 1。 |
processadmin | int | 如果登录是 processadmin 固定服务器角色成员,则为 1。 |
diskadmin | int | 如果登录是 diskadmin 固定服务器角色成员,则为 1。 |
dbcreator | int | 如果登录是 dbcreator 固定服务器角色成员,则为 1。 |
loginname | nvarchar(128) | 登录的实际名称,该名称可能不同于 SQL Server 所使用的登录名。 |
角色
简单来说,SQL Server数据库权限主要关注服务器角色和数据库角色。
- 在安装SQL Server时会默认生成一个登录名:sa其隶属于服务器角色:sysadmin。
- 而新创建的登录名,则会自动关联服务器角色:public,除了默认的数据库:master,其他的数据都将没有访问权限,如果想要访问其他数据库需要分配数据库角色。
注意:一般不建议给非数据库管理员直接分配服务器角色,因为服务器角色是全局的,也就是说你拥有了服务器级别的权限.一般建议给普通用户、应用程序用户先分配数据库,然后给对应的数据库分配数据库角色权限。
- 服务器角色
角色名称 | 说明 |
---|---|
sysadmin | sysadmin固定服务器角色的成员可以在服务器上执行任何活动。 |
serveradmin | serveradmin固定服务器角色的成员可以更改服务器范围的配置选项和关闭服务器。 |
securityadmin | securityadmin固定服务器角色的成员可以管理登录名及其属性。他们可以GRANT、DENY和REVOKE服务器级权限。他们还可以GRANT、DENY和REVOKE数据库级权限(如果他们具有数据库的访问权限)。此外,他们还可以重置SQL Server登录名的密码。 重要提示:如果能够授予对数据库引擎的访问权限和配置用户权限,安全管理员可以分配大多数服务器权限。securityadmin角色应视为与sysadmin角色等效。 |
processadmin | processadmin固定服务器角色的成员可以终止在SQL Server实例中运行的进程。 |
setupadmin | setupadmin固定服务器角色的成员可以使用Transact-SQL语句添加和删除链接服务器(使用Management Studio时需要sysadmin成员资格)。 |
bulkadmin | bulkadmin固定服务器角色的成员可以运行BULK INSERT语句。Linux上的SQL Server不支持bulkadmin角色或管理大容量操作权限。只有sysadmin才能对Linux上的SQL Server执行批量插入。 |
diskadmin | diskadmin固定服务器角色用于管理磁盘文件。 |
dbcreator | dbcreator固定服务器角色的成员可以创建、更改、删除和还原任何数据库。 |
public | 每个SQL Server登录名都属于public服务器角色。如果未向某个服务器主体授予或拒绝对某个安全对象的特定权限,该用户将继承授予该对象的public角色的权限。只有在希望所有用户都能使用对象时,才在对象上分配Public权限。你无法更改具有Public角色的成员身份。 注意:public与其他角色的实现方式不同,可通过public固定服务器角色授予、拒绝或撤销权限。 |
- 数据库角色
角色名称 | 说明 |
---|---|
db_owner | db_owner固定数据库角色的成员可以执行数据库的所有配置和维护活动,还可以drop SQL Server中的数据库(在SQL数据库和Synapse Analytics中,某些维护活动需要服务器级别权限,并且不能由db_owners执行)。 |
db_securityadmin | db_securityadmin固定数据库角色的成员可以仅修改自定义角色的角色成员资格和管理权限。此角色的成员可能会提升其权限,应监视其操作。 |
db_accessadmin | db_accessadmin固定数据库角色的成员可以为Windows登录名、Windows组和SQL Server登录名添加或删除数据库访问权限。 |
db_backupoperator | db_backupoperator固定数据库角色的成员可以备份数据库。 |
db_ddladmin | db_ddladmin固定数据库角色的成员可以在数据库中运行任何数据定义语言(DDL)命令。 |
db_datawriter | db_datawriter固定数据库角色的成员可以在所有用户表中添加、删除或更改数据。 |
db_datareader | db_datareader固定数据库角色的成员可以从所有用户表和视图中读取所有数据。用户对象可能存在于除sys和INFORMATION_SCHEMA以外的任何架构中。 |
db_denydatawriter | db_denydatawriter固定数据库角色的成员不能添加、修改或删除数据库内用户表中的任何数据。 |
db_denydatareader | db_denydatareader固定数据库角色的成员不能读取数据库内用户表和视图中的任何数据。 |
- 应用程序角色
应用程序角色是一个数据库主体,它使应用程序能够用其自身的、类似用户的权限来运行。使用应用程序角色,可以只允许通过特定应用程序连接的用户访问特定数据。与数据库角色不同的是,应用程序角色默认情况下不包含任何成员,而且是非活动的。可以使用sp_setapprole启用应用程序角色,该过程需要密码。因为应用程序角色是数据库级主体,所以它们只能通过其他数据库中为guest授予的权限来访问这些数据库。因此,其他数据库中的应用程序角色将无法访问任何已禁用guest的数据库。
安全审计
审计配置
打开SQL Server Management Studio,选择对象资源管理器→右键连接名→属性→安全性
- 登录审核
- 无
- 仅限失败的登录
- 仅限成功的登录
- 失败和成功的登录
- 启用C2审核跟踪
C2审核跟踪能够记录所有成功和失败的登录、访问数据库对象、数据操作的语句等(包括select),会产生大量日志,并且损耗数据库性能,不建议开启。
SQL Server 2005开始引入DefaultTrace(默认追踪)功能,此功能默认开启,对create、drop、alter、登录失败等行为(不包括select)进行追踪。
打开SQL Server Management Studio,在对象资源管理器中,右键连接名→方面/facets→方面→服务器审核
,查看方面属性中DefaultTraceEnabled
项是否为True。
1 | select name,value from sys.configurations where name like '%trace%'; |
鉴别信息传输完整性及保密性
SQL Server默认采用SSL对鉴别数据进行加密传输.
鉴别信息存储保密性
SQL Server默认采用sha1对鉴别信息进行加密存储,
右键选择一个用户→方面/facets→登录名→PasswordHashAlgorithm
,默认值为ShaOne。
其他
1 | sp_help table_name; |