39、安全_1(权限、用户profile文件、密码文件、VPD对行级访问的控制)

news/2025/2/22 2:31:54/文章来源:https://www.cnblogs.com/xgq20210831/p/18562895

oracle 用户和安全

基本概念
1、认证:说的是认证通过之后,才能登陆进入数据库
2、授权:是登陆进入数据库以后,能做什么
3、审计:进入数据库以后,授权以后,做事情被记录做事过程
这就是传说中的:3A(authentication认证、authorization授权、audit审计)

建立一个用户,然后给用户授权
关于授权(有哪些权限?):
1、系统权限:能建表、能建索引、能删除表、能删除索引、能建存储过程、能登陆数据库。
2、对象权限:能访问某个表、在某个对象上的权限。
3、角色:将一部分系统权限,和对象权限打包,给一个角色,将角色再给用户,减少反复授权这种情况,当然角色也可以给角色。

用EM建一个用户,要把em用明白了

1、登录em,浏览器里输入网址:http://192.168.56.12:1158/em -- 192.168.56.12:服务器的ip地址

2、

3、

4、

5、建一个用户

6、授权,系统权限

7、对象权限

8、角色

9、限额

10、显示SQL

注意这几点:
1、用户名
2、密码复杂度要求
3、默认表空间,建表时默认放到这个表空间中
4、默认临时表空间,将来使用临时表空间的时候,就用默认临时表空间
5、系统权限,参数admin option表示权限可以给别人
connect:登陆数据库的权限
resource:可以建表建对象
select all table:查询所有表的权限 如select * from u2.test;
create all table:可以为其他用户创建表 如create table u2.t1;
6、对象权限,参数grant option表示权限可以给别人
针对某个用户低下的某个表有某种权限叫对象权限
7、角色
就是系统权限和对象权限组合成的,admin option表示权限可以给别人
8、配额
某个用户将来在某个表空间上只能用多少空间

一般用户建完以后,要给两个常用的角色:
1、connect
2、resource

查询用户相关的信息

创建用户后查询用户信息:

select * from dba_users;

查询用户被赋予哪些权限
1、查询用户权限相关的视图

select * from dba_views a where a.view_name like 'DBA_%PRIV%'

2、查询用户utest1被赋予的对象权限

select * from dba_tab_privs where grantee='UTEST1'   

3、查询用户utest1被赋予的系统权限

select * from dba_sys_privs where GRANTEE='UTEST1'   

4、查询用户utest1被赋予什么角色

select * from dba_role_privs where grantee='UTEST1'

怎么看这个角色下面还有哪些权限和角色呢?

select * from dba_views a where a.view_name like '%ROLE%';  --查询角色权限相关的视图
select * from role_role_privs where role='RESOURCE';        --查询角色RESOURCE有什么角色的权限
select * from role_sys_privs where role='RESOURCE';         --查询角色RESOURCE有什么系统权限
select * from role_tab_privs where role='RESOURCE';         --查询角色RESOURCE有什么表的权限

撤销用户utest1里的DBA角色

查询用户限额

select * from dba_views where view_name like '%QUOT%';   -- 查询限额的相关视图

select * from dba_ts_quotas;

对于用户utest1在users表空间里面限额的相关信息

概要文件(profile)

建立一个概要文件
1、资源控制

2、密码策略

profile的作用:

1、资源限制:一般不使用,这个地方的资源控制
一般使用resource manager的技术

2、密码策略控制
密码过期
密码失败登录次数
密码复杂度
密码永远不过期
登陆多少次错误被锁住

如果想用密码复杂度需要跑一个脚本:

[oracle@db11g ~]$ cd $ORACLE_HOME
[oracle@db11g db_1]$ cd rdbms
[oracle@db11g rdbms]$ cd admin
[oracle@db11g admin]$ ll utlpwd*
-rw-r--r-- 1 oracle oinstall 12176 Jan 31  2013 utlpwdmg.sql  -- 这个脚本[oracle@db11g admin]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Sat Feb 11 13:25:47 2017
Copyright (c) 1982, 2013, Oracle.  All rights reserved.Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> @utlpwdmg.sql
Function created.Grant succeeded.Profile altered.Function created.Grant succeeded.

执行完脚本之后,看一下效果:

密码策略就有要求了

口令文件

oracle有一个sysdba权限:oracle的超级权限,默认sys用户具有这个权限

sysdba权限的一个特点:启动和关闭数据库

口令文件位置:

