当前位置: 首页 > news >正文

Oracle的dbms.rls实现数据访问控制

在大部份系统中,权限控制主要定义为模块进入权限的控制和数据列访问权限的控制(如:某某人可以进入某个控制,仓库不充许查看有关部门的字段等等)。

  但在某些系统中,权限控制又必须定义到数据行访问权限的控制,此需求一般出现在同一系统,不同的相对独立机构使用的情况。(如:集团下属多个子公司,所有子公司使用同一套数据表,但不同子公司的数据相对隔离),绝大多数人会选择在View加上Where子句来进行数据隔离。此方法编码工作量大、系统适应用户管理体系的弹性空间较小,一旦权限逻辑发生变动,就可能需要修改权限体系,导致所有的View都必须修改。

  本文探讨的使用Oracle提供的Policy管理方法来实现数据行的隔离

  注意:这里的policy是在9i上

  (1)建立数据表(t_policy):

  CREATE TABLE T_POLICY(T1  VARCHAR2(10 BYTE),T2  NUMBER(10));insert into t_policy values('a',10);insert into t_policy values('b',20);insert into t_policy values('c',30);commit;

  (2)建立测试policy的函数:

  CREATE OR REPLACE function Fn_GetPolicy(P_Schema In Varchar2,P_Object In Varchar2) return varchar2 isResult varchar2(1000);beginResult:='t2 not in (10)';return(Result);end Fn_GetPolicy;/

  (3)加入policy:

  declareBeginDbms_Rls.Add_Policy(Object_Schema =>'niegc',  --数据表(或视图)所在的Schema名称Object_Name =>'T_Policy', --数据表(或视图)的名称Policy_Name =>'T_TestPolicy', --POLICY的名称,主要用于将来对Policy的管理Function_Schema =>'NIEGC',  --返回Where子句的函数所在Schema名称Policy_Function =>'Fn_GetPolicy', --返回Where子句的函数名称Statement_Types =>'Select,Insert,Update,Delete', --要使用该Policy的DML类型,如'Select,Insert,Update,Delete'Update_Check =>True, --仅适用于Statement_Type为'Insert,Update',值为'True'或'False'Enable =>True    --是否启用,值为'True'或'False');end;

  注:如果Update_Check设为'True',则用户插入的值不符合Policy_Function返回条件时,该DML执行返回错误信息。

  现在就可以工作了:

select * from t_policy;

  看看结果怎样,是不是少了t2=10这项了.

  (4)删除policy

  declarebegindbms_rls.drop_policy('niegc','T_POLICY','T_TESTPOLICY');end;

  (5)设置policy的状态

  declarebegindbms_rls.enable_policy('niegc','t_policy','t_testpolicy',false);end;

  (6)查看policy

  可以通过user_policies这个表看到.
 

相关文章:

Oracle的dbms.rls实现数据访问控制

在大部份系统中,权限控制主要定义为模块进入权限的控制和数据列访问权限的控制(如:某某人可以进入某个控制,仓库不充许查看有关部门的字段等等)。 但在某些系统中,权限控制又必须定义到数据行访问权限的控制,此需求一般…...

Python 自定义函数的基本步骤

一、Python 自定义函数的基本步骤 1、什么是函数 函数,其实我们一开始学 Python 的时候就接触过。 不过我们使用的大多数都是 Python 的内置函数。 比如基本每个章节都会出现的 print() 函数。 而现在,我们主要学习的是自定义函数。 各位有没有想过…...

阿里云新品云服务器实例,经济型e实例,价格便宜,性价比高

前不久,阿里云推出了一款全新云服务器实例,他是阿里云面向个人开发者、学生、小微企业,在中小型网站建设、开发测试、轻量级应用等场景推出的全新入门级云服务器,基于“飞天CIPU”黄金技术架构设计,可轻松满足网站建设…...

统信操作系统UOS上安装arm64版nginx

原文链接:统信操作系统UOS上安装arm64版nginx hello,大家好啊,今天给大家带来一篇在统信桌面操作系统UOS上安装arm64版nginx的文章,本篇文章主要是给大家提供一种下载离线nginx软件包的方法,拿到软件包可以去不能链接互…...

2017年高热度编程语言简介

世上语言千千万,我却独爱这一种!”这句话用来形容程序员和编程语言之间的爱恨情仇实在是再精准不过了。根据GitHub 2016年的开源报告,其上所有开源项目共包含了316种编程语言,这是一个什么概念呢?举个例子来说,世界上共有226个国…...

python爬虫入门(一)web基础

HTTP基本要点 HTTP请求,由客户端向服务端发出,可以分为 4 部分内容:请求方法(Request Method)、请求的网址(Request URL)、请求头(Request Headers)、请求体&#xff08…...

利用TreeMap来解决P3029 [USACO11NOV] Cow Lineup S

P3029 [USACO11NOV] Cow Lineup S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 好了,我们首先要统计奶牛的种类数量n,好与接下来我们记录一个范围内的奶牛的数量作比较,一旦我们统计范围内的奶牛的数量m达到我们刚开始记录的奶牛的数量n我…...

