昨晚在群里讲解这部分内容,因为好久没操作过了,差点翻车。。。今天把它整理一下发出来,方便没听明白的小伙伴学习和理解。

我们平时学习数据库时,要么使用sa帐号,要么用windows默认帐号登录,总之都拥有最高权限,而实际的生产环境中,不可能这样的,帐号权限要严格划分,才能保证基本的安全,那么问题来了,如何为帐号分配权限呢?应用程序需要更高的操作权限,该怎么办呢?下面我们就来解决这两个问题!

任务目标

  1. 为帐号分配权限,实现对不同表授予不同的增删改查等权限
  2. 同一帐号,在不同场景下拥有不同权限

任务1:实现

任务描述:创建一个帐号AppUser,密码123,它只能访问test2数据库,对数据表授予不同权限,如下表所示

表名 SELECT INSERT UPDATE DELETE
Student
Course
Score
Class
Exam

实现步骤

1、创建【登录名】:安全性——登录名——新建登录名,如图所示

2、【常规】页面 → 输入登录名AppUser → 输入密码123 → 不勾选“强制实施密码策略” → 默认数据库test2

3、【用户映射】页面 → 在test2数据库前面勾选,用户处自动出现AppUser → “确定”按钮,创建的登录名将出现在列表的最下面。

4、【数据库】 → test2 → 安全性 → 角色 → 数据库角色 → 右键 → 新建数据库角色,

5、【常规】页面 → 输入角色名称MyRole → 添加 → 浏览 → 勾选AppUser ,在“角色成员”列表中出现AppUser

6、【安全对象】页面 → 【搜索】 → 特定对象 → 对象类型 → 勾选“表”,确定 → 浏览 → 勾选Student等5个表,确定,确定 → 分别选择安全对象,并对其授权

注意:【更新】指的是UPDATE语句,【更改】是ALTER语句

表名 SELECT(选择) INSERT(插入) UPDATE(更新) DELETE(删除)
Student
Course
Score
Class
Exam

任务1:验证

1、用刚刚创建的登陆名AppUser登录,然后试图查看其他数据库,均提示无权访问,只能访问test2,证明我们的授权有效。


2、对几张表进行增删改查的验证,SQL语句及结果如下:

SELECT * FROM dbo.Class
--结果:拒绝了对对象 'Class' (数据库 'test2',架构 'dbo')的 SELECT 权限。
UPDATE dbo.Score SET Score=90 WHERE Id=1
--结果:拒绝了对对象 'Score' (数据库 'test2',架构 'dbo')的 UPDATE 权限。
DELETE dbo.Course WHERE Id=1
--结果:拒绝了对对象 'Course' (数据库 'test2',架构 'dbo')的 DELETE 权限。

而对Student表的操作不受限制,如下图所示,证明我们的授权是有效的。

任务2:实现

任务描述:我们还是使用AppUser帐号,在应用程序中具有不同的权限(一般来说在App中应该有更高的权限),如:目前我们只能对Class表进行插入操作,随后我们让它具备增删改查的权限。

实现步骤

1、切换sa帐号(否则无权做后面的事) → 【test2】数据库 → 安全性 → 角色应用程序角色 → 右键“新建应用程序角色”

2、【常规】页面 → 角色名称Approle,密码456

3、【安全对象】页面 → 【搜索】 → 特定对象,确定 → 对象类型 → 勾选“表”,确定 → 浏览 → 勾选Class等5个表,确定 → 对5个表全部授予“增删改查”权限

任务2:验证

总体思路:我们使用C#语言创建一个控制台应用程序,依然使用之前创建的AppUser帐号和密码进行登录,然后授予刚刚创建的Approle角色,来达到临时提升AppUser帐号权限的效果。

关键步骤:

1、设置连接字符串,使用的是AppUser帐号和密码

private static string ConnectionString = "Data Source=127.0.0.1,3300;User Id=AppUser;Password=123;Initial Catalog=test2;Pooling=true;Min Pool Size=1";

2、通过执行以下SQL语句临时授予Approle角色权限

EXEC sys.sp_setapprole @rolename='Approle',@password='456'

执行效果:

主要代码:

static void Main(string[] args)
{
var db = Db.Instance;
Console.WriteLine("-------- 授予Approle角色前 -------");
try
{
db.Select<Class>().ToList();
}
catch (Exception ex)
{
Console.WriteLine($"无权查看,错误信息:{ex.Message}");
}
db.Ado.ExecuteNonQuery("EXEC sys.sp_setapprole @rolename='Approle',@password='456'");
Console.WriteLine("-------- 授予Approle角色后 -------");
Console.WriteLine($"Class表有{db.Select<Class>().Count()}条记录");
Console.WriteLine("-------- 修改前 -------");
db.Select<Class>().Take(2).ToList().ForEach(x => Console.WriteLine($"Id:{x.Id} Name:{x.Name}"));
Console.WriteLine("-------- 修改第1条数据 -------");
db.Update<Class>(1).Set(a => a.Name , "测试Update").ExecuteAffrows();
Console.WriteLine("-------- 修改后 -------");
db.Select<Class>().Take(2).ToList().ForEach(x => Console.WriteLine($"Id:{x.Id} Name:{x.Name}")); Console.Read();
}