启动数据库需要登陆用户,而数据库没有启动无法进行用户认证,口令文件中就保存着sys用户的密码可以进行认证,登陆后就可以启动数据库了

数据库口令文件存放着数据库实例的密码文件

查看口令文件的内容,使用string来格式化:

口令文件被删之后,重建口令文件
远程登陆数据库需要口令文件,口令文件即在数据库中也存在这个位置;假设将口令文件删除,将无法进程远程登陆,可以重新建立口令文件:

[oracle@oracle dbs]$ orapwd --help
Usage: orapwd file=<fname> entries=<users> force=<y/n> ignorecase=<y/n> nosysdba=<y/n>wherefile - name of password file (required),password - password for SYS will be prompted if not specified at command line,entries - maximum number of distinct DBA (optional),force - whether to overwrite existing file (optional),ignorecase - passwords are case-insensitive (optional),nosysdba - whether to shut out the SYSDBA logon (optional Database Vault only).There must be no spaces around the equal-to (=) character.[oracle@oracle dbs]$ orapwd file=orapworcl entries=5      -- entries=5:表示里面可以放至少5个sysdba的密码
Enter password for SYS:
[oracle@oracle dbs]$ 

调用者和定义者权限

a用户建立存储过程x 访问t表;b用户访问存储过程x 访问t表时,b用户执行a用户的存储过程的时候,默认会用a用户的权限去访问t表,但是b用户不能直接访问t表,b用户只能执行a用户建立的存储过程

一个存储过程:

public角色
oracle有一个角色:public角色
就是说:只要把权限给了public角色,public角色就马上把所有的权限给了所有用户,任何一个用户都可以使用这个权限

但是revoke权限的时候报错了:死锁,oracle死锁有两种错误:一种是ORA-04020错误,另一种是ORA-00060错误

给public角色赋权的时候没有问题,但是要revoke的时候,是一个非常危险的事情,因为会访问一个sys.standadd包,这个包是一个基础包,revokepublic角色权限的时候会重新编译这个包,是一个相当危险的事情。

用户通过视图和存储过程访问表
通过视图或者存储过程变相的控制用户和表的关系

用户修改表中某些行的行为被写在了存储过程里,用户只具有执行存储过程的权限,但是不能直接访问这个表,也可以达到控制用户访问标的权限。

VPD(对表的行级和列级的访问控制)

VPD实现对行级访问的控制
FGAC
列级VPD
主要通过例子来讲VPD:每个用户登陆后访问相同的表,但看到的数据不同

1、建一张表car

create table car (name varchar2(20),num number,cost number);
insert into car values('toyota',10,30);
insert into car values('volvo',50,30);
insert into car values('honda',60,30);
insert into car values('biaozhi',70,20);
insert into car values('xuetielong',80,20);
insert into car values('polo',90,20);
insert into car values('xiali',20,10);
insert into car values('jili',30,10);
insert into car values('byd',40,10);
commit;

查询car表:

SQL> select * from car;
NAME			    NUM       COST
-------------------- ---------- ----------
toyota			     10 	30
volvo			           50 	30
honda			           60 	30
biaozhi 		           70 	20
xuetielong		           80 	20
polo			           90 	20
xiali			           20 	10
jili			           30 	10
byd			           40 	10
9 rows selected.

建立函数
2、建立一个函数1:
调用的时候需要两个参数:1、用户; 2、表的名字
返回值:返回一个where条件

create or replace function fun_name (fun_scheme varchar2,fun_object  varchar2)
return varchar2 as fun_cost varchar2(20);
begin
fun_cost:='cost=30';
return(fun_cost);
end fun_name;
/

3、建立另外一个函数2:
也是一样,返回另外一个where条件

create or replace function fun_num (fun_scheme varchar2,fun_object varchar2)
return varchar2 as fun_cost varchar2(20);
begin
fun_cost:='cost=10';
return(fun_cost);
end fun_num;
/

可以定义多个这样的函数

建立策略
4、定义一个策略1:
指定用户,指定表,还有策略函数
策略的名字(随便起就可以)
相关列

begin
dbms_rls.add_policy(
object_schema => 'u1',          -- 用户
object_name => 'car',           -- 表
policy_name => 'filter_name',   -- 策略的名字
policy_function => 'fun_name',  -- 策略函数
sec_relevant_cols => 'name');   -- 相关列
end;

比如执行SQL:select * from u1.car; 就会触发这个策略

触发策略,只返回cost=30的:

