SQL Server 帐号权限管理及C#编程应用(图解)
昨晚在群里讲解这部分内容,因为好久没操作过了,差点翻车。。。今天把它整理一下发出来,方便没听明白的小伙伴学习和理解。
我们平时学习数据库时,要么使用sa
帐号,要么用windows
默认帐号登录,总之都拥有最高权限,而实际的生产环境中,不可能这样的,帐号权限要严格划分,才能保证基本的安全,那么问题来了,如何为帐号分配权限呢?应用程序需要更高的操作权限,该怎么办呢?下面我们就来解决这两个问题!
任务目标
- 为帐号分配权限,实现对不同表授予不同的增删改查等权限
- 同一帐号,在不同场景下拥有不同权限
任务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#编程应用(图解)的更多相关文章
- SQL Server帐号孤立的问题解决
网站近日经常遭到攻击,好几次数据库挂马,前几天把论坛升级了,今天又升级了数据库,把之前的MSSQL 2000 升级到MSSQL 2005,用的是数据库还原功能还原的,遇到了这个帐号孤立的问题. 什么是 ...
- Microsoft SQL Server 安全与权限
Microsoft SQL Server 安全与权限 登陆角色 计算机操作系统用户 --创建Windows身份验证用户 USE [master] GO CREATE LOGIN [计算机名称\计算机用 ...
- SQL Server 2012实施与管理实战指南(笔记)——Ch6连接的建立和问题排查
6.连接的建立和问题排查 会话的建立分成2个部分: 1.连接,即找到这个实例 2.认证,告诉sql server谁要连接 目录 6.连接的建立和问题排查 6.1协议选择和别名 6.1.1 服务器网络配 ...
- 第十二篇 SQL Server代理多服务器管理
本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...
- Oracle SQL 基本操作之 用户权限管理方法
Oracle SQL 基本操作之 用户权限管理方法 最近把有关用户操作和权限管理的东西整理了一下,虽然不少博客都有过类似的整理,但是自己发现他们的内容或多或少都有些错误.于是,本人亲自对每条语句进行 ...
- 浅谈SQL Server 对于内存的管理
简介 理解SQL Server对于内存的管理是对于SQL Server问题处理和性能调优的基本,本篇文章讲述SQL Server对于内存管理的内存原理. 二级存储(secondary storage) ...
- 第十七周翻译-SQL Server中事务日志管理的阶梯,级别5:以完全恢复模式管理日志
SQL Server中事务日志管理的阶梯,级别5:以完全恢复模式管理日志 作者:Tony Davis,2012/01/27 翻译:赖慧芳 译文: 该系列 本文是Stairway系列的一部分:SQL ...
- SQL Server中事务日志管理的步骤,第5级:完全恢复模式管理日志(译)
SQL Server中事务日志管理的步骤,第5级:完全恢复模式管理日志 作者:Tony Davis,2012/01/27 系列 本文是进阶系列的一部分:SQL Server中事务日志管理的步骤 当事情 ...
- 【译】第十二篇 SQL Server代理多服务器管理
本篇文章是SQL Server代理系列的第十二篇,详细内容请参考原文 在这一系列的上一篇,我们查看了维护计划,一个维护计划可能会创建多个作业,多个计划.你还简单地看了SSIS子系统,并查看了维护计划作 ...
- (转)浅谈SQL Server 对于内存的管理
简介 理解SQL Server对于内存的管理是对于SQL Server问题处理和性能调优的基本,本篇文章讲述SQL Server对于内存管理的内存原理. 二级存储(secondary storage) ...
随机推荐
- 【C#】操作word 【Aspose.Words】
上图是要填充的word模板,就是一个接口说明文档.那个像书名号括起来的东西就是要替换的,这个东西并不是键盘输入的书名号,它是文档部件的一种,要插入这个东西需要: 打开模板word文件,用office打 ...
- java练习项目——记账本
包含登录.注册.记账.每日账单查看.每月报表.添加记账类型这些功能.数据存储采用的是txt文档+xml文档.程序是一个控制台程序,用IntelliJ IDEA+jdk8开发.涉及到的知识有List集合 ...
- 来自多彩世界的控制台——C#控制台输出彩色字符画
引言 看到酷安上有这样一个活动,萌生了用 C# 生成字符画的想法,先放出原图. 酷安手绘牛啤 §1 黑白 将图像转换成字符画在 C# 中很简单,思路大致如下: 加载图像,逐像素提取明度. ...
- 后端给前端rtmp和flv直播 播放方法
const suffixal = this.videoObj.videoServer .split('?')[0] .split('.') .pop() var router = this.$rout ...
- vuex做购物车功能
先创建一个cart组件 <template> <div> <ListItem></ListItem> </div> </templat ...
- windows 批处理 检查并启动 windows 服务
windows 批处理 检查并启动 windows 服务 set srvname="YSWindowsService" sc query|find %srvname% && ...
- EF CORE 遇到“无法打开登录所请求的数据库 "win7bc"。登录失败。”
报错内容:ex:An exception has been raised that is likely due to a transient failure. Consider enabling tr ...
- 使用 OpenTelemetry 构建可观测性 01 - 介绍
毫无疑问,在过去几年里,你可能已经多次听到过可观测性这个词.对于很多人来说,很难理解这个词的真正含义.对许多人来说,他们错误地将其等同于"监控".虽然可观测性的根本定义以及它所包含 ...
- 技术解密Java Chassis 3超实用的可观测性
本文分享自华为云社区<Java Chassis 3技术解密:实用的可观测性>,作者:liubao68. 狭义的可观测性,指日志.调用链和指标,广义的可观测性则包含更多的内容,一般的,应用程 ...
- python 二次封装logging,打印日志文件名正确,且正确写入/结合pytest执行,日志不输出的问题
基于之前日志问题,二次封装日志后,导致日志输出的文件名不对,取到的文件一直都是当前二次封装的log的文件名,基于这个问题,做了优化,详细看 https://www.cnblogs.com/cuitan ...