SQL Server 数据库之SQL Server 数据库的安全设置

1. 概述

数据库服务器是所有应用的数据中转站,若数据库服务被恶意攻击,可能会造成数据泄露、数据丢失、数据被恶意篡改等诸多无法挽回的损失;
所以,对数据库进行安全设置是每一个数据库管理人员都应掌握的知识;

2. 更改登录用户验证方式

SQL Server 登录模式分为 “Windows 身份验证模式” 和 “SQL Server 身份验证模式” 两种,若在安装 SQL Server 时选择的是 “Windows 身份验证模式 ”,则 sa 登录账号被禁用;若想开启 sa 账户,则能使用 ALTER LOGIN 语句;

  1. 在 SQL Server 对象资源管理器中,右击服务器,属性;20220327

  2. 安全性 → 服务器身份验证 ,选择新的服务器身份验证 → 确定;20220327

  3. 确定,重启 SQL Server ,新的验证方式被启用;

3. 创建与删除登录用户

在 SQL Server 中能创建多个登录用户来访问数据库服务器,SQL Server 能对创建的登录用户做严格的设置来控制账户的访问权限、密码策略等;
在 SQL Server 数据库中创建新的登录用户步骤如下:

  1. 在对象资源管理器中找到安全性节点,展开登录名,选择 新建登录名20220327

  2. 登录名-新建对话框 → 常规,输入新建账户的名字 Tim → SQL Server 身份验证,输入密码;20220328

若用户在上述操作中选中了 强制实施密码策略,系统就会对所设置的密码的长度组合复杂度哟一个强制性的要求,提高密码的安全性;

  1. 打开 服务器角色 ,对服务器角色用户向用户授予服务器范围内的安全特权方式进行设定;
    20220328

注意: 选中的是 pubic 特权,这是 SQL Server 中的一类默认角色,若想让角色拥有服务器管理的最高权限,可选择 sysadmin

  1. 打开 用户映射 → 在右上部分选中此账户能操作的数据库 → 在右下部分选中定义登陆者的角色身份;
    20220328

  2. 最后选择 状态,在此页中选中授予允许连接到数据库引擎和已启用登录;20220328

  3. 设置完毕后单击 确定,新的登录账户创建完毕,可在登录名节点下找到新建的登录用户 Tim;
    20220328

若需删除某个账户,只需右击登录名,选择 删除
20220328

4. 创建与删除数据库用户

数据库用户是映射到登录账户上的;
在 SQL Server 数据库中能为一个数据库创建多个数据库用户
创建数据库用户的操作步骤如下所示:

  1. 数据库安全性用户,右击选择 新建用户20220328

  2. 常规登录名 → 输入 登录名20220328

  3. 此用户拥有的架构 中勾线 db_accessadmin;20220328

  4. 在数据库角色成员身份中勾选 db_accessadmin;
    20220328

  5. 单击确定,即可完成数据库用户的添加;

若想删除数据库,只需要右击要删除的用户名,选择 删除,即可;

注意: 除了使用用户资源管理器进行创建用户之外,新建用户还能用 T-SQL 语句 CREATE USERCREATE LOGIN 语句进行创建;

5. 设置服务器角色权限

当几个用户需要在某个特定的数据库中执行类型的动作时,能向该数据库中添加一个角色;
数据库角色指定了能访问相同数据库对象的一组数据库用户;
固定服务器角色已经具备了执行指定操作的权限,能把其他登录名作为成员添加到固定服务器角色中,这样该登录名就能继承固定服务器角色的权限;
在 SQL Server 数据库中默认的服务器角色如下:
20220328