SQL Server 帐号权限管理及C#编程应用(图解)的更多相关文章

  1. SQL Server帐号孤立的问题解决

    网站近日经常遭到攻击,好几次数据库挂马,前几天把论坛升级了,今天又升级了数据库,把之前的MSSQL 2000 升级到MSSQL 2005,用的是数据库还原功能还原的,遇到了这个帐号孤立的问题. 什么是 ...

  2. Microsoft SQL Server 安全与权限

    Microsoft SQL Server 安全与权限 登陆角色 计算机操作系统用户 --创建Windows身份验证用户 USE [master] GO CREATE LOGIN [计算机名称\计算机用 ...

  3. SQL Server 2012实施与管理实战指南(笔记)——Ch6连接的建立和问题排查

    6.连接的建立和问题排查 会话的建立分成2个部分: 1.连接,即找到这个实例 2.认证,告诉sql server谁要连接 目录 6.连接的建立和问题排查 6.1协议选择和别名 6.1.1 服务器网络配 ...

  4. 第十二篇 SQL Server代理多服务器管理

    本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...

  5. Oracle SQL 基本操作之 用户权限管理方法

     Oracle SQL 基本操作之 用户权限管理方法 最近把有关用户操作和权限管理的东西整理了一下,虽然不少博客都有过类似的整理,但是自己发现他们的内容或多或少都有些错误.于是,本人亲自对每条语句进行 ...

  6. 浅谈SQL Server 对于内存的管理

    简介 理解SQL Server对于内存的管理是对于SQL Server问题处理和性能调优的基本,本篇文章讲述SQL Server对于内存管理的内存原理. 二级存储(secondary storage) ...

  7. 第十七周翻译-SQL Server中事务日志管理的阶梯,级别5:以完全恢复模式管理日志

    SQL Server中事务日志管理的阶梯,级别5:以完全恢复模式管理日志 作者:Tony Davis,2012/01/27 翻译:赖慧芳 译文: 该系列   本文是Stairway系列的一部分:SQL ...

  8. SQL Server中事务日志管理的步骤,第5级:完全恢复模式管理日志(译)

    SQL Server中事务日志管理的步骤,第5级:完全恢复模式管理日志 作者:Tony Davis,2012/01/27 系列 本文是进阶系列的一部分:SQL Server中事务日志管理的步骤 当事情 ...

  9. 【译】第十二篇 SQL Server代理多服务器管理

    本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...

  10. (转)浅谈SQL Server 对于内存的管理

    简介 理解SQL Server对于内存的管理是对于SQL Server问题处理和性能调优的基本,本篇文章讲述SQL Server对于内存管理的内存原理. 二级存储(secondary storage) ...

随机推荐

  1. CSS操作——列表属性

    CSS中提供了一些列表属性可以用来: ​ (1).设置不同的列表项标记为有序列表 ​ (2).设置不同的列表项标记为无序列表 ​ (3).设置列表项标记为图像 list-style-type(系统提供 ...

  2. nginx对称加密算法和非对称加密算法nginx证书配置

    对称加密算法 对称加密性能更好 对称加密: 客户端和服务器之间的通信数据是通过对称加密算法进行加密,对称加密是在加密和解密的过程中使用同一个私钥进行加密和解密,而且加密算法是公开的,所以对称加密中的私 ...

  3. iOS线程While-True死循环会发生什么

    一.在工作的代码有一段while-True轮训的逻辑,循环中主要的工作是阻塞的IO 代码大概如下: dispatch_async(dispatch_get_global_queue(0, 0), ^{ ...

  4. ReplayKit2:声音回调时间戳问题

    一.ReplayKit2 框架回调中 视频.micphone声音.系统声音三路回调 - (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffe ...

  5. itest(爱测试)开源接口测试&敏捷测试&极简项目管理 6.6.6 发布,新增接口mock

    (一)itest 简介及更新说明 itest 开源敏捷测试管理,testOps 践行者,极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock 6合1,又有丰富的统计分析.可按测试包 ...

  6. SMB3.0多通道叠加双网卡提速

    SMB3.0多通道叠加双网卡提速 (双网卡.多网卡,NAS,局域网共享速度) WIN8及以上是默认开启的.(WIN10.WIN11 默认开启) 只需要同规格的网卡,比如你一张是1Gbps的,另一张网卡 ...

  7. vm ware cent os 共享文件夹

    1.VM中安装vm-tools 2.在VM 虚拟机设置中添加共享文件夹. 3.重启虚拟机 4.在/mnt/ 里新建一个名为"win"的文件夹 5.在cent os 中执行: vmw ...

  8. Scrapy框架(九)--分布式爬虫

    分布式爬虫 - 概念:我们需要搭建一个分布式的机群,让其对一组资源进行分布联合爬取. - 作用:提升爬取数据的效率 - 如何实现分布式? - 安装一个scrapy-redis的组件 爬取到的数据自动存 ...

  9. OpenTelemetry 实践指南:历史、架构与基本概念

    背景 之前陆续写过一些和 OpenTelemetry 相关的文章: 实战:如何优雅的从 Skywalking 切换到 OpenTelemetry 实战:如何编写一个 OpenTelemetry Ext ...

  10. HttpServletRequest获取header参数 sign

    HttpServletRequest获取header参数 sign //从请求头中获取参数 private static Map<String, String> getHeaders(Ht ...