Oracle权限管理小结

/********************************************
* ORACLE 权限操作:
* Oracle权限是非常强大的,它是一个非常庞大的系统,我们都知道Oracle是用表(系统表)来管理表(用户表)的关系型
* 数据库管理系统,在这里,我们叫系统表为 数据字典
*/
-- 写在最前面:
-- 用户介绍
sys;//系统管理员,拥有最高权限
system;//本地管理员,次高权限
scott;//普通用户,密码默认为tiger,10g 后版本,默认未解锁

-- 登录方法:
sqlplus / as sysdba;//登陆sys帐户
sqlplus sys as sysdba;//同上
sqlplus scott/tiger;//登陆普通用户scott

-- 1. 权限大致可以分为 两类, 一类是:系统权限,在 DBA_SYS_PRIVS数据字典中可以查看; 还有一类是:对像权限,如:针对表的
-- 增、删、改、查 操作,都是属于对像权限,可以通过查询 USER_TAB_PRIVS 数据字典 查看
-- 使用 SYS 登录,可以查看到 DBA_SYS_PRIVS 的结构 如下:
DESC DBA_SYS_PRIVS;

名称 是否为空? 类型
----------------------------------------- -------- -------------------

GRANTEE NOT NULL VARCHAR2(30)
PRIVILEGE NOT NULL VARCHAR2(40)
ADMIN_OPTION VARCHAR2(3)

-- 使用普通用户登录,可以查看到 USER_TAB_PRIVS(用户对像权限) 和 USER_SYS_PRIVS(用户系统权限)
DESC USER_SYS_PRIVS;

Name Type Nullable Default Comments
------------ ------------ -------- ------- -------------------------------
USERNAME VARCHAR2(30) Y User Name or PUBLIC
PRIVILEGE VARCHAR2(40) System privilege
ADMIN_OPTION VARCHAR2(3) Y Grant was with the ADMIN option

DESC USER_TAB_PRIVS;

Name Type Nullable Default Comments
---------- ------------ -------- ------- -------------------------------------------
GRANTEE VARCHAR2(30) Name of the user to whom access was granted
OWNER VARCHAR2(30) Owner of the object
TABLE_NAME VARCHAR2(30) Name of the object
GRANTOR VARCHAR2(30) Name of the user who performed the grant
PRIVILEGE VARCHAR2(40) Table Privilege
GRANTABLE VARCHAR2(3) Y Privilege is grantable
HIERARCHY VARCHAR2(3) Y Privilege is with hierarchy option

-- 2. 创建用户
create user a identified by a default tablespace users; -- 创建一个用户
grant connect,resourct to a; -- 授与 角色,角色中含有 系统权限,我们下面会看到

-- 3. 查看角色, 通过 数据字典 DBA_ROLES, 可以得到各个角色
DESC DBA_ROLES;

Name Type Nullable Default Comments
----------------- ------------ -------- ------- -------------------------------------------------------
ROLE VARCHAR2(30) Role Name
PASSWORD_REQUIRED VARCHAR2(8) Y Indicates if the role requires a password to be enabled

-- 4. 查看各角色的权限,可以通过数据字典 ROLE_SYS_PRIVS 数据字典 来查看
DESC ROLE_SYS_PRIVS;

Name Type Nullable Default Comments
------------ ------------ -------- ------- -------------------------------
ROLE VARCHAR2(30) Role name
PRIVILEGE VARCHAR2(40) System Privilege
ADMIN_OPTION VARCHAR2(3) Y Grant was with the ADMIN option

-- 4.1 我们可以查看系统创建的角色 resource 的各种权限
select role,privilege from ROLE_SYS_PRIVS where role = 'RESOURCE';

ROLE PRIVILEGE
------------------------------ ----------------------------------------
RESOURCE CREATE SEQUENCE
RESOURCE CREATE TRIGGER
RESOURCE CREATE CLUSTER
RESOURCE CREATE PROCEDURE
RESOURCE CREATE TYPE
RESOURCE CREATE OPERATOR
RESOURCE CREATE TABLE
RESOURCE CREATE INDEXTYPE

8 rows selected