SQL> connect u1/u1
Connected.SQL> select * from car;
NAME			         NUM        COST
-------------------- ---------- ----------
toyota			    10     	    30
volvo			          50 	    30
honda			          60          30

使用utest1用户查询的时候,什么数据都没有返回:

SQL> connect utest1/utest1
Connected.SQL> select * from car;
no rows selected

5、定义另外一个策略2:

begin
dbms_rls.add_policy(
object_schema => 'u1',
object_name => 'car',
policy_name => 'filter_num',
policy_function => 'fun_num',
sec_relevant_cols => 'num');
end;

每个函数对应各自的策略

VPD的特点:
1、每一个用户登陆以后,看到的都是不同的数据,就好像每个人使用一个独立的数据库一样
2、virtual private database
3、建立策略函数
返回where条件
建立策略
满足策略,触发策略;调用策略函数,返回where条件,隐含的加到sql后面
可以定义多个策略,定义多个函数

查询某个(U1)用户下的策略

select * from dba_policies p where p.object_owner='U1';

删除策略:

begin
dbms_rls.drop_policy('u1','car','filter_num');
end;
/
begin
dbms_rls.drop_policy('u1','car','filter_name');
end;
/

另外的笔记

vpd还有待补充。

--ORACLE 数据库的VPD
--建表使用用户u1。
create table car (name varchar2(20),num number,cost number);
insert into car values('toyota',10,30);
insert into car values('volvo',50,30);
insert into car values('honda',60,30);
insert into car values('biaozhi',70,20);
insert into car values('xuetielong',80,20);
insert into car values('polo',90,20);
insert into car values('xiali',20,10);
insert into car values('jili',30,10);
insert into car values('byd',40,10);
commit;

--函数1返回where条件 cost=30
create or replace function fun_name (fun_scheme varchar2,fun_object varchar2)
return varchar2 as fun_cost varchar2(20);
begin
fun_cost:='cost=30';
return(fun_cost);
end fun_name;

--函数2放回where条件 cost=10
create or replace function fun_num (fun_scheme varchar2,fun_object varchar2)
return varchar2 as fun_cost varchar2(20);
begin
fun_cost:='cost=10';
return(fun_cost);
end fun_num;

--建立策略1
begin
dbms_rls.add_policy(
object_schema=>'u1',
object_name=>'car',
policy_name=>'filter_name',
policy_function=>'fun_name',
sec_relevant_cols=>'name');
end;

--建立策略2
begin
dbms_rls.add_policy(
object_schema=>'u1',
object_name=>'car',
policy_name =>'filter_num',
policy_function =>'fun_num',
sec_relevant_cols=>'num');
end;

--建立策略3
begin
dbms_rls.add_policy(
object_schema => 'u1',
object_name => 'car',
policy_name => 'filter_num',
policy_function => 'fun_num',
sec_relevant_cols => 'num',
sec_relevant_cols_opt => dbms_rls.ALL_ROWS );
end;

--用不同的用户查询数据看策略是否生效。
select name from car;
select * from car;
--删除策略1
begin
dbms_rls.drop_policy('u1','car','FILTER_NAME');
end;
/

--删除策略2
begin
dbms_rls.drop_policy('u1','car','FILTER_NUM');
end;
/
--查询u1用户下的策略。
select * from dba_policies p where p.object_owner='U1';

用户u1没有策略的查询结果是
SQL> select * from car;
NAME NUM COST


toyota 10 30
volvo 50 30
honda 60 30
biaozhi 70 20
xuetielong 80 20
polo 90 20
xiali 20 10
jili 30 10
byd 40 10
9 rows selected.
SQL> 建立两个策略后使用sys用户的查询结果和没有使用策略的u1用户查询结果相同。

用户u1建立策略1后查询结果
SQL> set linesize 100SQL> select * from car;
NAME NUM COST

toyota 10 30
volvo 50 30
honda 60 30
SQL>

用户u1建立策略1和2后的查询结果是。
SQL> select * from car;no rows selected
SQL>

只是建立策略3用户u1查询结果
SQL> set linesize 100 SQL> select * from car;
NAME NUM COST

toyota 30
volvo 30
honda 30
biaozhi 20
xuetielong 20
polo 20
xiali 20 10
jili 30 10
byd 40 10
9 rows selected.
SQL> 可以看到cost不等于10的列num不显示。

