首页 > 其他分享 >DM8通过触发器实现用户建表自动为其他用户授予对象权限

DM8通过触发器实现用户建表自动为其他用户授予对象权限

时间:2023-10-20 17:37:26浏览次数:40  
标签:触发器 建表 name grant 用户 DM8 varchar NULL

需求

业务用户A会周期性的创建临时表,这部分临时表又有需要被其他用户B访问的需求。
手动授权仅能将授权时存在的表进行授权,我们尝试通过触发器实现。

处理方法

-- 前提1:DDL_TV_TRIGGER = 1(默认0,静态参数,添加后需要重启数据库)
-- 前提2:SP_INIT_DBMS_SCHEDULER_SYS(1);

/* SYSDBA创建触发器 */
create or replace trigger TR_GRANT_NEWTABLE after CREATE ON DATABASE
DECLARE
    v_owner       varchar(100);
    v_object_type varchar(100);
    v_table_name  varchar(100);
    v_grant_sql   varchar(300);
begin
    v_owner       = DM_DICT_OBJ_OWNER;
    v_object_type = DM_DICT_OBJ_TYPE;
    v_table_name  = DM_DICT_OBJ_NAME;
    IF (v_owner = 'A' and v_object_type = 'TABLE' and v_table_name like 'TEST%') THEN
        v_grant_sql = 'grant select on ' || v_owner || '.' || v_table_name || ' TO B';
        /* 通过创建立即完成的JOB来绕过触发器内直接赋权带来的死锁问题,该作业自动执行,自动删除(参数见系统包使用手册) */
        DBMS_SCHEDULER.CREATE_JOB (
        'job_grant_newtable', 
        'PLSQL_BLOCK', 
        'begin execute immediate '''||v_grant_sql||'''; end;',
        0,
        NULL,
        NULL,
        NULL,
        'DEFAULT_JOB_CLASS',
        TRUE,
        TRUE,
        NULL,
        NULL,
        NULL);
    END IF;
end;

-- 此时A用户创建的TEST开头的表将被自动赋权给B用户select权限。

处理思路参考了该博文:
https://www.cnblogs.com/lvcha001/p/11088611.html

标签:触发器,建表,name,grant,用户,DM8,varchar,NULL
From: https://www.cnblogs.com/xj-mrcat/p/17777586.html

相关文章

  • 用户故事与敏捷方法03
    第11章测量并监控速率我们将项目分成一系列迭代来做发布计划,每轮迭代中安排一定故事点的任务。一轮迭代完成的故事点就是项目的速率。因为速率是非常重要的度量,所以怎么测量它变得很重要,而且速率在初期的迭代可能很不稳定,经过两三轮迭代后,才能获得一个长期的、比较稳定的速率。......
  • Python + Selenium + Firefox 使用代理 auth 的用户名密码授权
    Python+Firefox+插件(closeproxy.xpi)其中,closeproxy.xpi文件,需要Google、Bing搜下都能搜到下载地址完整的测试代码如下: fromseleniumimportwebdriverfromselenium.webdriver.firefox.firefox_binaryimportFirefoxBinaryfromselenium.webdriver.common.proxyimp......
  • Java 多线程例子2 前台线程(用户线程) 后台线程(守护线程 ) setDaemon
    1,setDaemon(true)后就是后台线程(守护线程),反之就是前台线程(用户线程)2,后台线程和前台线程的区别:在java程序中如果所以的前台线程都已经退出,所有的后台线程自动退出。TestThread为后台线程:publicclassThreadDemo{ publicstaticvoidmain(String[]args){ Threadt=newTes......
  • 微信小程序发布后部分用户不能及时更新
    在app.js里的onLaunch里加入如下代码onLaunch(){if(wx.canIUse('getUpdateManager')){constupdateManager=wx.getUpdateManager()updateManager.onCheckForUpdate(function(res){console.log('onCheckForUpdate====',res)......
  • 以下是一个简单的HTML代码示例,演示如何实现分身份登录(用户登录和管理员登录)
    <!DOCTYPEhtml><html><head><title>分身份登录</title></head><body><h2>用户登录</h2><formaction="user_login.php"method="post"><labelfor="user_username"......
  • MySQL创建用户并授权指定数据库
    创建账号CREATEUSER'账号'@'%'IDENTIFIEDBY'密码';mysql8的话需要改一下加密方式ALTERUSER'账号'@'%'IDENTIFIEDWITHmysql_native_passwordBY'密码';创建数据库,必须要有库,不然无法绑定CREATEDATABASE数据库名;把数据库权限给用户GRANTSEL......
  • hadoop集群 大数据项目实战_电信用户行为分析_day03
    配置系统环境  Reis1.先把之前的dump.rdb删除掉rm-rfdump.rdb 2.把原始项目给的dump.rdb放进来,它里面包含了需要的数据,比如端口;在这部之前必须要进行关闭端口,随后传送文件,最后重启端口相关指令:   bin/redis-server conf/redis.conf   bin/redis-cli  bin......
  • Windows git bash 命令行提示主机、用户、路径等默认信息 修改
    全局说明命令提示行,默认显示主机、用户、路径等信息,但是有时候截图,有意无意的就会泄露一些信息,被人看到时,太暴露隐私。这个显示右PS1这个变量来管理的,所以就在~/.bash_profile文件里修改想要的样式就可以一、环境下默认的特殊符号所代表的意义:\u:当前用户的账号名称\w:完......
  • Ubuntu 开启root用户登陆
    Ubuntu开启root用户登陆版本20、22的Ubuntu都可以su#切换到root账户下面如果不行。#如果Su不行,请输入sudo-i,然后用密码登陆密码一般为当前账户的密码,必须有sudo的权限passwdroot#先把root的密码设置一下,默认情况下root是没有设置密码的。aptinstall-y......
  • 第3章 用户管理(一)
    Linux是一种多用户操作系统,提供了强大的用户管理功能。在Linux中,用户和组是管理系统资源和权限的基本单位。本文将为您介绍Linux用户/组的概念和相关操作,以帮助您更好地管理系统中的用户和组。1.用户/组概览1.1用户表示UID与GID每个用户在Linux系统中都有一个唯一的数字标识符,......