用户之间如何赋予对象的访问权限 啊?

oracletoad 2009-10-29 08:57:17
打扰下,问个问题,我有用户user1,用户user2,我想让用户user1用户对用户user2下面所有对象的select、insert、delete、update、drop。

我原来的方法是,一个对象一个对象赋予权限
conn u1/u1@orcl;
grant select,insert,update,delete,drop to u2;
......

这样如果把u1的所有对象(表、视图、存储过程......)的权限赋予u2的话,这样操作不知道要做到何时呢!
大家有什么好的办法,一条sql就赋予完毕了呢?
...全文
304 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
wh62592855 2009-11-19
  • 打赏
  • 举报
回复
declare
v_objname varchar2(50);
v_str varchar2(100);
cursor v_cursor is
select object_name from user_objects where owner='USER1' and object_type='TABLE';
begin
open v_cursor;
loop
fetch v_cursor into v_objname;
exit when v_cursor%NOTFOUND;
v_str := 'grant all on '||v_objname||' to USER2';
execute immediate v_str;
end loop;
close v_cursor;
end;
/


如果不想先生成SQL再运行的话
可以按上面的代码执行一次就可以了
代码中object_type='TABLE'是以表为例子
只会把USER1所有表的权利授予USER2
如果你还想对于USER1的其他对象给USER2授权 那么把object_type的内容换一下就可以了
或者在后面加or object_type=...
oraclemch 2009-11-19
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wh62592855 的回复:]
如果楼主嫌一个一个赋予权限太麻烦的话可以生成一个脚本 完了再一次执行
SQL codeset serveroutputondeclare
v_objnamevarchar2(50);cursor v_cursorisselectobject_namefrom user_objectswhere owner='USER2'and object_type='TABLE';beginopen v_cursor;
loopfetch v_cursorinto v_objname;exitwhen v_cursor%NOTFOUND;
dbms_output.put_line('grant all on'||v_objname||' to USER2;');end loop;close v_cursor;end;/

把运行结果拷到一个.sql文件里再一次运行就可以了
[/Quote]


这个比较可行的。
hebo2005 2009-11-19
  • 打赏
  • 举报
回复
也可以考虑建立个角色的权限
wh62592855 2009-11-19
  • 打赏
  • 举报
回复
呵呵
怎么时隔两个星期
楼主才想起来把这个帖子翻出来
oracletoad 2009-11-19
  • 打赏
  • 举报
回复
大家还有没有别的好的办法吧!
andyguan01_2 2009-11-04
  • 打赏
  • 举报
回复
select 'grant all on ' || object_name || ' to username;'
from user_objects
where object_type='TABLE';

执行上面的语句,将结果保存成.sql文件,再执行之。
雪狼__ 2009-11-04
  • 打赏
  • 举报
回复
跟兔子学习
wh62592855 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 adebayor 的回复:]
引用 3 楼 wh62592855 的回复:
如果楼主嫌一个一个赋予权限太麻烦的话可以生成一个脚本 完了再一次执行
SQL codeset serveroutputondeclare
v_objnamevarchar2(50);cursor v_cursorisselectobject_namefrom user_objectswhere owner='USER2'and object_type='TABLE';beginopen v_cursor;
loopfetch v_cursorinto v_objname;exitwhen v_cursor%NOTFOUND;
dbms_output.put_line('grant all on'||v_objname||' to USER2;');end loop;close v_cursor;end;/

把运行结果拷到一个.sql文件里再一次运行就可以了

呵呵,我也这么想过,不过这样做是错误的!
[/Quote]
为什么呢?
希望指点一下。
oracletoad 2009-11-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 oracletoad 的回复:]
引用 4 楼 yhuib 的回复:
用动态sql,生成需要执行的授权sql,然后执行就好了


这个具体如何搞啊?
[/Quote]

有人指点下不?
oracletoad 2009-10-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yhuib 的回复:]
用动态sql,生成需要执行的授权sql,然后执行就好了
[/Quote]

这个具体如何搞啊?
ppp_10001 2009-10-29
  • 打赏
  • 举报
回复
4楼正解
Adebayor 2009-10-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wh62592855 的回复:]
如果楼主嫌一个一个赋予权限太麻烦的话可以生成一个脚本 完了再一次执行
SQL codeset serveroutputondeclare
v_objnamevarchar2(50);cursor v_cursorisselectobject_namefrom user_objectswhere owner='USER2'and object_type='TABLE';beginopen v_cursor;
loopfetch v_cursorinto v_objname;exitwhen v_cursor%NOTFOUND;
dbms_output.put_line('grant all on'||v_objname||' to USER2;');end loop;close v_cursor;end;/

把运行结果拷到一个.sql文件里再一次运行就可以了
[/Quote]
呵呵,我也这么想过,不过这样做是错误的!
wwwtyb 2009-10-29
  • 打赏
  • 举报
回复
declare
v_objname varchar2(50);
v_str varchar2(200);
cursor v_cursor is
select object_name from user_objects where owner='USER2' and object_type='TABLE';
begin
open v_cursor;
loop
fetch v_cursor into v_objname;
exit when v_cursor%NOTFOUND;
v_str := 'grant all on '||v_objname||' to USER1';
execute immediate v_str;
end loop;
close v_cursor;
end;
/
luoyoumou 2009-10-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wh62592855 的回复:]
如果楼主嫌一个一个赋予权限太麻烦的话可以生成一个脚本 完了再一次执行
SQL codeset serveroutputondeclare
v_objnamevarchar2(50);cursor v_cursorisselectobject_namefrom user_objectswhere owner='USER2'and object_type='TABLE';beginopen v_cursor;
loopfetch v_cursorinto v_objname;exitwhen v_cursor%NOTFOUND;
dbms_output.put_line('grant all on'||v_objname||' to USER2;');end loop;close v_cursor;end;/

把运行结果拷到一个.sql文件里再一次运行就可以了
[/Quote]

---正解!
yhuib 2009-10-29
  • 打赏
  • 举报
回复
用动态sql,生成需要执行的授权sql,然后执行就好了
wh62592855 2009-10-29
  • 打赏
  • 举报
回复
如果楼主嫌一个一个赋予权限太麻烦的话可以生成一个脚本 完了再一次执行

set serveroutput on

declare
v_objname varchar2(50);
cursor v_cursor is
select object_name from user_objects where owner='USER2' and object_type='TABLE';
begin
open v_cursor;
loop
fetch v_cursor into v_objname;
exit when v_cursor%NOTFOUND;
dbms_output.put_line('grant all on '||v_objname||' to USER2;');
end loop;
close v_cursor;
end;
/


把运行结果拷到一个.sql文件里再一次运行就可以了
cosio 2009-10-29
  • 打赏
  • 举报
回复
你这样子,还不如把一些建为同义词!
cosio 2009-10-29
  • 打赏
  • 举报
回复
grant select on 表名 to 用户;

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