SQL Server使用证书最小粒度授权
最近在项目中某个功能遇到了阻塞造成的Time out错误。所以需要在执行该功能的时候开启一个线程检测SQL Server中阻塞会话。但是程序本身使用的sql帐号本身不具备VIEW Sever State权限。这个权限是sys_admin角色的。所以就需要使用证书将View Server State权限赋予给普通账号。
在开发之前找到了以下两篇博文参考:
SQL Server 2005: 存储过程签名 - stswordman - 博客园
http://www.cnblogs.com/stswordman/archive/2008/07/29/1255322.html
这一篇使用了master key. 当数据库备份后, 在其他数据库还原时需要master key.
Pitching Pebbles - Using Certificates to Grant Privileges | ColleenMorrow.com
http://colleenmorrow.com/2011/12/19/tossing-pebbles-using-certificates-to-grant-privileges/
这一篇直接使用的证书的密钥做. 没有前一篇master key带来的问题. 只是示例使用的是master库.以及直接赋予的sys_admin角色的权限.
本人结合两篇博文的要点,采用证书密码的方式授予View Server State权限。
以下是代码
新建一个查看阻塞进程的存储过程:
USE [TestDB]
GO CREATE PROC [dbo].[sp_CheckBlockSession]
AS
WITH CTE_SID ( BSID, SID, sql_handle )
AS ( SELECT blocking_session_id ,
session_id ,
sql_handle
FROM sys.dm_exec_requests
WHERE blocking_session_id <> 0
UNION ALL
SELECT A.blocking_session_id ,
A.session_id ,
A.sql_handle
FROM sys.dm_exec_requests A
JOIN CTE_SID B ON A.SESSION_ID = B.BSID
)
SELECT C.BSID AS blocking_session_id,
C.SID AS session_id,
S.login_name ,
S.host_name ,
S.status ,
S.cpu_time ,
S.memory_usage ,
S.last_request_start_time ,
S.last_request_end_time ,
S.logical_reads ,
S.row_count ,
q.text
FROM CTE_SID C
JOIN sys.dm_exec_sessions S ON C.sid = s.session_id
CROSS APPLY sys.dm_exec_sql_text(C.sql_handle) Q
ORDER BY sid
新建一个最小权限账户
USE TestDB
GO
--新建一个最小权限账户
CREATE LOGIN TEST_View WITH PASSWORD = '';
CREATE USER TEST_View FOR LOGIN Test_View
--让该账户有权限执行存储过程dbo.sp_CheckBlockSession
GRANT EXECUTE ON sp_CheckBlockSession TO Test_View
测试最小权限账户执行sp_CheckBlockSession
EXECUTE AS LOGIN = 'TEST_View' ;
EXEC sp_CheckBlockSession
REVERT ;
--错误消息
消息 297,级别 16,状态 1,过程 sp_CheckBlockSession,第 3 行
用户没有执行此操作的权限。
USE TestDB
GO
--创建证书以及授权
CREATE CERTIFICATE certSignCheckBlockSession_1 ENCRYPTION BY PASSWORD ='TEST111' WITH SUBJECT = 'for signing procedure sp_CheckBlockSession', EXPIRY_DATE='2025-10-10' ;
-- sp_CheckBlockSession
ADD SIGNATURE TO sp_CheckBlockSession BY CERTIFICATE certSignCheckBlockSession_1 WITH PASSWORD = 'TEST111' ;
BACKUP CERTIFICATE certSignCheckBlockSession_1 TO FILE = 'certSignCheckBlockSession_1.cer' ; USE master
GO
CREATE CERTIFICATE certSignCheckBlockSession_1 FROM FILE = 'certSignCheckBlockSession_1.cer' ; -- 创建登录并映射到证书
CREATE LOGIN L_TESTVIEW FROM CERTIFICATE certSignCheckBlockSession_1 ;
-- 通过授权映射登录的方式将ALTER ANY LOGIN权限赋给证书
GRANT VIEW SERVER STATE TO L_TESTVIEW ;
--测试最小权限账户权限
USE TestDB
GO
EXECUTE AS LOGIN = 'TEST_View' ;
EXEC sp_CheckBlockSession
REVERT ;--成功得到结果, 不再提示用户没有此操作权限.
以上是使用证书签名存储过程的全部过程. 可以实现最小粒度权限的赋予。这样在生产环境中,就避免了赋予不必要的管理权限。降低风险!
注意事项:证书备份路径的问题. 如果没有指定绝对路径。则备份文件在D:\Program Files (x86)\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA(楼主的机器)目录下面。这个目录有可能权限不足而无法备份到里面。本来我想使用绝对路径的。但是由于我开发某个项目时,使用了一个功能造成我当前账户的权限被缩小到很小。无法使用绝对路径进行备份,所以才使用了默认路径。各位做测试的话要注意这个问题。
SQL Server使用证书最小粒度授权的更多相关文章
- SQL Server 镜像证书过期处理
转自:https://www.cnblogs.com/trams/archive/2012/01/13/2321637.html SQL Server 镜像证书过期处理 今天镜像中的主服务器进行维护重 ...
- SQL Server时间粒度系列----第1节时间粒度概述
本文目录列表: 1.什么是时间粒度?2.SQL Server提供的时间粒度3.SQL Server时间粒度代码演示 4.SQL Server基准日期 5.总结语6.参考清单列表 什么是时间粒度 ...
- SQL Server时间粒度系列----第2节日期、周时间粒度详解
本文目录列表: 1.从MySQL提供的TO_DAYS和FROM_DAYS这对函数说起2.SQL Server日期时间粒度3.SQL Server周有关时间粒度 4.总结语 5.参考清单列表 从My ...
- SQL Server时间粒度系列----第3节旬、月时间粒度详解
本文目录列表: 1.SQL Server旬时间粒度2.SQL Server月有关时间粒度 3.SQL Server函数重构 4.总结语 5.参考清单列表 SQL Server旬时间粒度 ...
- 第三篇 SQL Server安全主体和安全对象
本篇文章是SQL Server安全系列的第三篇,详细内容请参考原文. 一般来说,你通过给主体分配对象的权限来实现SQL Server上的用户与对象的安全.在这一系列,你会学习在SQL Server实例 ...
- 【译】第三篇 SQL Server安全主体和安全对象
本篇文章是SQL Server安全系列的第三篇,详细内容请参考原文. 一般来说,你通过给主体分配对象的权限来实现SQL Server上的用户与对象的安全.在这一系列,你会学习在SQL Server实例 ...
- 转:sql server锁知识及锁应用
sql server锁(lock)知识及锁应用 提示:这里所摘抄的关于锁的知识有的是不同sql server版本的,对应于特定版本时会有问题. 一 关于锁的基础知识 (一). 为什么要引入锁 当多个用 ...
- SQL SERVER锁(LOCK)知识及锁应用
提示:这里所摘抄的关于锁的知识有的是不同sql server版本的,对应于特定版本时会有问题. 一 关于锁的基础知识 (一). 为什么要引入锁 当多个用户同时对数据库的并发操作时会带来以下数据不一致的 ...
- 第7讲:SQL Server简介
SQL Server是微软公司提供的一款关系数据库管理系统. 操作数据库有两种方式:SQL语句和可视化的SSMS,该文章所有操作均基于SSMS. 一.SSMS(SQL Server Managemen ...
随机推荐
- 2101244 - FAQ: SAP HANA Multitenant Database Containers (MDC)
Symptom You face issues or have questions related to multitenant database containers in SAP HANA env ...
- 手写注解实现SpringMVC
参考:https://www.cnblogs.com/Shock-W/p/6617068.html
- 30个php操作redis常用方法代码例子(转载)
1.connect 描述:实例连接到一个Redis.参数:host: string,port: int返回值:BOOL 成功返回:TRUE;失败返回:FALSE示例: $redis = new red ...
- prim及其练习
关于prim,其实我今天才学... prim其实就是最小生成树的一种算法,严格每次的找最小边连到树上.看书上的代码看不懂,于是就自己大胆用堆优化写prim. 搞了很长时间,经过不写努力,还是搞出来了. ...
- 计算机系统的通信PPT版本
通信方式 并行传送:一次8位,需要保持各路信号同时到达,距离和速度受限制,成本较高 串行传送:一次1位,距离较远.速率更高,成本较低. {在单片机的通信中,使用的是串行传送,但是数据寄存器里面的是8位 ...
- Linux ssh命令
SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息. ...
- hello1以及hello2的部分代码分析
(一)1.GreetingServlet.java源码文件: @WebServlet("/greeting") //以@WebServlet注释开头,注释指定相对于上下文根的URL ...
- Unity之AssetBundle打包
AssetBundle Resources:表示U3D自动将资源打成一个AssetBundle包,所有放在Resources下的文件夹都会打成一个AssetBundle包,资源非常大,Resource ...
- 简化Getter 与 Setter 的插件 Lombok
参考文档:https://www.jianshu.com/p/365ea41b3573 第一步:添加依赖 <dependency> <groupId>org.projectlo ...
- 模型介绍之FastText
模型介绍一: 1. FastText原理及实践 前言----来源&特点 fastText是Facebook于2016年开源的一个词向量计算和文本分类工具,在学术上并没有太大创新.但是它的优点也 ...