oracle connet与resource权限详解

首先用一个命令赋予user用户connect角色和resource角色:

grant connect,resource to user;

运行成功后用户包括的权限:
CONNECT角色: --是授予最终用户的典型权利,最基本的

  ALTER SESSION --修改会话

  CREATE CLUSTER --建立聚簇

  CREATE DATABASE LINK --建立数据库链接

  CREATE SEQUENCE --建立序列

  CREATE SESSION --建立会话

  CREATE SYNONYM --建立同义词

  CREATE VIEW --建立视图

RESOURCE角色: --是授予开发人员的

  CREATE CLUSTER --建立聚簇

  CREATE PROCEDURE --建立过程

  CREATE SEQUENCE --建立序列

  CREATE TABLE --建表

  CREATE TRIGGER --建立触发器

  CREATE TYPE --建立类型

通过以下语句,从dba_sys_privs里可以查看具体某个角色的权限信息:

 

(1)查看resource权限

 


select grantee,privilege from dba_sys_privs where grantee='RESOURCE' order by privilege;

  GRANTEE PRIVILEGE

  ------------ ----------------------

  RESOURCE CREATE CLUSTER

  RESOURCE CREATE INDEXTYPE

  RESOURCE CREATE OPERATOR

  RESOURCE CREATE PROCEDURE

  RESOURCE CREATE SEQUENCE

  RESOURCE CREATE TABLE

  RESOURCE CREATE TRIGGER

  RESOURCE CREATE TYPE

 

(2) 查看connect权限

select grantee,privilege from dba_sys_privs where grantee='CONNECT' order by privilege;


SQL> select grantee,privilege from dba_sys_privs
  2  where grantee='CONNECT' order by privilege;

GRANTEE                        PRIVILEGE
------------------------------ ----------------------------------------
CONNECT                        ALTER SESSION
CONNECT                        CREATE CLUSTER
CONNECT                        CREATE DATABASE LINK
CONNECT                        CREATE SEQUENCE
CONNECT                        CREATE SESSION
CONNECT                        CREATE SYNONYM
CONNECT                        CREATE TABLE
CONNECT                        CREATE VIEW

已选择8行。

Oracle中,CONNECT BY是一种递归查询方法,而MySQL中没有类似的语法。但是,MySQL提供了一些方法可以实现递归查询。 一种方法是使用递归CTE(Common Table Expression),即WITH RECURSIVE语法。例如,将Oracle中的CONNECT BY语句转换为MySQL的递归CTE语法,可以使用以下代码: ``` WITH RECURSIVE cte AS ( SELECT id, parent_id, name, 1 AS level FROM my_table WHERE parent_id IS NULL UNION ALL SELECT t.id, t.parent_id, t.name, cte.level + 1 FROM my_table t JOIN cte ON t.parent_id = cte.id ) SELECT id, parent_id, name, level FROM cte; ``` 其中,my_table是待查询的表,id和parent_id是表中的两个列,表示节点的ID和父节点的ID,name是节点名称,level表示节点的层级。 上述代码中,第一部分是递归查询的起始部分,即查询根节点。第二部分是递归查询的递归部分,即查询子节点。使用UNION ALL将两部分结果合并,最终得到所有节点的信息。 另一种方法是使用存储过程实现递归查询。例如,可以创建一个存储过程,使用临时表和循环来实现递归查询。具体实现方法可以参考以下代码: ``` CREATE PROCEDURE recursive_query(p_parent_id INT) BEGIN CREATE TEMPORARY TABLE temp_table ( id INT, parent_id INT, name VARCHAR(50), level INT ); INSERT INTO temp_table (id, parent_id, name, level) SELECT id, parent_id, name, 1 FROM my_table WHERE parent_id = p_parent_id; WHILE ROW_COUNT() > 0 DO INSERT INTO temp_table (id, parent_id, name, level) SELECT t.id, t.parent_id, t.name, tt.level + 1 FROM my_table t JOIN temp_table tt ON t.parent_id = tt.id; END WHILE; SELECT id, parent_id, name, level FROM temp_table; END; ``` 其中,my_table是待查询的表,id和parent_id是表中的两个列,表示节点的ID和父节点的ID,name是节点名称,level表示节点的层级。存储过程的参数p_parent_id表示要查询的父节点ID。 上述代码中,首先创建一个临时表temp_table,用于存储查询结果。然后,使用INSERT INTO语句将根节点插入到临时表中。接着,使用WHILE循环,不断查询子节点,将子节点插入到临时表中,直到没有更多的子节点。最后,使用SELECT语句返回查询结果。 使用存储过程实现递归查询的好处是可以提高查询效率,但需要编写更多的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值