关于权限管理的实用脚本(r4笔记第94天)

在工作中,可能会接触到很多的环境问题,对于权限问题,总是感觉心有余力而力不足,环境太多了,可能在赋予权限的时候会出差错, 比如下面的场景,数据都存储在owner schema上,如果要访问这些数据,需要创建一些连接用户,所有的操作不能直接在owner schema下进行。 像下面的图形,我们可以根据访问的权限定义两个角色,通过角色来统一给赋予权限。比如TESTO_ALL可以赋予select,insert,delete,update的权限,而TESTL_SEL只能赋予SELECT的权限,这样在复杂的环境中就可以基本合理的控制权限。

这是我们需要努力的方向,使得权限管理更加清晰,但是使用的过程中总是会遇到一些问题,比如有些表重建之后,权限就会丢失,如果操作不规范,就可能导致一些权限丢掉,或者赋予了过多的权限。比如给只读用户赋予了delete权限,给需要做DML的用户只赋予了select权限,没有update权限。这些都会在使用中造成一些问题。 最近客户需要在环境中添加几个只读用户,但是在分配权限的时候,可能老是会丢掉一些权限,有时候涉及的表有上千个,由于连接用户有不少,在连接用户中创建完同义词,一个一个去验证也确实很费力,也不现实。因为环境已经被很多人动过了,可能有些权限本来就有问题,有些权限又丢失,开始的时候修复基本都是根据开发的反馈进行的。 不过这样确实比较被动,专门写了下面的脚本,专门来分析哪些权限丢失了,哪些权限是不应该赋予的。 假设表为owner schema为testo,表为test1,testo_sel应该只赋予select权限,如果赋予了delete,insert,update权限就不应该了。 检查是否有遗漏的select权限 --testo_sel

select t2.grantee,t1.owner,t1.table_name ,t2.privilege missing_role_privs from all_tables t1,dba_tab_privs t2 where t2.grantee =(select role from dba_roles where role='TESTO_SEL') and t2.privilege='SELECT' and t1.owner='TESTO' and t1.table_name=t2.table_name

检查是否有额外的权限 --testo_sel,排除Insert,delete,update权限

select t2.grantee,t1.owner,t1.table_name ,t2.privilege no_need_privs   from all_tables t1,dba_tab_privs t2 where t1.owner='TESTO' and t1.table_name=t2.table_name and t2.grantee=(select role from dba_roles where role='TESTO_SEL') and t2.privilege in ('DELETE','INSERT','UPDATE') 

对于testo_all的权限规则相对简单,只需要判断哪些权限应该赋予,但是却没有。思路简单,做起来稍微得绕个弯子。 从数据行中判断哪些数据行不全,最后只得使用了with子句。 检查是否有遗漏的select,delete,update,insert权限

with TEMP_DML AS 
(
select 'INSERT' temp_dml from dual
union all
select 'DELETE' temp_dml from dual
union all
select 'SELECT' temp_dml from dual
union all
select 'UPDATE' temp_dml from dual
)
select 'TESTO_ALL' grantee,t1.owner,t1.table_name ,TEMP_DML.temp_dml missing_role_privs from all_tables t1,TEMP_DML where  t1.owner='TESTO' 
minus
select t2.grantee,t1.owner,t1.table_name ,t2.privilege missing_role_privs from all_tables t1,dba_tab_privs t2 where t2.grantee =(select role from dba_roles where role='TESTO_ALL') and t2.privilege   in('SELECT','DELETE','UPDATE','INSERT') and t1.owner='TESTO' and t1.table_name=t2.table_name 

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2015-04-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏文渊之博

SQL Server内存

背景 最近一个客户找到我说是所有的SQL Server 服务器的内存都被用光了,然后截图给我看了一台服务器的任务管理器。如图 ? 这里要说明一下任务管理器不会完...

39070
来自专栏CSDN技术头条

应当使用 SQLite 的五个原因

SQLite 是非常优秀的数据库,能够在真实的生产环境中完成一些真正的工作。本文将列出五个我认为在2016年应当选用 SQLite 的原因。 ? 便于管理 不知...

30780

使用Excel分析CloudStack使用记录

本文的内容最初由David Nailey在Build a Cloud博客上撰写。

224100
来自专栏思考的代码世界

Python网络数据采集之存储数据|第04天

存储媒体文件有两种主要的方式:只获取文件 URL 链接,或者直接把源文件下载下来。

49070
来自专栏性能与架构

Mysql Query Cache的负面影响

Query Cache确实是以比较简单的实现带来巨大性能收益的功能。但可能很多人都忽略了使用QueryCache之后所带来的负面影响 (1)Query的hash...

38280
来自专栏更流畅、简洁的软件开发方式

数据层应该分为两个部分,这样可以更好的“分工”,各自研究自己的功能

     数据层应该分为两个部分(并不是说一定要变成两层)第一个部分是处理SQL语句,包括存储过程的名称,存储过程的参数(一下的SQL语句都包含存储过程名称和存...

23960

使用 Excel 分析 CloudStack 使用记录

注:本文最初由 David Nailey 在 Build a Cloud 博客上撰写。

22490
来自专栏数据和云

腾讯游戏DBA利刃 - SQL审核工具介绍

作者介绍 ? 韩全安(willhan) 华中科技大学,硕士,现代数据库方向。2013年毕业,就职于腾讯到今,工作项目:TMySQL、SQL审核、InnoDB列压...

1.5K60
来自专栏PHP在线

优化 MySQL: 3 个简单的小调整

我并不期望成为一个专家级的 DBA,但是,在我优化 MySQL 时,我推崇 80/20 原则,明确说就是通过简单的调整一些配置,你可以压榨出高达 80% 的性能...

17640
来自专栏张秀云的专栏

Spider 引擎分布式数据库解决方案(最全的 spider 教程)

最近开始负责财付通的数据库的相关维护工作,其中有几套系统使用的 spider 引擎,本文将 spider 引擎的功能、使用场景、部署、实战测试等做个简单的总结。

1.3K10

扫码关注云+社区

领取腾讯云代金券