如何为数据库中新建用户B复制用户A的表和视图权限?

news2024/9/20 16:43:42
故事背景:

公司使用的是SQL Server数据库,经常会碰到一种情况,需要为新入职的员工赋予同组内其他同事的权限。

    常用方法:
  • 1) 为同一组申请创建统一的Security Group(安全组),为创建的组分配相关表和视图的访问权限。不管员工入职还是离职,仅需将组内的成员进行相关的添加和删除即可。
  • 2) 由于某些原因,如数据权限最小原则,员工A仅有数据库中某几张表和视图的查询权限。当员工A出现职位变动时,需要为接替者员工B赋予员工A的数据库访问权限。如果逐一给员工B添加相关表和视图的查询权限,则过程漫长,还有可能造成权限遗漏。

当前篇章我们主要详解第2种情况,应该怎样快速把数据库中员工A表和视图的查询权限快速赋予员工B呢?

解决方案:
1,在数据库中创建用户B(如果用户B的登录已存在,则只需创建映射用户B到该登录的数据库):
1 USE [ABC]; -- 切换到目标数据库
2 GO
3 
4 -- 假设B是数据库用户,不是登录名
5 CREATE USER [B] FOR LOGIN [B]; -- 如果B是Windows登录或其他类型登录,需要相应地更改
6 GO
2,将用户A表查询权限赋予用户B:

由于直接复制权限比较复杂,需要遍历所有表和视图,并且检查用户A被授予的SELECT权限。然后再把查到的用户A的表和视图权限赋予用户B。

以下是如何为用户B授予用户A的SELECT权限的示例代码:

1 USE [ABC]; -- 确保使用正确的数据库
 2 GO
 3 
 4 DECLARE @TableName NVARCHAR(256);
 5 DECLARE @SQL NVARCHAR(MAX) = '';
 6 
 7 -- 获取用户A在dbo架构下所有表和视图的SELECT权限,并构建授权语句
 8 DECLARE TableCursor CURSOR FOR
 9 SELECT QUOTENAME(t.name)
10 FROM sys.tables AS t
11 JOIN sys.database_permissions AS dp ON t.object_id = dp.major_id
12 WHERE dp.permission_name = 'SELECT' AND dp.grantee_principal_id = USER_ID('A') AND dp.class = 1
13 
14 OPEN TableCursor;
15 FETCH NEXT FROM TableCursor INTO @TableName;
16 
17 WHILE @@FETCH_STATUS = 0
18 BEGIN
19     SET @SQL = @SQL + 'GRANT SELECT ON ' + @TableName + ' TO [B];' + CHAR(13);
20     FETCH NEXT FROM TableCursor INTO @TableName;
21 END
22 
23 CLOSE TableCursor;
24 DEALLOCATE TableCursor;
25 
26 -- 执行构建的授权语句
27 EXEC sp_executesql @SQL;
28 GO
29 
30 -- 同上,为视图赋予权限
31 DECLARE ViewCursor CURSOR FOR
32 SELECT QUOTENAME(v.name)
33 FROM sys.views AS v
34 JOIN sys.database_permissions AS dp ON v.object_id = dp.major_id
35 WHERE dp.permission_name = 'SELECT' AND dp.grantee_principal_id = USER_ID('A') AND dp.class = 0
36 
37 OPEN ViewCursor;
38 FETCH NEXT FROM ViewCursor INTO @TableName;
39 
40 WHILE @@FETCH_STATUS = 0
41 BEGIN
42     SET @SQL = @SQL + 'GRANT SELECT ON ' + @TableName + ' TO [B];' + CHAR(13);
43     FETCH NEXT FROM ViewCursor INTO @TableName;
44 END
45 
46 CLOSE ViewCursor;
47 DEALLOCATE ViewCursor;
48 
49 EXEC sp_executesql @SQL;
50 GO

请注意,上述脚本使用了动态SQL来构建权限授予的语句,并对每个表和视图执行了授权。QUOTENAME函数用于确保表名和视图名被正确地引用,防止SQL注入。

此外,USER_ID('A')函数获取用户A的数据库主ID,dp.class = 1表示表(OBJECT),dp.class = 0表示视图(VIEW)。在实际应用中,你可能需要根据实际情况调整上述脚本,以确保正确地复制所需的权限。