给不同的用户访问返回不同的where条件。
函数3
create or replace function f_limit_access--函数3( vc_schema varchar2, vc_object varchar2) return varchar2asvc_userid varchar2(100);begin select SYS_CONTEXT('USERENV','SESSION_USER') into vc_userid from dual; if (trim(vc_userid)='U1') then return '1=1'; else return '1=0'; end if;end;/策略4
begindbms_rls.add_policy(object_schema => 'U1',object_name => 'CAR',policy_name => 'VPD_TEST',function_schema => 'U1',policy_function => 'F_LIMIT_ACCESS');end;/

审计
对sys用户
只要登陆,就强制审计。可以设置参数使登陆后所做的事情也审计。
你做了什么不审计。
用sys用户登陆数据库登陆这个行为就被审计了。
SQL> exitDisconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options[oracle@oracle dbs]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.4.0 Production on Mon Feb 20 11:30:47 2017Copyright (c) 1982, 2013, Oracle. All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsSQL> 查看审计文件
[oracle@oracle adump]$ pwd/u01/app/oracle/admin/oracl/adump[oracle@oracle adump]$ ll -t |moretotal 2020-rw-r- 1 oracle oinstall 777 Feb 20 11:30 oracl_ora_3008_20170220113047381227143795.aud-rw-r- 1 oracle oinstall 777 Feb 20 11:05 oracl_ora_2833_20170220110550377784143795.aud-rw-r- 1 oracle oinstall 777 Feb 20 10:48 oracl_ora_2703_20170220104849080974143795.aud[oracle@oracle adump]$ cat oracl_ora_3008_20170220113047381227143795.audAudit file /u01/app/oracle/admin/oracl/adump/oracl_ora_3008_20170220113047381227143795.audOracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1System name: LinuxNode name: oracleRelease: 2.6.32-431.el6.x86_64Version: #1 SMP Sun Nov 10 22:19:54 EST 2013Machine: x86_64Instance name: oraclRedo thread mounted by this instance: 1Oracle process number: 32Unix process pid: 3008, image: oracle@oracle (TNS V1-V3)Mon Feb 20 11:30:47 2017 +08:00LENGTH : '160'ACTION :[7] 'CONNECT'DATABASE USER:[1] '/'PRIVILEGE :[6] 'SYSDBA'CLIENT USER:[6] 'oracle'CLIENT TERMINAL:[5] 'pts/0'STATUS:[1] '0'DBID:[10] '1976643781'[oracle@oracle adump]$ 要想使sys用户登陆后所做的事情也被设计,需要设置一个参数。可以看到这个参数修改需要重启数据库。

修改参数并重启数据库。
SQL> show parameter audit_sys_operationsSQL> alter system set audit_sys_operations=true scope=spfile;System altered.SQL> startup force;查看审计文件可以看到

标准数据库审计--普通用户
普通用户的审计
1、11g默认开启了对普通用户的审计
2、需要设置。

审计什么。
1、审计sql语句
2、使用了哪些系统权限。
3、使用了哪些对象权限

使用em进行审计配置。
成功或者失败审计。
按照回话审计。
access更细一些。

针对系统的权限。 按照会话审计和按照访问审计。一般使用bysession,对于ddl语句不可以使用bysession。

select * from dba_obj_audit_opts;--查询对象的审计
select * from dba_priv_audit_opts;--权限的审计。
select * from dba_stmt_audit_opts; --执行sql语句的审计。
这些视图都在参考里面。

select * from dba_audit_trail; --查询实实在在的审计信息。

truncate table aud$; --清除审计信息。
触发几个审计。

select * from dba_audit_session; --审计的会话。
select * from dba_audit_object; --对象相关的审计。

精细化审计
审计某些列,审计某些行,审计某一部分。

oracle数据库加密
1、表上的列加密
2、表空间进行加密
11g

钱包
1、建立一个钱包,钱包有一个密码。
2、加密的时候,只要钱包保持打开,直接使用加密功能。

钱包的建立。
1、编辑sqlnet.ora参数文件。下面这个目录需要必须有自己建立。

2、执行一条命令

这条命令会生成一个文件

密码会放到这个文件中。

查询钱包是否打开。

打开钱包,打开钱包需要使用打开时的密码。

我们建立的钱包不是自动打开的钱包。要建立一个自动打开的钱包需要使用。
在oracle数据库我们一般使用手动打开钱包。
在官方文档里面有高级安全里面可以建立一个自动打开的钱包。

给一个表加一列,或者修改某个列为加密。

创建一个表空间使用加密。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

向量检索服务产品规格