服务器角色的作用和权限,如下所示:

  • bulkadmin: 这个服务器角色的成员能运行 BULK INSERT 语句;这条语句运行从文本文件中将数据导入 SQL Server 数据库中,为需要执行大容量插入数据的域账户而设计;
  • dbcreator: 这个服务器角色成员能创建、更改、删除和还原任何数据库;这既是适合助理 DBA 的角色,也可能是适合开发人员的角色;
  • diskadmin: 这个服务器角色能用于管理磁盘文件,它适合助理 DBA;
  • processadmin: SQL Server 数据库能够多任务化,就是能通过执行多个进程做多个事件;
  • serveradmin: 这个数据库角色的成员能更改服务器范围的配置选项和关闭服务器;
  • setupadmin: 为需要管理链接服务器和控制启动的存储过程的用户而设计,这个角色的成员能添加到 setupadmin,能增加、删除和配置服务器,并控制启动过程;
  • sysadmin: 这个服务器角色有权在 SQL Server 数据库中执行任何任务;
  • pubilc: 两大特点,一个初始状态时没有权限,二是所有的数据库用户都是它的成员;

5.1. 查看角色属性

要查看服务器角色的属性时,右击需要查看的角色名 → 属性20220328

5.2 操作权限

对角色权限的操作分为 3 种状态,授予撤销拒绝,分别用 GRANTREVOKEDENY 语句进行操作;
授予权限的基本语法格式如下:

GRANT
{ALL|statement [,..n] }
TO security_account [,..n]

注意: 将权限授予角色,而不是单独的登录名或用户;当某个用户由其他人取代时,能从角色中删除离开的用户,并向角色中添加新用户,与该角色关联的许多权限都将自动应用于新用户;

6. 密码策略

在 Windows Server 2003 或更高版本中运行时,SQL Server 数据库能使用 Windows 密码策略机制;
SQL Server 数据库能将在内部使用的密码应用在 Windows Server 2003 中,两者使用相同的复杂性策略和过期策略;
此功能需要通过 NetValidatePasswordPolicy API 实现,该 API 只在 Windows Server 2003 和更高版本中提供;

6.1. 密码复杂性