在执行这些操作之前,请确保你具有足够的权限,并且了解这些操作的后果,因为它们可能会对数据库的安全性和访问控制产生重大影响。

今天分享就到这道,想了解更多小技巧,记得关注我哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1648458.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一站式IT运维管理平台CAT

什么是 CAT ? CAT(Coffee And Tea)是专为 IT 运维从业者打造的一个开源的、开放的一站式 IT 运维管理平台。包含资产管理、工单、工作流、仓储等功能模块,以及可靠的移动端应用(Uniapp)支持。 CAT 项目是 c…

Java+SpringBoot+JSP实现在线心理评测与咨询系统

前言介绍 随着互联网技术的高速发展,人们生活的各方面都受到互联网技术的影响。现在人们可以通过互联网技术就能实现不出家门就可以通过网络进行系统管理,交易等,而且过程简单、快捷。同样的,在人们的工作生活中,也就…

java-springboot项目添加swagger2/Knife4j,附注解

文章目录 添加依赖config工作包中新增SwaggerConfig报错注解 环境&#xff1a; jdk1.8 java8 springboot2.6.13 swagger2.9.2 添加依赖 pom.xml <!-- 添加swagger2--><dependency><groupId>io.springfox</groupId><artifactId>springfo…

欧盟委员会发布《数据法》指南

