SQL Server安全管理

SQL Server安全管理

数据库的安全性是指保护数据以防止因不合法的使用而造成的数据的泄密和破坏

SQL Server的安全性机制

SQL Server的安全体系结构可以划分为以下4个层次:

客户操作系统的安全性

在使用客户计算机通过网络实现对SQL Server服务器的访问时,用户首先要获得计算机操作系统的使用权限。

SQL server的服务器安全性

SQL Server服务器安全性建立在控制服务器登录账号和密码的基础上。

管理和设计合理的登录方式是数据库管理员(DBA)的重要任务,是SQL Server安全体系中DBA可以发挥主动性的第一道防线。

SQL Server事先设计了许多固定的服务器角色,用来为具有服务器管理员资格的用户分配使用权限。

拥有固定服务器角色的用户可以拥有服务器级别的管理权限。

数据库使用的安全性

用户将接受的第三次安全性检验就是数据库的安全性检查。

建议用户在建立新的登录账号时,最好不要讲默认的数据库设置为master数据库,而是应该根据用户实际需要,将默认的数据库设置在具有实际操作意义的数据库上。

SQL Server中也包含一些固定服务器角色,以方便对数据库访问权限的管理。

数据库对象使用的安全性

在创建数据库对象时,SQL Server自动把该数据库对象拥有权赋予该对象的创建者。

当一个非数据拥有者想访问数据库里的对象时,必须事先由数据库拥有者赋予用户对指定对象执行特定操作的权限。

一般来说,为减少管理的开销,在对象级安全管理上应该在大多数场合赋予数据库用户以广泛的权限,然后在针对实际情况在某些敏感的数据上实施具体的访问控制权限控制。

每个安全层次好像是一道门,如果门没有上锁,或者用户拥有开门的权利,则永和可以通过这道大门到达下一个安全等级。如果通过了所有的大门,用户就可以实现对数据的访问了。

SQL Server验证模式

用户要访问SQL Server数据库中的数据,必须经过三个认证过程:

​ 身份验证

​ —验证用户是否具有连接到服务器的资格

安全账户认证是用来确认登录SQL Server的用户的登录账号和密码的正确性,由此来验证其是否具有连接SQL Server的权限。提供了两种验证模式:

一:windows身份认证模式

二:混合身份认证模式

​ 验证用户是否是数据库的合法用户

​ —验证用户是否具有对数据库的访问权

​ 验证用户是否具有操作许可

​ —验证用户是否具有对数据库中的数据和对象的操作权限

管理SQL Server登录账户
windows身份验证码模式

创建windows登录账户

CREATE LOGIN LoginName FROM WINDOWS
[WITH DEFAULT_DATABASE=DatabaseName]

拒绝连接:

DENY CONNECT SQL TO LoginName

删除用户:

DROP LOGIN LoginName
SQL Server身份验证模式

创建SQL Server登录账户

CREATE LOGIN LoginName
[
  WIRH PASSWORD = 'password'
  [MUST_CHANGE]
  [,DEFAULT_DATABASE=DatabaseName]
  [,CHECK_EXPIRATION={ON|OFF}]
  [,CHECK_POLICY={ON|OFF}]

]

例子:

#创建一个SQL Server登录账户sql2
CREATE LOGIN sql2 WITH PASSWORD='sql2'
GO
#修改登录账户密码
ALTER LOGIN sql2 WITH PASSWORD='123456'
GO
#删除SQL Server登录账户
DROP LOGIN Sql2
GO

管理固定服务器角色

SQL Server管理者可以将某些用户设置为某一角色,这样支队角色进行权限设置便可以实现对所有用户权限进行设置,大大减少了管理员的工作量。SQL Server提供了两种角色:服务器角色和数据库角色。

服务器角色:用户管理SQL Server服务器级别的权限

数据库角色:用户管理数据库级别的权限

固定服务器角色

固定服务器角色是指根据SQL Server的管理任务,以及这些任务相对重要性等级来把具有SQL Server管理职能的用户划分为不同的用户组,每一组所具有的的管理SQL Server的权限都是SQL Server内置的,即不能对其进行添加、修改和删除权限,只能向其中加入用户或者其他角色。

固定服务器角色及权限

拥有SQLServer所有的权限许可。