密码复杂性策略通过增加可能密码的数量来阻止强力攻击;实施密码复杂性策略时,新密码必须符合密码不能包含全部或部分用户账户名的原则,部分账户名是指 3 个或 3 个以上两端用 “空白”空格、制表符、回车符等)或任何以下字符分隔的连续字母数字字符:逗号(,)、句号(.)、连字符(-)、下划线(_)或数字字符号(#)

密码的设置时要注意:

  • 密码长度至少为 8 个字符;
  • 密码包含以下 4 类字符中的 3 类:拉丁文大写字母(AZ)、拉丁文小写字母(az)、10 个基本数字(0~9);
  • 非字母数字字符,如感叹号(!)、美元符号($)、数字字符(#)或百分号(%);

密码最长可为 128 个字符;使用的密码应尽可能长、尽可能复杂;

6.2. 密码过期

密码过期策略用于管理密码的使用过程;若 SQL Server 数据库中试试密码过期策略,则系统将提醒用户更改旧密码,并禁用带有过期密码的账户;
用户能为每个 SQL Server 登录名单独配置密码策略实施,通过使用 ALTER LOGIN(T-SQL) 来配置 SQL Server 登录名的密码策略选项;

配置密码策略实施时,适用以下规则,

  1. CHECK_POLICY 改为 ON,则将出现以下行为:
    除非将 CHECK_EXPIRATION 显示地设置为 OFF,否则也会将其设置为 ON;
    密码历史使用当前的密码哈希值初始化;
  2. CHECK_POLICY 改为 OFF,则将出现以下行为:
    CHECK_EXPIRATION 也设置为 OFF;
    清除密码历史;
    lockout_time 的值被重置;

若指定 MUST_cHANGE,则 CHECK_EXPIRATIONCHECK_POLICY 必须设置为 ON;否则,该语句将失败;
CHECK_POLICY 设置为 OFF,则 CHECK_EXPIRATION 不能设置为 ON,包含此选项组合的 ALTER LOGIN 语句将失败;

SQLServer安全及性能优化 修补漏洞 安装程序补丁修补漏洞 随时关注微软官方网站补丁升级 关闭不必要的端口 关闭联必要的服务 数据库引擎 SQL Server Analysis Services SQL Server Reporting Services SQL Server Integration Services SQL Server 代理 SQL Full-text Filter Daemon launcher SQL Server Browser 同时开启所有服务系统性能会变得很差,根据需要手动启动或者禁用某个服务 DTC: Distributed Transaction Coordinator(分布式事务处理协调器),用于协调多个数据库、消息队列、文件系统等等资源管理器的事务,由于内部开发中并不使用这个功能,远程数据库服务器上也并不经常使用,因此建议关闭这个服务 禁用不使用的协议 Shared Memory 默认为已启用状态,这个协议只能用于本地连接,不能用于远程连接,一般用于其它协议出问题的时候管理作诊断使用 TCP/IP 禁用不需要使用的协议,减少网络攻击对象 减少监听的网卡和IP地址 改变监听端口号 安全设置账户 Windows身份验证[微软推荐的方式] 优势: 1.访问SqlServer时速度更快,不用输入用户名和密码 2.可以利用Windows系统的自身工具和安全策略管理账户 3.安全确认和口令加密、审核、口令失效、最小口令长度和账号锁定 SqlServer身份验证 1.将sa账户名更改为其它账户名比如nocial,防止黑客利用sa进行攻击 2.删除不使用的账户 3.对已有账户设置安全密码[强制密码规则] 4.限制登录->远程登录、匿名登录 5.限制用户角色权限,一般将权限设置到最低。设置角色的时候不要为public角色授予任何权限,并且从sysadmin这个角色删除windows的administrators组,提高系统安全性。 删除不必要的数据库对象 删除危险的存储过程 xp_cmdshell:执行操作系统命令,这是一个系统后门[可以移动文件位置、创建用户、提升用户权限],建议不需要则删除掉。 ole自动化存储过程 任务管理存储过程 强化文件和目录安全 数据库最终以文件的形式存储在文件系统中 使用NTFS设置权限 限制共享【不能设置为完全控制】 及时审核日志 sqlserver的审核机制可以帮助跟踪并且阻止系统中没有授权的用户他的行为。比如没有授权的用户登录系统会阻止这次登录,并且把这次操作给记录下来。审核机制既能跟踪失败记录也能跟踪成功记录。所有的数据库平台均在不同程度上提供了审查功能。 跟踪用户行为 保护数据库 数据库性能优化 数据库的性能优化主要有两个方面:减少查询比较次数、减少资源的征用。 使用工具Sql Server Profiler优化数据库的性能,减少资源的征用 SqlServer Profiler的功能 Sql Server Profiler的用法  定义跟踪  登录连接、失败和断开  Select、Insert、Update和Delete语句  SQL批处理的开始或结束  写入到Sql server错误日志的错误  安全权限检查  Profiler执行的事件 让Profiler监视我们感兴趣的事件,可以监视的事件太多,监视太多会大大降低性能和增大表数据,只监视与数据库的性能密切相关的哪些事件。常见的感兴趣的事件:  执行查询的性能  单个用户或应用程序的活动  逻辑磁盘的读写  语句级别上的CPU占用  Standart模板的事件类 优化数据库性能可以从五个层次来进行:  优先级一:减少数据的访问【减少磁盘访问】  优先级二:返回更少数据【减少网络传输或磁盘访问】  优先级三:减少交互次数【减少网络传输或磁盘访问】  优先级四:减少开销【减少CPU及内存开销】  优先级五:利用更多资源【增加资源】 技术上从四个方面来解决性能优化问题 1、调整数据库结构设计 2、调整应用程序结构设计 3、调整数据库SQL语句 4、调整服务器内存分配 如果不熟悉sqlserver可以使用数据库引擎优化顾问来对数据库提出优化建议,然后通过系统管理的修改达到目的。 数据库引擎优化顾问  数据库引擎优化顾问介绍  分析一个或多个数据库的工作负荷和物理实现,工作负荷可以是优化的sql语句或者sqlserver profiler的跟踪文件和数据表。我们可以在运行引擎优化顾问前运用sqlserver profiler记录一些事件,然后将跟踪结果存储为文件或者数据表,然后把这些提供给数据库引擎优化顾问,让它去分析。  提出合理的物理设计结构,物理设计结构包括数据库中的索引、索引视图、非聚集索引、聚集索引视图等等。对工作负荷进行分析后,数据库优化顾问会建议添加删除修改数据库的物理设计结构。推荐一组合理的物理结构以降低工作负荷的开销。从而提高数据库的性能 数据库性能优化的常见问题 如何发现问题,如何分析导致性能降低的原因仍然是数据库管理员要掌握的知识。 事务占用资源的时间过长,造成阻塞 许多用户同时访问数据库的时候会产生大量事务,许多用户同时竞争一个资源导致占用资源的时间过长,造成阻塞。从而降低了数据库执行效率。产生这样的现象的原因如下: 1、多表连接查询,查询期间占用多个表 2、事务需要占用太多资源,容易出现多个事务占用对方资源的状况。从而导致死锁 解决之道: 1、避免多表连接查询,联合过多的表会在查询中占用过多的资源。很容易因为别的事务占用资源而相互等待。 2、使用统一的SQL语句规范,特别是访问表的顺序要保持一致,这样可以避免互相占用资源而导致的死锁。 不合理的数据文件设置,影响事务处理的性能 当事务处理产生大量数据的时候,数据文件的大小如果设置不合理将导致数据文件的不断扩展,这也会影响到事务处理的性能,进而影响到整个数据库的性能。 1、频繁操作数据库,导致日志文件增长的过快,因为日志文件记录数据库的原始操作。所以它的增长速度比数据文件要快得多。当日志文件的增长大小设置不合理的时候会导致频繁地扩展文件。从而影响性能 2、查询操作比较频繁,系统数据Tempdb的大小设置不合理。 查询操作比较频繁的时候系统数据Tempdb增长得会比较快,因为查询所产生的临时数据都存放在这个数据库上。如果Tempdb过小当查询数据量较大的时候Tempdb会自动扩展,如果遇到频繁的查询会导致Tempdb不断扩展,从而影响系统性能。这种情况我尽可能地使查询的返回结果比较小 3、大量插入数据,导致数据文件增长过快。不要设置数据文件的自动收缩,它会在忙碌的系统上导致不必要的性能开销。所以如果没有特别需要不要设置数据库的自动收缩。最好采用手动收缩。 磁盘数据组织不合理,导致磁盘的访问次数过多 数据库的磁盘访问都是按照页来访问数据的,无论访问的数据再少都是以页为单位读取,1页为8K。所以如果将经常访问的数据放在一起,数据库读取尽量少的页面就能够完成读取操作。这样效率自然就提高了。也减少了磁盘头的来回移动。否则会多次读取硬盘页面导致访问的效率降低。 对于表A和表B、表C、表D,如果经常查询表A和表B中的数据,那么可以将他们放在同一个文件组M中;如果经常访问表C和表D中的数据可以将他们放在同一个文件组N中。这样读取效率就比较高,因为一次读取就可能包含了两个表中的数据,因此提高了查询效率。要解决“磁盘数据组织不合理,导致磁盘的访问次数过多”这个问题,我们可以将经常读写的数据放置在不同的磁盘上,也就是将经常在一起被多表连接查询的表放在同一个文件组上。这里强调:这里反复提到的“不同的磁盘”指的的是不同的磁盘,而不是同一个硬盘的不同分区。 批量导入数据的时候,要进行特殊设置用户需要大批量导入数据的时候会突然增加很多日志记录,并且如果数据表上有索引,数据表每增加一条记录就会在索引上增加一条数据从而降低插入的性能。解决方案: 1、大批量导入数据的时候设置数据库的恢复模式为“大容量日志恢复模式” 2、导入前禁用索引,导入完毕后重建索引。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值