MSSQL数据库安全实验
管理SQL Server认证模式
(1)确认 SQL Server 验证
①在桌面上单击“开始”,选择“程序”→“Microsoft SQL Server 2005” →“SQL Server Management Studio”,出现“连接到服务器”对话框。
②在“连接到服务器”对话框中,按表中的指定值进行设置,然后单击“连接”按钮,如下图。
③如果“对象资源管理器”不可见,则选择“视图”菜单上的“对象资源管理器”。
④在“对象资源管理器”中,右击服务器,然后单击“属性”。
⑤单击“安全性”。
⑥在“服务器身份验证”选项区中,可以选择身份验证模式,“Windows 身份验证模式”或“SQL Server 和Windows 身份验证模式”,本次实验选择“SQL Server 和Windows 身份验证模式”。
⑦选择身份验证模式后,单击“确定”按钮以执行该更改。有如下提示:
⑧在“对象资源管理器”中,右击服务器,然后单击“重新启动”。
当提示确认时,请单击“是”。 如果通知“SQL Server 代理”服务也将停止时,请单击“是”。
⑨在“摘要”面板中,右击“SQL Server 代理”,然后单击“启动”。
当提示是否确实要启动SQLSERVERAGENT服务时,点击是。
管理数据库登录
SQL Server有两个默认的用户登录账号:即sa和administrators\builtin。sa是系统管理员,它是SQL Server的一个超级登录账号,这个账号具有操作SQL Server服务器的一切权限。BUILTIN\Administrators组成员的 Windows NT 4.0 或 Windows 2000 用户自动成为 sysadmin 固有服务器角色成员。
(1)使用企业管理器管理Windows身份验证的登录帐号。
① 回到桌面,右击我的电脑,点击管理。
然后一次展开系统工具-本地用户和组-用户,此时在右边可以看到当前系统中所有的用户。
在右侧空白处右击,点击新用户。
添加一个用户NewUser,并给该用户设置一个密码,本实验使用的密码是admin,密码可随意设置,但是需要记住,在后面需要用到,把用户下次登录时须更改密码前面的勾选去掉,把密码永不过期的选项选上,然后点击创建,设置如
创建完后点击关闭。
此时在用户列表中可以看到该用户已经添加成功。
然后右击该用户,选择属性。
弹出对话框
点击隶属于选项卡。
然后点击左下角的添加按钮。弹出选择组对话框。
点击左下角的高级,弹出如下对话框:
点击立即查找,在搜索结果中选择 administrators。
然后点击确定按钮,会自动返回上一回话窗口。
同样点击确定。此时,在winuser属性的隶属于选项卡下可以看到,多了一个administrators
然后点击右下角的应用,最后点击确定。
②在SQL Server Management Studio中,右击数据库,选择新建数据库
在数据库名称内输入student新建一个student数据库,然后点击确定 。
展开实例下的“安全性”,右击“登录名”按钮,在弹出的快捷菜单中选择“新建登录”。
打开SQL Server登录属性对话框。在“常规”选项卡中,单击“名称”输入框右侧的按钮。
弹出选择用户或组对话框
点击高级,弹出新的对话框
点击右侧的立即查找,在搜索结果中,找到winuser并选择该用户,然后点击确定
会自动返回上一个对话框,然后点击确定。
验证方式选择 “Windows 身份验证”。
默认数据库选择student,完成登陆账号winuser的创建
③选择“服务器角色”选项卡。可以在服务器角色列表框中选择相应的服务器角色成员。在这里,设置登录用户winuser的服务器角色为系统管理员。
④选择“用户映射”选项卡,在列表框中列出了该账号可以访问的数据库,如果单击数据库左边的复选框,表示该用户可以访问相应的数据库。在这里,选中数据库master和student左边的复选框,表示登陆用户winuser可以访问的数据库为master和student。在下方的数据库角色成员身份都选择public。然后点击确定。
在对象资源管理器中,展开安全性-登录名,可以看到Newuser已存在。
同时,展开数据库-系统数据库-student-安全性-用户,在用户列表中可以看到数据库student中已经建立一个数据库用户Newuser。
验证用WinUser账号登录SQL Server:首先在操作系统中注销当前用户的登陆,将用户切换到WinUser,再用此账号连接SQL Server查询分析器,用Windows身份验证登录,可以进入查询分析器,使用数据库master和student。
由于远程桌面注销会又会自动连接,所以我们需要先修改当前用户(administrator)的登录密码。
来到桌面,右击我的电脑,点击管理,在计算机管理窗口,依次展开 系统工具-本地用户和组-用户(不会的可参考之前新建winuser时的步骤),在右侧右击administrator,选择设置密码。
会弹出如下对话框,点击继续。
然后设置一个密码(我设置的密码是admin),可以随意设置,但是需要记住密码,后面还需要登陆该用户。
点击确定,会提示密码已设置
然后点击左下角的开始,选择注销
弹出确认窗口,点击注销。
然后会自动到登陆页面,输入之前新建的winuser和密码,点击确定登录。
登录后,点击左下角的开始-所有程序-Microsoft SQL Server 2005-SQL Server Management Studio 进入SQL Server Management Studio。
身份验证选择 Windows 身份验证。
点击连接后,登陆成功,此时可以新建查询,使用数据库master和student。
(2)使用SQL Server Management Studio管理SQL Server身份验证的登录帐号。
注销winuser,切换到administrator用户(不会的可参考之前从administrator切换到winuser的步骤)。
①在 SQL Server Management Studio中,展开实例下的“安全性”,右击“登录名”按钮,在弹出的快捷菜单中选择“新建登录”(参考前面新建登录步骤),
②在登录名输入框内输入需要新建的用户名,这里新建的用户名是SQLUser。验证方式选择SQL Server身份验证,然后在密码框输入SQLUser的密码。这里设置成test。把强制实施密码策略的复选框去勾选去掉,默认数据库选择master,然后点击确认。
注意:采用该方法创建的SQL Server登录账号只能用于登录SQL Server服务,与登录的计算机的Windows账号无关,不能用此账号登录Windows。
③单击“用户映射”,在“映射到此用登录名的用户”中,将所有数据库都选中,下方的数据库角色成员身份全部选择public,然后单击确定完成账号的创建。
④关闭SQL Server Management Studio重新打开,在登录页面处身份验证选择SQL Server身份验证。然后输入刚才新建的账号和密码,然后点击连接。
登录成功,此时可以新建查询来查询数据。
管理数据库用户
数据库用户对数据的访问权限以及对数据库对象的所有关系都是通过用户账号来控制的。在数据库中,用户账号与登录账号是两个不同的概念。一个合法的登录账号只表明该账号通过了Windows认证或SQL Server 认证,但不能表明其可以对数据库数据和数据对象进行某种或某些操作,只有其同时拥有了用户账号后,才能够访问数据库。所以一个登录账号总是与一个或多个数据库用户账号(这些账号必须分别存在相异的数据库中)相对应,这样才可以访问数据库。
(1)创建数据库用户
打开SQL Server Management Studio,展开服务器-数据库,选择要创建用户的数据库,如student,展开student,用鼠标右键单击“安全性”节点,从弹出的菜单中选择“新建-用户”命令。
弹出“新建用户”对话框,在用户名输入框输入要新建的数据库用户名称,如dbuser
在“登录名”处点击后面的按钮
弹出选择登录名对话框,在该对话框选择浏览
弹出查找对象对话框,在里面选择一个用户,选择administrators。
然后点击确定,自动返回到选择登录名对话框
点击确定,在此用户拥有的架构勾选db_owner,数据库角色成员身份同样选择db_owner,单击“确定”按钮,即可完成数据库用户的创建。
(2)修改用户信息
用鼠标右键单击要修改的用户,在系统弹出菜单上单击“属性”
可打开“数据库用户”对话框查看该用户的信息,同时需要时能直接修改相应用户的设置信息。
(3)删除数据库用户。
在企业管理器中,用鼠标右键单击要删除的数据库用户,如数据库student中的数据库用户dbuser,从快捷菜单中选择“删除”命令即可。
管理数据库角色
SQL Server有自己的固有角色。固有角色是指 SQL Server预先定义好的系统角色。用户不能修改这些角色的任何属性,也不能创建新的服务器固有角色和数据库固有角色。
数据库角色是在数据库的安全级别上创建,一个数据库角色只在其所在的数据库中有效,对其他数据库无效。在数据库中,除了有固有的数据库角色外,还可以自定义数据库角色,同时根据需要,可以为数据库角色添加成员或删除自定义角色。
1.创建数据库角色
打开SQL Server Management Studio,展开服务器-数据库,选择要创建用户的数据库,如student,展开student,用鼠标右键单击“安全性”节点,从弹出的菜单中选择“新建-数据库角色”命令。
弹出“新建角色”对话框,在角色名称输入框中输入数据库新角色的名称,如NewRole,点击所有者后面的按钮
在里面选择一个用户,例如选择winuser(如果不会,参考前面的步骤)
在此角色拥有的架构中选择db_owner,然后点击确定,完成角色创建。
可以在安全性-角色-数据库角色中看到,刚才添加的角色已经成功。
(2)删除自定义的数据库角色
在SQL Server Management Studio中,用鼠标右键单击要删除的自定义角色,如NewRole,从弹出的菜单中选择“删除”命令即可删除自定义角色。
注意:不能删除一个有成员的角色,在删除角色之前,应先删除其成员。
权限用来指定授权用户可以使用的数据库对象和这些授权用户可以对这些数据库对象执行的操作。用户在登录到SQL Server之后,其用户账号所归属的NT组或角色所被赋予的权限决定了该用户能够对哪些数据库对象执行哪种操作以及能够访问、修改哪些数据。在SQL Server中包括语句级权限和对象级权限。
(1)进行语句级权限管理:
启动SQL Server Management Studio,展开实例数据库,右击student数据库,在弹出的快捷菜单中选择“属性”,然后选择“权限”选项卡。在用户WinUser一栏中,将“创建表”和“创建视图”选中.
在SQLUser一栏中,则选择除“创建表”和“创建视图”以外的选项
权限设置的方法是:
许可权限中复选框单击为勾号时:表示授予该权限。
许可权限中复选框单击为叉号时:表示角色或用户不具有该操作权限。
许可权限中复选框既没勾号,也没叉号时:表示角色或用户是否具有该操作权限要根据隐含规则来决定。
这样的结果是,授予用户WinUser可以在数据库student中创建视图和表。授予用户SQLUser可以在数据库student中进行除创建视图和表以外的所有操作。
1、 SQL Server的Windows认证模式和混合认证模式的区别?通过 Windows 身份验证进行连接
当用户通过 Windows 用户帐户连接时,SQL Server 使用操作系统中的 Windows 主体标记验证帐户名和密码。 也就是说,用户身份由 Windows 进行确认。 SQL Server 不要求提供密码,也不执行身份验证。 Windows 身份验证是默认身份验证模式,并且比 SQL Server 身份验证更为安全。 Windows 身份验证使用 Kerberos 安全协议,提供有关强密码复杂性验证的密码策略强制,还提供帐户锁定支持,并且支持密码过期。 通过 Windows 身份验证完成的连接有时也称为可信连接,这是因为 SQL Server 信任由 Windows 提供的凭据。
通过 SQL Server 身份验证进行连接
当使用 SQL Server 身份验证时,在 SQL Server 中创建的登录名并不基于 Windows 用户帐户。 用户名和密码均通过使用 SQL Server 创建并存储在 SQL Server 中。 通过 SQL Server 身份验证进行连接的用户每次连接时必须提供其凭据(登录名和密码)。 当使用 SQL Server 身份验证时,必须为所有 SQL Server 帐户设置强密码。
尽可能使用 Windows 身份验证。
2、 分析数据库各种角色权限的异同,自定义数据库,并进行权限管理,深入理解实验原理。
3、 查阅近期数据库安全事件,分析攻击原理,掌握数据库安全的重要性
sQL注入攻击原理:
当应用程序使用输入内容来构造动态 sql 语句以访问数据库时,会发生 sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生 sql注入。sql注入可能导致攻击者使用应用程序登陆在数据库中执行命令。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。在某些表单中,用户输入的内容直接用来构造动态 sql命令,或者作为存储过程的输入参数,这些表单特别容易受到sql注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中本身的变量处理不当,使应用程序存在安全隐患。这样,用户就可以提交一段数据库查询的代码,根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是 sql注入就发生了。
MSSQL数据库安全实验的更多相关文章
- SQL语句修改MySQL用户密码
SQL语句修改MySQL用户密码 前言 上数据库安全实验课,用命令行和DataGrip试图修改用户密码,一直语法报错.最后用Navicat才修改成功,预览Navicat的SQL语句,发现语句和网上都不 ...
- MSSQL显错注入爆数字型数据的一点思考
Title:MSSQL显错注入爆数字型数据的一点思考 --2011-02-22 15:23 MSSQL+ASP 最近在弄个站点,密码是纯数字的,convert(int,())转换出来不报错,也不知道其 ...
- MSSQL连接字符串,你真的清楚吗?
原文:MSSQL连接字符串,你真的清楚吗? 几年前当我第一次面试时,考官发现我是个新手于是他让我写个连接字符串,虽然当时就知道X种连接字符串的写法,但是当时却没能写对一个,工作多年后我仍然不能写一个正 ...
- 通过MSSQL分析器跟踪研究EM内部行为并解决identify列问题
今天有人问到MSSQL表里的IDENTITY字段,如何让它在复制原来数据到该表时,原来数据的IDENTITY字段不变,而新插入数据时,新插入的数据的IDENTITY依然增长,查了些资料,做了个实验,最 ...
- mssql sqlserver 使用sql脚本 清空所有数据库表数据的方法分享
摘要: 下文讲述清空数据库中所有表信息的方法分享,如下所示: 实验环境:sql server 2008 实现思路: 1.禁用所有约束,外键 2.禁用所有触发器 3.删除表数据 4.开启触发器 5.开启 ...
- mssql sqlserver 索引专题
摘要: 下文将详细讲述sql server 索引的相关知识,如下所示: 实验环境: sql server 2008 R2 sqlserver索引简介: mssql sqlsever 索引分类简介 ms ...
- mssql sqlserver xml数据类型专题
摘要: 下文将详细讲述sql server xml数据类型的相关知识,如下所示: 实验环境: sql server 2008 R2 xml数据类型简介: mssql sqlserver xml数据类型 ...
- mssql sqlserver null数据类型专题
摘要: 下文将详细讲述sql server NULL(空值)的相关知识,如下所示: 实验环境: sql server 2008 R2 NULL(空值)简介: mssql sqlserver null数 ...
- mssql sqlserver存储过程专题
MSSQL存储过程简介及创建方式 mssql_DB_存储过程类型简介 MSSQL sql存储过程创建简介及应用举例 MSSQL SQl server 2008 CLR 存储过程创建举例 MSSQL ...
随机推荐
- 说说XXE漏洞那些事
想不起来写点啥了,又是摸鱼的一天,看了一些红队大佬们整理的资料,非常精彩,于是一个咸鱼翻身先选了一些简单的小点来写一写个人的感想(后续会继续更新其他内容) 不能说写的是技术分享,因为师傅们的文章珠玉在 ...
- S3C2440—12.按键中断
文章目录 一. 总体 二. CPSR设置 三. 中断源设置 四. 中断控制器设置 五. C中断处理函数 六. 汇编IRQ异常处理程序 七. 源码 一. 总体 要驱动按键中断控制LED亮灭,程序要进行如 ...
- S3C2440—3.用点亮LED来熟悉裸机开发的详细流程
文章目录 一.硬件知识 1.LED原理图 2.芯片手册 Ⅰ.找LED原理图 Ⅱ.找对应引脚 Ⅲ.在芯片手册中查找引脚信息 Ⅳ.查看寄存器说明 Ⅴ.配置寄存器 二.S3C2440框架与启动过程 三.要用 ...
- 高效编程:在IntelliJ IDEA中使用VIM
硬核干货分享,欢迎关注[Java补习课]成长的路上,我们一起前行 ! <高可用系列文章> 已收录在专栏,欢迎关注! 概述 Vim是一个功能强大.高度可定制的文本编辑器; 具体有多强大,我现 ...
- 内存吞金兽(Elasticsearch)的那些事儿 -- 认识一下
背景及常见术语 背景 Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene 基础之上. Lucene 可以说是当下最先进.高性能.全功能的搜索引擎库- ...
- Vue实现在前端导出Excel 方法1
也可以去看我的方法2:https://www.cnblogs.com/yingyigongzi/p/10915403.html ------------------------------------ ...
- C# 对SQlServer访问的完整类
using System; using System.Collections.Generic; using System.Collections.Specialized; using System.C ...
- 虚拟机--第二章java内存区域与内存溢出异常--(抄书)
这是本人阅读周志明老师的<深入理解Java虚拟机>第二版抄写的,有很多省略,不适合直接阅读,需要阅读请出门左转淘宝,右转京东,支持周老师(侵权请联系删除) 第二章java内存区域与内存溢出 ...
- 一些Java知识点
1 import java.util.ArrayList; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 ...
- indexedDB数据库完整创建流程
1.打开数据库 使用 IndexedDB 的第一步是打开数据库,使用indexedDB.open()方法 var request = window.indexedDB.open(databaseNam ...