zzy-project-cli,提供多个框架的脚手架

npm地址 install npm install zzy-project-cli -g做什么? 将多个可选的框架提供给使用者选择,选中后自动下载对应模板,快捷使用。 使用 step1 zzy-cli create [项目名称]step2 获取模板之后选取任一进行下载 下载完成之后即可使用 模…...

C++类和对象中(构造函数,析构函数,拷贝构造函数)详解

C类和对象中[构造函数,析构函数,拷贝构造函数]详解 一.前言1.类的6个默认成员函数 二.构造函数1.构造函数的引出2.无参构造函数3.缺省参数在构造函数中的应用4.编译器实现的默认构造函数5.广义的默认构造函数6.默认构造函数的形成规则 三.析构函数1.析构函数的语法2.编译器实现…...

智能矩阵系统解决的问题?

智能矩阵系统可以解决的问题多种多样,它主要通过人工智能技术应用于矩阵系统,解决一些传统方法难以处理的问题。 以下是一些常见的应用场景: 1. 数据管理:智能矩阵系统可以有效地管理大量的数据,包括数据的存储、检索…...

计算机网络——计算机网络体系结构(3/4)-计算机网络体系结构分层思想举例

目录 发送请求报文 应用层构建HTTP请求报文 运输层添加TCP首部 网络层添加IP首部 数据链路层形成帧 物理层转化为比特流 路由器处理 服务器处理 发回响应报文 计算机网络体系结构分层思想举例 假设网络拓扑如下所示,主机属于网络N1,Web服务器属…...

计算机网络,网络(OSI)七层模型,三次握手四次挥手,get与post请求区别,网络IO(BIO\NIO\AIO),TCP与UDP区别

1.OSI模型? 开放式系统互联通信参考模型(Open System Interconnection Reference Model) OSI网络七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层 TCP/IP协议群简化了OSI七层模型:应用层、传输层、网络层、数据链路…...

【网络爬虫 | Python】数字货币ok链上bitcoin大额交易实时爬取,存入 mysql 数据库

文章目录 一、网站分析二、js 逆向获取 X-Apikey三、python 调用 js 获取 X-Apikey四、python 爬虫部分五、mysql 数据库、日志、配置文件、目录结构六、结尾 一、网站分析 oklink:https://www.oklink.com/ btc 大额交易:https://www.oklink.com/btc/tx-…...

【Servlet】实现Servlet程序

文章目录 1. 最朴素方式1. 创建项目2. 引入依赖3. 创建目录4. 编写代码5. 打包程序6. 部署程序7. 验证程序 2. 更方便方式1. 安装Smart TomCat插件2. 启动 1. 最朴素方式 1. 创建项目 选择Maven项目 2. 引入依赖 Maven项目创建完后会生成一个pom.xml文件,我们可…...

binlog 和 redolog 有什么区别

binlog 和 redolog 都是 Mysql 里面用来记录数据库数据变更操作的日志. binlog 其中 binlog 主要用来做数据备份、数据恢复和数据同步,在Mysql 的主从数据同步的场景中,master 节点的数据变更,会写入到 binlog 中,然后再把 binl…...

Git 修改已提交的用户名和邮箱

Git 修改已提交的用户名和邮箱 修改上一次提交的邮箱和用户名 git commit --amend --author Name<email>批量修改多次提交的邮箱和用户名 新建一个 .sh 脚本在 git 根目录下.sh脚本内容如下 git filter-branch --env-filter an"$GIT_AUTHOR_NAME" am"…...

小游戏外包开发流程及费用

小游戏的开发流程和费用会因项目的规模、复杂性和所选技术平台而有所不同。以下是一般的小游戏开发流程和可能的费用因素&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 开发流程&#xff1a; 概念和…...

Homeassistant docker配置

Homeassistant docker配置 【说明】本系列为自用教程&#xff0c;记录以便下次使用 【背景】一台J1900 4G64G的小主机&#xff0c;安装了OP系统&#xff0c;里面自带了Docker。为实现Homeassistant&#xff08;简称HA&#xff09;控制智能家居设备&#xff0c;进行如下配置。 【…...

Go 深入解析非类型安全指针

一、引言 非类型安全指针&#xff08;也称为“裸指针”或“原始指针”&#xff09;在编程领域中一直是一个具有争议和挑战性的主题。它们赋予程序员直接操作计算机内存的能力&#xff0c;为高级性能优化和底层系统交互提供了可能。然而&#xff0c;这种能力往往伴随着高风险&a…...

vue动态绑定class

Vue.js 允许您使用 v-bind 指令或简写的 : 来动态绑定 class 属性。这允许您基于某些条件为元素添加或删除类名&#xff0c;从而实现动态样式控制。以下是一些示例&#xff1a; 动态添加单个类名&#xff1a; <template> <div> <p :class"{ active: isActi…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...