服务器管理员serveradmin:管理SQLServer服务器端的设置。

磁盘管理员diskadmin:管理磁盘文件。

进程管理员processadmin:管理SQLServer系统进程。

安全管理员securityadmin:管理和审核SQLServer系统登录。

安装管理员setupadmin:增加、删除连接服务器,建立数据库复制以及管理扩展存储过程。

数据库创建者dbcreator:创建数据库,并对数据库进行修改。

Bulkadmin:执行BULKINSERT语句

固定服务器角色的分配与撤销

可以使用系统存储过程sp_helpsrvrolemember查看摸个固定服务器角色被分配给了那些SQL Server服务器登录账户,使其拥有相应的服务器级操作权限。分配角色的语法格式如下:

EXEC sp_helpsrvrolemember 'RoleName'
#将sysadmin角色分配给SQL Server服务器登录账户Sql1
EXEC sp_addsrvrolemember 'Sql1','sysadmin'
GO
#查看sysadmin角色下包括那些SQL Server服务器登录账户
EXEC sp_helpsrolemember 'sysadmin'
GO
#撤销固定服务器角色的分配
EXEC sp_dropsrvrolemember 'LoginName','RoleName'
#例如撤销sql1分配的角色sysadmin
EXEC sp_dropsrvrolemember 'sql1','sysadmin'
GO

特殊的SQL Server登录账户sa

sa账户拥有服务器级别最高的权限管理,可以执行服务器范围内的所有操作。

数据库安全管理

管理数据库用户

创建数据库用户

可以使用create user语句创建数据库用户,其基本的语法如下

CREATE USER USERNAME [FOR LOGIN LOGINNAME]

例:在student数据库中为登录账户sql1创建用户sqlUser1

USE Student
GO
CREATE USER SqlUser1 FOR LOGIN Sql1;
查看数据库用户

例:查看数据库Student中的用户信息

USE Student
GO
SELECT * 
FROM sys.database_principals
GO
修改和删除数据库用户

可以使用ALTER USER语句修改数据库用户

例:将数据库用户SqlUser1的名字改为Sql1

USE Student
GO
ALTER USER sqlUSER1 WITH NAME = Sql1
Go

可以使用DROP USER UserName语句删除指定的数据库用户

数据库对象权限管理

权限用来指定授权用户可以使用的数据库对象和这些授权用户可以对这些数据库对象执行的操作。用户在登录到SQL Server之后,其用户账号所归属的NT组或角色被赋予的权限(许可)决定了该用户能够对那些数据库对象执行那种操作以及能够访问、修改那些数据。在每个数据库中用户的权限独立于用户账号和用户在数据库中的角色,每个数据库独有自己独立的权限系统,在SQL Server中包括三种类型的权限:

对象权限

表示对特定的数据库对象,即表、视图、字段和存储过程的操作许可,他据决定了能对表、视图等数据库对象执行那些操作。(相当于DML语句权限)

语句权限

表示对数据库的操作许可,也就是说,创建数据库或者创建数据库中的其他内容所需要的许可类型称为语句许可(相当于DDL的语言权限)

隐含权限

是系统安装以后有些用户和角色不必授权就有许可。

权限管理

权限的管理包含三个内容:

授予权限:允许用户或角色居于某种操作权

收回权限:不允许用户或角色居于魔种操作权,或者收回曾经授予的权限。

拒绝访问:拒绝某用户或角色具有某种操作权。即使用户或角色用于继承而获得这种操作权,也不允许该用户执行相应的操作。

使用Transaction_SQl语句管理对象权限

​ Transaction_SQL语句使用grant、revoke和deny三种语句来实现管理对象权限

GRANT:用户授权

REVOKE:用于收回权限

DENY:用于拒绝权限

授权-grant语句

grant语句的格式为:

grant 对象权限名 [,….] on {表名|视图名|存储过程名} To {数据库用户名|用户角色名} [,…..]

实例:

grant select on authors to user1

收回权限-REVOKE语句

REVOKE语句的格式为:

REVOKE语句的格式为:

​ REVOKE 对象权限名 [,…] ON {表名|视图名|存储过程名}

​ FROM {数据库用户名|用户角色名} [,….]

实例:

REVOKE SELECT ON authors FROM user1

拒绝访问语句-DENYyuju

DENY语句的格式为:

