用户与角色是多对多的关系, 一个角色可以被赋予给多个用户,一个用户也可以拥有多个角色; 查询不拥有某角色的所有用户, 如果用leftjoin查询,会造成重复的记录: 举例错误的做法: select...`create_time` desc limit 38; 这个查询虽然用到了(or `system_user_role`.`role_id` is null )防止结果缺失,但会有重复的记录出现!...如果一个用户, 被赋予了角色(id为6ce3c030-a2e0-11e9-8bdc-495ad65d4804) 该用户又被赋予了另一个角色(id为其他值) 那么这个查询中会查出该用户, 违背了我们的需求...system_user_role.user_id and system_user_role.role_id = '6ce3c030-a2e0-11e9-8bdc-495ad65d4804' ); 这个做法用到了not exists子查询...注意:这样的子查询是可以设置与父查询的关联条件的(where system_user.id = system_user_role.user_id) 这种查询比(not in)查询要快的多!
环境:Oracle 11.2.0.4 目的:验证业务用户的权限/角色赋予的差异 现在创建两个用户jingyu2和jingyu3; SYS@jyzhao1> create user jingyu2 identified...分别在两个用户的session下查询被赋予的角色/权限: JINGYU2@jyzhao1>select * from session_privs; PRIVILEGE ----------------...实际在很多应用场景中,尤其是开发测试环境,DBA或是开发人员往往会为了方便直接赋予高权限的dba角色,避免麻烦。当然这是不推荐的方法。...看到这里,你是怎么想的呢? 如果这时候你去尝试重新连接一个会话,会发现是可以成功实现需求的? 那么这样看来,oracle对于权限的赋予是立即生效的,但是角色却需要重新连接会话才会生效。...一般来说,对于应用而言,connect和resource角色已经可以满足大部分应用开发的需求,若有其他特殊需求,建议单独授予,强烈不建议直接赋予具有N多权限的DBA角色。
在Oracle中,如果要进行日期间的查询需要用到Oracle的内置函数to_date()。...1、Oracle日期查询的边界问题 此外,日期间的查询还涉及一个边界问题,因为每个人的思维方式不同,因此写出的语句都不同。...而在第3行中,如果你忘记在后边+1,那么程序就认为你查询的是比“2010-07-06 00:00:00”这个时间小的记录,那么7月6号当天的是数据就查不出来了。...-07-05 12:00:00', 'yyyy-mm-dd hh24:mi:ss'); 因为Oracle是不区分大小写的,所以如果你在第2行的to_date函数中把日期格式写成:'yyyy-MM-dd...而在MySQL的SQL查询中,日期格式是这样写的“yyyy-MM-dd HH:mm:ss",其中大写的MM表示月、小写的mm表示分钟。
Oracle 中的树查询和 connect by 使用 connect by 和 start with 来建立类似于树的报表并不难,只要遵循以下基本原则即可: 使用 connect by 时各子句的顺序应为...: select from where start with connect by order by prior 使报表的顺序为从根到叶(如果 prior 列是父辈)或从叶到根(如果 prior 列是后代...where 子句可以从树中排除个体,但不排除它们的子孙(或者祖先,如果 prior 列是后代)。...connect by 中的条件(尤其是不等于)消除个体和它所有的子孙(或祖先,依赖于怎样跟踪树)。 connect by 不能与 where 子句中的表连接在一起使用。 下面是几个例子 1....排除个体,但不排除它们的子孙 SELECT n_parendid, n_name, (LEVEL - 1), n_id FROM navigation WHERE n_parendid IS NOT NULL
一条sql怎么查出单表中含有父子关系的数据呢?...tab.name, '\' ) FROM tab WHERE LEVEL = 3 CONNECT BY PRIOR tab.id = tab.parid image.png 还有其他更优雅的写法吗...,需要注意的是如果with后面的值是子节点那么求出的就是他的父节点和祖宗节点,如果是父节点那么求出的就是他的子节点和子孙节点,如果不懂可以把上面start with 后面的条件改成 p.parent=0...关键词prior,prior跟它右边的父节点放在一起(prior p.parent)表示往父节点方向遍历, 反之,如果 prior跟子节点放在一起(prior p.id)表示往叶子方向遍历。...这里需要注意的 =p.id 放在prior关键词的前面或者后面都没什么关系,也就是上面可以这样写 p.id= prior p.paren。重要的是prior旁边放的
使用Oracle中的start with .. connect by prior ..语句可以轻松实现。.../rdbms/admin/utlsampl.sql 发现脚本跑完没有显示报错,但也没有成功创建表,进一步排查发现因为是我们使用的是19c的一个PDB,脚本中的连接库方式默认没有指定,需要修改下。...我们先在tnsnames.ora配置文件中添加这个PDB的配置: --配置tnsnames.ora CMDB = (DESCRIPTION = (ADDRESS = (PROTOCOL =...再次执行,scott用户下面熟悉的测试表创建成功。 查询emp表: SQL> conn scott/tiger@cmdb Connected....利用层次查询中的伪列level和表达式sys_connect_by_path,查询如下: select level, ename, job, sys_connect_by_path(ename,'->'
1、Group by 进行分组查询, group by 子句可以将数据分为若干个组 1.1 分组查询 注意: 出现在 SELECT 子句中的字段,如果不是包含在多行函数中,那么该字段必须同时在...1.2 带 where 的分组查询 注意: group by 子句要写到 where 子句的后面 a) 查询每个部门的人数和平均工资, 排除 10 部门 select deptno, count(...*), avg(sal) from emp where deptno10 group by deptno order by deptno; 1.3 带 having 的分组查询 注意: where...子句中不允许使用分组函数, 分组函数用于分组前过滤 having 用于过滤分组后的条件 a) 查询每个部门的总工资和平均工资, 排除平均工资低于 1600 的部门 select deptno...分组查询时相关关键词的顺序: from–>where–>group by–>select–>having–>order by a) 在 emp 表中,列出工资最小值小于 2000 的职位 select
当表自查询的时候,就基本会用到递归的查询 比如一个员工表 主键 名字 职位 上级id 部门id id...1001 y100 1003 赵六 员工 1001 y100 像这张表就会用到自查询..., 有自查询的表的话,基本会用到递归查询 比如我要查询部门id为“y100”的,张三经理带领的这个团队底下所有的员工.
系统权限的授予情况可以通过Oracle的视图DBA_SYS_PRIVS来查询,这个视图包含被授予权限的用户信息(GRANTEE)以及具体的权限(PRIVILEGE)信息,如果授予权限时允许用户转授这个权限...可以想象,如果数据库中存在大量用户,如果我们将这些权限一一授予这些用户,操作将会极其繁琐,于是Oracle设计了一个新的技术:角色(Role)。...角色是一系列权限的集合,被授予某个角色的用户将获得这个集合中的所有权限,这大大简化了权限的授予和回收工作。...Oracle在10gR2中对角色权限进行了重新定义,Oracle9i/Oracle 10gR1中CONNECT角色具有更多的权限: ?...此处不再需要对空间进行授权,因为在RESOURCE角色的授予过程中,Oracle潜在的给用户EYGLE分配了无限制使用默认表空间的权限(UNLIMITED TABLESPACE): ?
数据库版本:11GR2 一、介绍 在oracle中没有其他数据库系统中的数据库的概念,对象都是创建在用户下。当前用户具有当前用户下所有对象的所有权限无论该对象是否是当前用户所创建。...角色是一类权限的分组。 1.系统权限 系统权限其实就是用户在当前用户架构下所具有的权限。在11g中系统权限有200个,比如create table,UNLIMITED TABLESPACE等。...查询当前用户拥有的系统权限: SELECT * FROM user_sys_privs; ? 2.角色 角色其实就是一类权限的分组,所以给用户分配角色其实也是在给用户分配权限。...在oracle中有三个比较常用的角色。对于一般不是很严格的系统可以授予开发用户CONNECT、RESOURCE角色权限即可。 DBA:该角色具有数据库所有的权限。...三、grant授权 1.授予用户connect、resource角色权限。一般创建应用程序开发用户可以授予这两个角色的权限。
♣ 题目部分 在Oracle中,用户的权限分为哪几类?...DBA完成的,如果用其他用户来授予系统权限,那么要求该用户必须具有GRANT ANY PRIVILEGE的系统权限。...在授予系统权限时,可以带有WITH ADMIN OPTION选项,这样,被授予权限的用户或角色还可以将该系统权限授予其他的用户或角色。...如果想查询角色所拥有的权限,那么可以通过视图DBA_SYS_PRIVS来查询;如果想查询某个用户拥有哪些角色,那么可以通过视图DBA_ROLE_PRIVS来查询。...Oracle预定义角色请参考:【3.1.2 Oracle有哪些预定义角色?】。 角色权限需要注意默认角色(Default Role)的问题。
关于公用用户common user和本地用户local user的内容,请查看: Oracle 12c多租户特性详解:全局用户与本地用户的原理与维护 权限生效满足以下规则: 全局授予的权限 1、被全局授予的权限能够应用于现有和将来创建的...本地授予的权限 1、本地授予的权限只能在当前的container中起作用,哪怕是对于root 容器,如果权限被本地授予,只能在root中起作用。...5、任何用户都可以对其他的用户、角色(包含public角色)进行本地授权。 全局授予系统权限 用户只能在被授权的PDB内使用对应的系统权限。...public角色授予系统权限,这会影响到所有能访问到的用户。...以下示例显示如何向公用用户c## hr_admin授予对象特权,以便他可以从CDB根目录中的任何与之相关联的PDB中的DBA_PDBS视图进行select查询。
:被授予test_role角色的用户将继承授权给test_role角色的所有权限。...形式2:创建角色,并使用密码 CREATE ROLE test_role2 IDENTIFIED BY abc1234; 说明:使用了IDENTIFIED BY,被授予角色(例中为test_role2...GRANT CREATE SESSION TO testacc2; 注意:用户如果需要登录oracle,必须有 CONNECT、CREATE SESSION的权限 3.授予用户系统权限 GRANT...且被授予者拥有把权限授予其他人、角色的权限 GRANT SELECT, DELETE ON test_table TO testacc2 WITH GRANT OPTION; 说明: 授予用户testacc2...对表test_table的查询,删除权限,WITH GRANT OPTION,使用户testacc2可把获取的权限再授予其他用户、角色 7.授予用户权限,被授权用户有管理权限 GRANT UPDATE
Oracle 背景 今天有个同学跟我说存储过程无法建表,我本地试了一下嚯嚯果然不行。...测试报错ORA-01031:权限不足。 image.png 是因为默认情况下,在调用存储过程用户的角色是不起作用的,即在执行存储过程时只有Public权限。...方法一 使解析环境为调用该存储过程的用户所在的Schema,执行该存储过程时拥有调用者的所有权限,即调用者的Role是有效的。...方法二 CREATE TABLE想使用CREATE ANY TABLE权限,而CREATE ANY TABLE权限来自DBA角色,默认情况下,虽然在会话环境中可见,可以显示地将CREATE ANY TABLE...权限授予用户就可以了 GRANT CREATE ANY TABLE TO 登录用户; 但是在包中的存储过程是不能用方法一 会报错误:PLS-00157: AUTHID 只允许在方案级程序中使用
例如delete权限允许用户删除表或视图的行,select权限允许用户通过select从表、视图、序列(sequences)或快照(snapshots)中查询信息。...每个oracle用户都有一个名字和口令,并拥有一些由其创建的表、视图和其他资源。oracle角色(role)就是一组权限(privilege)(或者是每个用户根据其状态和条件所需的访问类型)。...用户可以给角色授予或赋予指定的权限,然后将角色赋给相应的用户。一个用户也可以直接给其他用户授权。 一、创建用户 oracle内部有两个建好的用户:system和sys。...3》. dba role(数据库管理员角色) —dba role拥有所有的系统权限 –包括无限制的空间限额和给其他用户授予各种权限的能力。...select on class to testRole; 注:现在,拥有testRole角色的所有用户都具有对class表的select查询权限 3》删除角色 语法: drop role 角色名; 例子
例如delete权限允许用户删除表或视图的行,select权限允许用户通过select从表、视图、序列(sequences)或快照(snapshots)中查询信息。...每个Oracle用户都有一个名字和口令,并拥有一些由其创建的表、视图和其他资源。oracle角色(role)就是一组权限(privilege)(或者是每个用户根据其状态和条件所需的访问类型)。...用户可以给角色授予或赋予指定的权限,然后将角色赋给相应的用户。一个用户也可以直接给其他用户授权。 一、创建用户 oracle内部有两个建好的用户:system和sys。...3》. dba role(数据库管理员角色) --dba role拥有所有的系统权限 --包括无限制的空间限额和给其他用户授予各种权限的能力。...select on class to testRole; 注:现在,拥有testRole角色的所有用户都具有对class表的select查询权限 3》删除角色 语法: drop role 角色名; 例子
授予公用角色的公用权限,对于具有该角色的用户在任何可以连接的 Container 中都将具有该权限。...因此,在 PDB 中授予的本地权限和角色和在 Non-CDB 中没有不同,例如,在 PDBHRPDB 中授予本地用户 HR 的 SELECT ANYTABLE 权限,仅在该 PDB 中生效。...SQL 成功在 PDB 下创建了本地用户: 类似的,本地用户不能被授予公用权限或角色,以下尝试在全局授权的命令会返回明确的错误: 在 PDB 内授予本地权限之后,新创建的用户可以登陆本地 PDB 数据库...在 CDB_ROLES 视图可以查询 CDB 的角色信息,以下查询可以看到由于 PDB 的引入,角色记录大大增加: 对于 DBA 公用角色来说,在每个 Container 中都存在相应的信息记录: 而对于...中,同样不能创建公用角色,仅能创建本地角色: 对于系统权限和对象权限,CDB 相应的增加了对应视图用于存储这些信息: 在 CDB 中可以像在 NON-CDB 的数据库中一样进行权限授予与回收: COMMON
user1; 不过上面的有点麻烦,假如表很多的话,或许可以用游标试验,如果对用户表权限不是很严格的,可以授权用户查询所有用户的表权限:grant select any table to gd_user...with admin option; 不过查询时候,还是要加上用户名才能查询,例如:select * from user.table1 上面是用sql分配权限的办法,也可以通过角色来授权,先给角色权限...,然后再给用户分配角色 Oracle主要系统角色: DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。...CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。 普通用户:一般授予connect, resource权限。...DBA管理用户:授予connect,resource, dba权限。 有时候可以直接授权Oracle的系统角色,也可以自己创建角色,然后授权 通过PLSQL设置
例如delete权限允许用户删除表或视图的行,select权限允许用户通过select从表、视图、序列(sequences)或快照(snapshots)中查询信息。...用户可以给角色授予或赋予指定的权限,然后将角色赋给相应的用户。一个用户也可以直接给其他用户授权。 一、创建用户 oracle内部有两个建好的用户:system和sys。...role(资源角色) –更可靠和正式的数据库用户可以授予resource role。...3》. dba role(数据库管理员角色) –dba role拥有所有的系统权限 –包括无限制的空间限额和给其他用户授予各种权限的能力。...select on class to testRole; 注:现在,拥有testRole角色的所有用户都具有对class表的select查询权限 3》删除角色 语法: drop role 角色名; 例子
领取专属 10元无门槛券
手把手带您无忧上云