赋予oracle数据库中某一用户表权限的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了赋予oracle数据库中某一用户表权限的问题相关的知识,希望对你有一定的参考价值。

具体问题是这样的:
oracle用户下有A B两个用户,A用户下有A.T1 A.T2 A.T3等表,现在想把这些A用户下的表查询权限赋予B用户。

几点说明:
1.A用户下有很多表,我只想把某些特定的表(A.T1 A.T2 A.T3等表)的查询权限赋予B用户。
2.A用户下的特定表产生有规律,比如 一月份生成A.T1表 二月份生成A.T2表 三月份生成A.T3表 ……

最终想实现的是,在一月份的时候,B用户能查询A.T1表 ;二月份的时候,B用户能查询A.T2表;三月份的时候,B用户能查询A.T3表…… 这个如何实现?能不能说明一下,给出具体方法。分数不是问题,可以追加。

开通其中2张表的查询权限,方法如下:

grant select on bas_checkcycle to jdc;这个是整个语句。

语句分析:

grant select on bas_checkcycle to jdc;

这个颜色为执行语句。

这个颜色是数据表。

这个颜色是用户;就是需要权限的用户。

下面这个是查看,更新,删除,增加的权限都开启。

grant select,update,delete,insert on UserTagPool to [app_webservice];

grant select,update,delete,insert on UserTagPoolMap to [app_webservice];

扩展资料

Oracle权限管理

权限分类:

系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。

实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。

系统权限分类:

DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。

RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。

CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。

参考技术A 说说我的想法,你看看行不行:
授权的语句不用说了,你肯定在用着。
关于A中的表生成有规律,是不是可以理解为表名都是一组固定的字符(如你举的例子中,就是T)加上一个序列号(比如用年份加月份)。如果是这样,你可以做一个定时的JOB,每月1日的零点以后执行,JOB里调用一个存储过程,参数是当前的年份月份,如201211,在存储过程中拼接一个授权的SQL,如lstmt := 'GRANT SELECT ON A.T'||<输入参数>||' TO B;',然后执行这个语句。
create or replace procedure test_grant(avc_xh in varchar2)
is
lvc_stmt varchar2(100);
begin
lvc_stmt := 'grant select on A.T' || avc_xh || ' to B;';
execute immediate lvc_stmt;
end;

创建JOB:(以2012年12月开始为例)
DECLARE
l_job NUMBER;
BEGIN
sys.dbms_job.submit
(l_job,'test_grant(to_char(sysdate,'yyyymm'));',to_date('20121201 01:00:00','yyyymmdd hh:mi:ss'),'add_months(trunc(sysdate),1)+1/24',false);

commit;
END;
/追问

你理解的没有问题,表名中的变量就是月份。 由于没有存储过程这方面的经验,所以想找一个经过测试现成的,请问有没有?

追答

另外,不知道在2月份授权B用户读T2表的时候,是否要收回T1表的读取权限,如果是,那就再拼接一个SQL,不过要多几个步骤,要先把输入的字符串转换成上个月的代码,再拼接到REVOKE的SQL里。

追问

不用回收,就是说让B用户拥有所有A用户下的T类型的表的读权限。

追答

那基本就这样了。

本回答被提问者和网友采纳
参考技术B

赋予oracle数据库中权限,用grant语句。

如将scott用户下的emp表的查询权限赋予system用户,可用如下语句:

grant select on emp to system;

将scott用户下的emp表的更新权限赋予system用户,可用如下语句:

grant update on emp to system;

参考技术C 你运行下楼上的,把这个'test_grant(to_char(sysdate,'yyyymm'))改成'test_grant(to_char(sysdate,'MM'))估计就行了 参考技术D 用哪个存储过程,然后用shell调用!

oracle中有没有赋予一个用户查询另一个用户所有表的权限

你好:下面语句中有你需要的这个权限:select
any
table(如果针对单个用户的表话,这个没有,只能一个表一个表的授权)
创建用户并授权
上接第一步。
在SQL>后面输入创建用户的语句:
create
user
vpetl
identified
by
vpetl
default
tablespace
TBS_ETL_DATA;
回车,出现“User
created.”表示用户创建成功。
在SQL>后面输入给用户授权的语句:
grant
connect,resource,alter
system,debug
connect
session,select
any
table,delete
any
table,drop
any
table,alter
any
table
to
vpetl;
回车,出现“Grant
succeeded.”表示给用户授权成功。
在SQL>后面输入给用户授权的语句:
grant
execute
on
DBMS_LOCK
to
vpetl;
回车,出现“Grant
succeeded.”表示给用户授权成功。
在SQL>后面输入给用户授权的语句:
grant
select
on
v_$session
to
vpetl;
回车,出现“Grant
succeeded.”表示给用户授权成功。
在SQL>后面输入给用户授权的语句:
grant
select
on
v_$ACCESS
to
vpetl;
回车,出现“Grant
succeeded.”表示给用户授权成功。
在SQL>后面输入给用户授权的语句:
grant
alter
system
to
vpetl;
回车,出现“Grant
succeeded.”表示给用户授权成功。
在SQL>后面输入给用户授权的语句:
grant
insert
any
table,update
any
table
to
vpetl;
回车,出现“Grant
succeeded.”表示给用户授权成功。
参考技术A 可以将查询系统所有表的权限赋给另外一个用户。这个权限很大(使用sysdba授予),被授予的用户可以访问系统内的任意表。
grant
select
any
table
to
test(用户名需要查询表的用户);
使用用户test去访问别的用户下(如test2)的t表的时候
select
*
from
test2.t(表名);

以上是关于赋予oracle数据库中某一用户表权限的问题的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 创建普通用户,并赋予权限

ORA-01031 新建用户创建视图提示权限不足

删除oracle中某一个用户的所有数据 如何操作

oracle-Restrict权限

oracle如何新建一个用户,并赋予权限啊??

关于ORACLE的权限赋予问题