DENY 对象权限名 [,…] ON {表名|视图名|存储过程名}

To {数据库用户名|用户角色名} [,…]

实例:

​ DENY UPDATE ON authors To user1

使用Transaction_SQL语句管理语句权限

Transaction_SQL语句也是使用grant、revoke和deny三种语句来实现语句管理权限

GRANT 用户授权

REVOKE 用户收回权限

DENY 用于拒绝权限

授权-Grant语句

grant语句的格式为:

​ grant 语句授权名 [,…] To {数据库用户名|用户角色名}[,….]

实例:

​ grant create table to user1;

收回权限-revoke语句

revoke语句的格式为:

​ revoke 语句权限名 [,…] from {数据库用户名|用户角色名}[,….]

实例:

​ revoke create table,create view from user3;

拒绝权限-DENY语句

DENY语句的格式为:

DENY 语句权限名 [,…] To {数据库用户名|用户角色名} [,…]

实例:

DENY CREATE VIEW TO user1;

管理数据库角色

数据库角色是为某一用户或某一组用户授予不同级别的管理或者访问数据库以及数据库对象的权限,这些权限是数据库专有的,并且还可以使一个用户具有属于同一数据库的多个角色:即固定的数据库角色和用户自定义的数据库角色。

固定数据库角色

固定的数据库角色用来提供最基本的数据库权限管理

public:维护全部默认权限

所有数据库用户都属于public角色。特点:

public角色存在于每一个数据库中,包括系统数据库和用户数据库,而且不能被删除

因为所有的数据库用户都属于该角色,所以不能直接将该角色分配给任何用户

public角色在初始状态没有任何权限,但可以为该角色分配权限

因为所有的数据库都属于该角色,所以为该角色授权时,实际是为所有数据库用户授权。

db_owner:数据库的所有者,可以对所拥有的数据库执行任何的操作

db_accessadmin:可以增加或者删除数据库用户,工作组和角色

db_addladmin:可以增加、删除和修改数据库中任何对象

db_securityadmin:执行语句权限和对象权限

db_backupoperator:可以备份和恢复数据库

db_datareader:能且仅能对数据库中的任何表执行select操作,从而读取所有表的信息。

db_datawriter:能够增加、修改和删除表中的数据,但不能进行select操作。

db_denydatareader:不能读取数据库中任何表中的数据

db_denydataewriter:不能对数据库中任何表执行增加、修改和删除数据操作

用户自定义数据库角色

USE Student
Go 
Create ROLE user Role1
Go

为数据库用户分配和撤销角色

为用户分配角色的语法

EXEC ap_addrolemember 'roleName','securityaccount'
#例:将固定数据库角色db_ower分配给student的sql
USE Student 
Go
EXEC sp_addrolemember 'db_ower','sql1'
Go
  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、导入前禁用索引,导入完毕后重建索引。
SQL Server安全管理是指对SQL Server数据库的安全性进行管理和保护的过程。在SQL Server中,有一些重要的安全管理措施和策略可以帮助确保数据库的安全性。 首先,一个重要的安全措施是对登录账号进行管理。在SQL Server中,默认的登录账号sa具有系统管理员权限,并能执行所有操作。因此,对于这个登录账号,需要采取适当的措施来限制其使用,并确保只有授权的人员能够访问。 其次,合理的登录方式也是SQL Server安全管理的重要任务。数据库管理员(DBA)应该设计和管理合理的登录方式,以限制用户的访问权限并确保数据的安全性。这可以包括限制用户的访问权限、设置密码策略、实施多因素身份验证等措施来提高数据库的安全性。 此外,SQL Server还提供了其他一些安全功能,例如数据加密、访问控制、审计等,以帮助保护数据库的安全性。这些功能可以根据具体的需求进行配置和管理,以确保数据库中的敏感数据得到保护。 总结起来,SQL Server安全管理包括对登录账号进行管理、设计和管理合理的登录方式,以及使用其他安全功能来保护数据库的安全性。通过合理的安全管理措施,可以降低数据库受到未授权访问和数据泄露的风险,保护数据的完整性和机密性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [SQL Server数据库安全管理](https://blog.csdn.net/iteye_2604/article/details/81640542)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [SQL Server安全管理](https://blog.csdn.net/A__loser/article/details/78843210)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值