本文介绍向量检索服务DashVector的产品规格,以帮助用户选择贴合自身业务场景的实例规格。本文介绍向量检索服务DashVector的产品规格,以帮助用户选择贴合自身业务场景的实例规格。 实例类型 向量检索服务DashVector当前支持三种四种实例(Cluster)类型,以支持不同的业务场景…

记录一个Linux代码移植到Windows平台下的Visual Studio 2022的代码编码格式的问题

一、前言 工作上与公司的前辈对接,他给了我一份在linux下面编写的代码压缩包,按照道理来说使用条件宏编译不同的windows和linux的API即可实现代码的通用。但是我在Visual Studio 2022下面编译的时候缺发生了非常奇怪的事情。随便编译就出现很多报错,但实际上这些报错并不是真…

CPU使用率和负载区别及分析

当我们使用top命令查看系统的资源使用情况时会看到 load average,如下图所示。它表示系统在1、5、15分钟的平均工作负载。那么什么是负载(load)呢?它和CPU的利用率又有什么关系呢?load average:系统平均负载是CPU的Load,它所包含的信息不是CPU的使用率状况,而是在一段时间…

高并发下单例模式的线程安全探索

单例模式是常用的软件设计模式之一,同时也是设计模式中最简单的形式之一,在单例模式中对象只有一个实例存在。 单例模式的实现方式有两种,分别是懒汉式和饿汉式。1、饿汉式 饿汉式在类加载时已经创建好实例对象,在程序调用时直接返回该单例对象即可,即在编码时就已经指…

分组向量检索

本文介绍如何在向量检索时将结果按照字段值进行分组返回。本文介绍如何在向量检索时将结果按照字段值进行分组返回。 背景介绍 在向量检索的实际应用中,有些场景需要将向量检索的结果分组返回。例如:在RAG中,一篇文档往往需要拆分为多个段落,每个段落生成一个向量存入DashV…

【触想智能】工业一体机在工业机器视觉领域应用的特点与注意事项

随着工业化的进程和技术的不断发展,工业机器视觉成为现代工业生产中不可或缺的一部分。作为工业机器视觉技术的核心组件之一,工业一体机因其便携、集成度高和易于操作的特点,在工业机器视觉应用中得到广泛应用。触想工业一体机TPC-W500系列一、工业一体机在工业机器视觉领域…

WPF笔记2——路由事件

WPF的路由事件(Routed Events),允许事件在UI元素层次结构中传播。 在WPF中,UI元素被组织成一棵树,成为可视化树(Visual Tree)。 当一个事件(如鼠标点击)在某个控件上触发时,这个事件可以沿着Visual Tree向上(向树的根部)或向下(向树的枝叶)传播;如果不广播就是直…

vxe-table 秒级渲染万级数据、极致流畅横向虚拟滚动与纵向虚拟滚动+自适应动态行高

官网:https://vxetable.cn/ 以前老版本不支持虚拟滚动动态行高,vxe-table 新版本发布后,已经可以支持虚拟滚动和动态行高了。如果需要同等行高,只需加上 show-overflow 就可以了,同等行高的渲染性能是最优的,动态行高支持的最大数量低非常多。 建议非必要的场景应该使用同…

C# 高效餐饮管理系统设计与实现

前言 推荐一个C#开发全面、高效的商用餐饮管理系统。该系统集成了餐饮业日常运营所需的各种功能,包括但不限于订单管理、库存控制、财务结算等,通过信息技术手段,帮助餐饮企业实现管理的自动化和智能化。 系统介绍 本系统设计的主要意义在于它能够切实有效地指导工作人员规范…

Docker:Docker搭建Jenkins并共用宿主机Docker部署服务(四)配置Jenkins用户与权限

前言 继续完成Jenkins权限配置管理,Jenkins的搭建与插件安装可以观看上一篇文章:https://www.cnblogs.com/nhdlb/p/18561435 授权策略 首页 -> 系统管理 -> 全局安全配置选择授权策略 :Role-based Authorization Strategy插件创建用户 首页 -> 系统管理 -> 管理…

ENSP之虚拟化安全性的图形界面和命令行不一致的问题

问题报错:40报错 原因:命令行和图形界面不一致 图形界面显示未启用命令行里面并不是如下显示,显示的是hyper-v监控程序正在运行(CMD中输入systeminfo)如果你也遇到此类情况,请参考我的另一份文档 如何关闭VBS的随笔:https://www.cnblogs.com/never-say-die/p/16840030.h…

(原创)odoo Binary字段类型保存文件名称

需要单独指定保存文件名称的字段 清风明月入怀抱,猿鹤听我再抚琴