时间:2021-07-01 10:21:17 帮助过:29人阅读
GRANT privilege[, ...] ON object[, ...] TO { PUBLIC | GROUP group| username}
可以操作的权限:
all:
所有权限grant select,insert,update on tablename to userA; --赋权给用户:userA grant select,insert,update on tablename to public; --赋权给所有用户 revoke select,insert,update on tablename from userA; --收回给予的权限从用户:userA revoke select,insert,update on tablename from public; --收回给予的权限从所有用户
同样适用于:
可以操作的权限:
with admin option的意思是被授予该权限的用户有权将某个权限(如create any table)授予其他用户或角色,取消是不级联的。
如授予A系统权限create
session with admin option,然后A又把create session权限授予B,但管理员收回A的create
session权限时,B依然拥有create session的权限。但管理员可以显式收回B create
session的权限,即直接revoke create session from B.
2、with grant option
with
grant option的意思是:权限赋予/取消是级联的,如将with grant
option用于对象授权时,被授予的用户也可把此对象权限授予其他用户或角色,不同的是但管理员收回用with grant
option授权的用户对象权限时,权限会因传播而失效,如grant select on table with grant option to
A,A用户把此权限授予B,但管理员收回A的权限时,B的权限也会失效,但管理员不可以直接收回B的SELECT ON TABLE 权限。
create user userA identified by pwd; create user userB identified by pwd; create user userC identified by pwd; grant connect,resource to userA; grant connect,resource to userB; grant connect,resource to userC;
建表并插入一条记录:
create table tba(i number); insert into tba values(1); commit;
将表的权限分配给用户B:
grant select,update on tba to userb
执行如下语句:
select * from usera.tba; --执行成功 grant select,update on usera.tba to userc; --出错:ora-01031:权限不足。
说明uesrb有访问usera的权限,查不能把权限赋给userc
现在创建一个存储过程
create or replace procedure pr_update_tba(v_i_n number) is BEGIn update usera.tba set i=v_i_n; commit; END;
执行存储过程并查看tba的数据:
call pr_update_tba(3); select * from usera.tba
结果看到tba的数据已经变为3,现在把存储过程的权限赋给userc
grant execute on pr_update_tba to userc;
select * from usera.tba; --提示表不存在,说明没有权限 update usera.tba set i=0; --提示表不存在,说明没有权限
说明userc并没有usera.tba的select和update权限。
再执行:
call userb.pr_update_tba(9); --执行成功
结论:userB 拥有userA.tba的访问权限,但他不可以直接把这个权限赋予userc,却可以通过打包存储过程,间接的将这个权限赋予userc(当然仅在存储过程内部有效).
oracle 权限管理
标签:post https 说明 limit 数据库 comm insert oracle revoke