Oracle权限

 权限(Privilege)

权限指的是执行特定命令或访问数据库对象的权利,分为系统权限和对象权限。

-- 授权
-- with admin option 可以允许获得权限的用户可以将这个权限继续授予别人
GRANT 权限 [ON 对象] TO[WITH ADMIN OPTION];

-- 撤销授权
REVOKE 权限 FROM 谁;

-- 创建角色
CREATE ROLE 角色名;

操作示例:

-- 对象权限有 select/insert/update/delete/alter/execute 等
-- 系统中所有的系统权限和角色保存在相关字典表中:
select * from system_privilege_map;  -- 列出系统中所有的系统权限
select * from dba_role;              -- 列出系统中所有的角色


-- 查看已授予的权限
select * from dba_sys_privs where grantee='VIP';
select * from dba_tab_privs where grantee='VIP';
select * from dba_role_privs where grantee='VIP';


--- 关于权限的管理
-- 新建用户先
create user vip identified by vip quota 1m on users;
-- 新用户什么都干不了,甚至不能登录,如果想让它可以登录,给它一个相应权限:
grant create session to vip;
-- 现在可以登录 vip 了。但是不能创建表,需要我们给一个相应权限:
grant create table to vip;
-- 现在,可以创建表了
create table aaa (i int);
insert into aaa values (888);
commit;
-- 上面创建用户、授权的语句可以缩写为:
grant create session, create table to vip identified vip quota 1m on user;
-- 自己创建的表,自己会有完全的操作权力,但如果想要看别的用户的表,需要授权:
grant select on scott.emp to vip;
-- 上面就有了查询的权限。但不能修改。如果要修改,需要相应权限。当然,如果想把对象上的所有权力一并授予,需要用到 All:
grant all on scott.emp to vip;
-- 通过下面语句,可以看到对象权限的授予情况:
select * from dba_tab_privs where grantee='VIP';

角色是权限的命名集合,它可以简化授权。

-- 创建角色
create role myrole;
-- 将权限赋予角色
grant create session, create table to myrole;
grant create view to myrole;
-- 甚至可以将另一个角色赋予我们的角色
grant resource to myrole;
-- 使用角色
grant myrole to vip;
grant myrole to vip with admin option;
-- 删除角色
drop role myrole;

[Oracle 预定义角色] Oracle 自带了很多角色,常用的有:

  1. CONNECT,只包含了 create session 等权限,即登录系统的权限
    select * from dba_sys_privs where grantee='CONNECT';
    
  2. RESOURCE,包含了若干 create xxx 权限,即创建对象、创建资源的权限
    select * from dba_sys_privs where grantee=RESOURCE';
    
  3. DBA,包含了200多个系统权限,是用来进行系统管理的角色
    grant connect, resource to A_Common_User;
    grant dba to A_Super_User;
    

[特殊的 PUBLIC 角色] 公用角色,默认是授予每个用户的。

grant connect to public;  -- 这样,不需要进行任何其他操作,所有新建的用户就都拥有登录的功能了。

[最小权限原则] 我们开发的时候,为了方便,经常要做这样的操作:

grant dba to xxx identified by yyy;  -- 创建一个用户 xxx,密码为 yyy,授予 dba 角色

但这权力太大,在正式环境中,这样的授权是非常不合适的。一般要遵守 最小权限原则, 也就是:

创建一个用户,授予能完成任务的尽量少的权限,多一个也不好。

比如,我们有客户需要查看 vip 用户下的 student 表,我们需要创建一个用户给他:

-- 第一步,为客户需求创建一个用户
create user guest identified by ***;

-- 第二步,授予连接数据库的权限
grant connect to guest;

-- 第三步,授予 vip.student 的 select 权限
grant select on vip.student to guest;


-- 当然,上面可以再简化为以下。That's All.
grant connect to guest identified by ***;
grant select on vip.student to guest;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值