文章目录 前言一、B to B和B to C的数据共享二、企业间数据共享三、不公平合同条款四、企业对政府的数据共享五、数据处理服务之间的切换六、关于第三国政府非法访问数据七、关于可互操作性八、关于《数据法》的执行前言 4月21日,欧盟委员会在其官方网站发布了《数据法》(Th…

神经网络极简入门

神经网络是深度学习的基础&#xff0c;正是深度学习的兴起&#xff0c;让停滞不前的人工智能再一次的取得飞速的发展。 其实神经网络的理论由来已久&#xff0c;灵感来自仿生智能计算&#xff0c;只是以前限于硬件的计算能力&#xff0c;没有突出的表现&#xff0c;直至谷歌的A…

Zabbix+Grafana-常见报错及异常处理方式记录

文章目录 Zabbix安装篇Zabbix Web页面连接数据库失败 Zabbix使用篇中文显示不全 Zabbix报警篇新建的用户&#xff0c;配置报警后&#xff0c;无法收到报警 Grafana安装篇Windows系统安装时&#xff0c;添加zabbix报错&#xff1a;An error occurred within the plugin Zabbix安…

电商老板们,换个地方抢流量吧,抖音已经进入中后期了!

大家好&#xff0c;我是电商糖果 所有的电商平台&#xff0c;都会从巅峰时段&#xff0c;慢慢回归平稳&#xff0c;也就是大家说的中后期阶段。 中后期阶段的平台&#xff0c;各种流程化已经成熟。 新手商家再入局&#xff0c;很难从老商家手里抢到流量&#xff0c;这个时期…

双ISP住宅IP有何优势?

双ISP住宅IP在当前的互联网环境中具有显著的优势&#xff0c;这些优势主要体现在网络连接的稳定性、安全性、速度以及业务适用范围等方面。以下是对双ISP住宅IP优势的详细分析&#xff1a; 第一点网络连接的稳定性&#xff0c;双ISP住宅IP使用两个不同的互联网服务提供商&…

ICC2:optimize_routability

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 在postroute阶段,一些pin access引起的绕线问题,通常以end of line和short/spacing的形式扎堆出现,总量兴许不多,但是反复绕线仍难解决,返回preplace去设置keepout margin或placement label又得…

2024年Q1脱毛膏线上市场(京东天猫淘宝)销量销额排行榜

鲸参谋监测的2024年Q1季度线上电商平台&#xff08;天猫淘宝京东&#xff09;脱毛膏行业销售数据已出炉&#xff01; 根据鲸参谋数据显示&#xff0c;今年Q1季度在线上电商平台&#xff08;天猫淘宝京东&#xff09;&#xff0c;脱毛膏的销量累计接近220万件&#xff0c;环比增…

3D模型实时变形算法

最近&#xff0c;在尝试渲染一些奇怪的形状后&#xff0c;我陷入了计算机图形学的困境。事实证明&#xff0c;对于我试图解决的具体问题&#xff0c;没有现有的选项完全适合我想要做的事情。几周后&#xff0c;我终于带着一些答案再次浮出水面&#xff0c;写了很多行代码&#…

首席数据官CCDO的核心能力素质:引领企业数据战略的关键

在数字化时代&#xff0c;数据已成为企业最宝贵的资产&#xff0c;而首席数据官&#xff08;CCDO&#xff09;的角色也日益凸显。作为企业数据战略的核心推动者&#xff0c;CCDO需要具备一系列核心能力素质&#xff0c;以确保企业能够充分利用数据资源&#xff0c;实现业务增长…

layui的treeTable组件,多层级上传按钮失效的问题解决

现象描述: layui的treeTable 的上传按钮在一层能用&#xff0c;展开后其他按钮正常点击&#xff0c;上传按钮无效。 具体原因没有深究&#xff0c;大概率是展开的子菜单没有被渲染treeTable的done管理到&#xff0c;导致没有重绘上传按钮。 解决方案: 不使用layu的上传组件方法…

Docker容器创建各种镜像

目录 1.Docker创建Mysql容器 2.Docker创建Redis容器 3.Docker 创建minio容器 1.Docker创建Mysql容器 拉取镜像 docker pull mysql:8.0.20 宿主机创建挂载目录 /opt/mysql/conf /opt/mysql/data /opt/mysql/log 启动命令 docker run --name mysql -p 3306:3306 -v /opt/…

探索1688、淘宝、京东搜索商品聚合API接口:一站式电商搜索解决方案

随着电商行业的不断发展&#xff0c;电商平台的数量和商品种类都在快速增长。商家和开发者在运营过程中&#xff0c;需要经常进行跨平台的商品搜索和数据分析。然而&#xff0c;由于各个电商平台的数据接口存在差异&#xff0c;直接对接多个平台不仅效率低下&#xff0c;而且维…

【动态规划三】子数组系列

目录 leetcode题目 一、最大子数组和 二、环形子数组的最大和 三、乘积最大子数组 四、乘积为正数的最长子数组长度 五、等差数列划分 六、最长湍流子数组 七、单词拆分 八、环绕字符串中唯一的子字符串 子数组系列&#xff0c;属于线性dp问题&#xff0c;状态表示也是…

Java实现手机短信验证码(互亿无线)

互亿无线 互亿无线是一家提供电信类增值服务插件以及其他相关插件的公司&#xff0c;是中国移动、中国联通、中国电信三大运营商的战略合作伙伴与工信部认定的电信增值业务服务商。公司旗下运营三大业务平台&#xff1a;数字奖励营销活动平台、应用短信平台、营销短信平台。 官…

阿里开源的lowcode-engine:加速企业级应用开发的低代码利器

lowcode-engine 是阿里巴巴推出的一个企业级的低代码开发平台&#xff0c;它就像是给开发者的一个工具箱&#xff0c;里面装满了各种现成的工具和材料&#xff0c;让搭建应用程序变得像搭积木一样简单。你不需要从零开始&#xff0c;而是可以直接用这些工具和材料去构建你想要的…

AJ-Report开源数据大屏远程命令执行漏洞

文章目录 描述漏洞原理影响版本漏洞复现修复方案 描述 AJ-Report是全开源的一个BI平台&#xff0c;酷炫大屏展示&#xff0c;能随时随地掌控业务动态&#xff0c;让每个决策都有数据支撑。     多数据源支持&#xff0c;内置mysql、elasticsearch、kudu驱动&#xff0c;支持…

STM32单片机实战开发笔记-GPIO控制LED灯、蜂鸣器、继电器等【wulianjishu666】

单片机物联网开发资料&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1XzodQuML7CqZ4ZKinDGKkg?pwdbgep 提取码&#xff1a;bgep 单片机GPIO的Do输出功能 1、功能描述 根据MP3的声音频率&#xff0c;让LED灯以不同的高度&#xff08;LED的多少&#xff09;&#xf…