-- 从以上输出,我们可以看出,角色 resource 拥有 8个系统权限,如上;
-- 这里我们要注意一点,细心的人可能会发现,当我们创建好一个用户,授与 resource 角色给到用户时,
-- 我们查看这个用户的系统权限时,会发现多出一个 UNLIMITED TABLESPACE 的权限,如我们第2步创
-- 建的用户 a
conn a/a
select * from user_sys_privs;

USERNAME PRIVILEGE ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
A CREATE SESSION NO
A UNLIMITED TABLESPACE NO

-- 你会看到,第2行有一个 UNLIMITED TABLESPACE 的系统权限.
-- 针对这个 UNLIMITED TABLESPACE权限,它是表示可以在任易表空间下申请空间。 这个系统权限很
-- 特别,它属于 resource 角色,但是,我们查数据字典时看不见。严格来说,我们不能 把这个 权限
-- 授与任何我们自己创建的 角色。所以, 在数据字典中,我们查不到它。请记住就行。

-- 5. 创建 角色 和 授与 角色系统权限
create role mytestrole ; -- 创建角色,名为:mytestrole
grant create table,create procedure,create sequence to mytestrole; -- 授与权限给角色

-- 5.1 我们可以查询数据字典来看到此权限。
select * from role_sys_privs where role = 'MYTESTROLE';

ROLE PRIVILEGE ADMIN_OPTION
------------------------------ ---------------------------------------- ------------
MYTESTROLE CREATE TABLE NO
MYTESTROLE CREATE SEQUENCE NO
MYTESTROLE CREATE PROCEDURE NO

-- 6. 授权
/*管理员授权, 注:授系统权限时,只能是DBA ,授对像权限时,对像拥有者就可以 */
-- 下面是 DBA 授予系统权限的例子:
grant create session to sodi; -- 授予sodi用户创建session的权限,即登陆权限
grant unlimited session to sodi; -- 授予sodi用户使用表空间的权限
grant create table to sodi; -- 授予创建表的权限
grante drop table to sodi; -- 授予删除表的权限
grant insert table to sodi; -- 插入表的权限
grant update table to sodi; -- 修改表的权限
grant all to public; --这条比较重要,授予所有权限(all)给所有用户(public)


-- 下面是授予对像权限的例子, 其中 tablename是指表名
/* oralce对权限管理比较严谨,普通用户之间也是默认不能互相访问的 */
grant select on tablename to sodi; -- 授予 sodi 用户查看指定表的权限
grant drop on tablename to sodi; -- 授予删除表的权限
grant insert on tablename to sodi; -- 授予插入的权限
grant update on tablename to sodi; -- 授予修改表的权限
grant insert(id) on tablename to sodi; -- 授予对指定表特定字段的插入和修改权限,注意,只能是insert和update
grant update(id) on tablename to sodi; -- 授予对指定表特定字段的插入和修改权限,注意,只能是insert和update
grant alert all table to sodi; -- 授予sodi用户alert任意表的权限

-- 7. 撤销权限
/* 使用 revoke 命令,使用时同 grant 一致 */
revoke create session from sodi; --撤消对 sodi用户 create session的权限
revoke insert on tablename from sodi; -- 撤消插入的权限

-- 8. 权限传递
/***********************************************************
* 通过 with admin option 选项和 with grant option 选项,二者异同点:
* 1. 相同点:
* 两者 都可以用户给 用户授权或者 给 角色授权上。
* grant create table to a with admin option ;
grant select on tablename to b with grant option;

* 2. 不同点:
with admin option 只能用在授予 系统权限上
with grant option 只能用户授予 对像权限上
当DBA把系统权限create table 授予了用户 a 时,并且指定了 with admin option
如:grant create table to a with admin option
此时,用户a可以创建表,并且还可以把 create table 权限授予 用户 b, 这就是 权限传递
再如:grant select on tablename to a with grant option
此时,用户a可以查询表tablename,而且用户a还可以把权限授予用户b,并且b也可以访问tablename
不过,要注意的是:当权限回收时,with grant option会传递回收;而with admin option则不会
*/
-- 例:
grant create table to a with admin option;
grant select on tablename to b with grant option;
-- 切换成用户b
select * from a.tablename; -- 可以有权限查询
-- 再授权给用户c
grant select on a.tablename to c; -- 由于上面有了 with grant option,则此语句成功
-- 切换成用户 c
select * from a.tablename; -- success.
-- 可以再测试一下,回收。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值