在写以下内容,先讲解几个主要的概念,以便后续内容理解。
▲权限分为两个:系统权限,对象权限
①权限:用户对数据库的相关权限(create session)
②对象(实体)权限:用户对其他用户的数据对象操作的权限(比如:表、视图、过程……)【select insert update delete all create index……】
▲角色分为两个:预定义角色和自定义角色
①预定义角色:在安装数据库时已经有了的。
connect:只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
dba:不要轻易授权,如果把dba授权给一个普通用户,那么这个用户就变成 了dba
resource:可以让普通用户在任何一个表空间建表
②自定义角色:自己定义没有的权限的角色就叫自定义角色
注:对于普通用户:授予 connect, resource 权限。
对于DBA管理用户:授予 connect,resource, dba 权限。
Oracle用户管理
- 创建用户并授予密码,一般具有 dba 的权限才可使用。
注意:Oracle 密码不可以以数字开头,必须以字母开头。
create user 用户名 identified by 密码;
- 修改密码
password 用户名; /* 给自己修改密码 */
alter user 用户名 identified by 密码; /* 如果是给别人修改密码,需有**dba**权限或有alter user系统权限 */
- 删除用户 ,一般具有 dba 权限,如果某个用户去删除另一个用户则需要有 drop user 权限。
drop user 用户名 [cascade]; /*在删除用户时,注意如果要删除的用户,已经创建了表,那么就需要在删除时带一个参数 cascade;*/
- 分配权限
在创建完用户,是没有任何权限的,这时就需要授予权限才能进行执行相关操作。
/* 授权格式 */
grant XXX to 用户名
/* 方式1 */
grant contect to 用户名;
grant resource to 用户名;
/* 方式2 */
grant contect,resource to 用户名;
权限分配实例:
--希望A用户可以去查询A表
grant select on A表 to A用户;
--希望A用户可以去查询B用户的B表
conn B用户/B密码;
grant select on B表 to A用户;
conn A用户/A密码;
select * from B用户.B表;
--希望A用户可以去 修改/删除/添加/查询 B用户的B表
conn B用户/B密码;
grant all on B表 to A用户;
conn A用户/A密码;
select * from B用户.B表;
- 收回权限
--B用户希望收回A用户对B表的查询权限
conn B用户/B密码;
revoke select on B表 from A用户;
- 权限传递
-
对象权限 ( with grant option )
希望xiaoming用户可以去查询scott的emp表/还希望xiaoming可以把这个权限传递给别人。
-
对象权限 ( with grant option )
grant select on emp to xiaoming with grant option
我的操作过程:
SQL> conn scott/qwer1234;
已连接。
SQL> grant select on scott.emp to xiaoming with grant option;
授权成功。
SQL> conn system/qwer1234;
已连接。
SQL> create user xiaohong identified by oracle;
用户已创建。
SQL> grant connect to xiaohong;
授权成功。
SQL> conn xiaoming/qwer1234;
已连接。
SQL> grant select on scott.emp to xiaohong;
授权成功。
-
系统权限
system给xiaoming权限时:grant connect to xiaoming with admin option
问题:如果scott把xiaoming对emp表的查询权限回收,那么xiaohong会怎样? 答案:被回收
SQL> conn scott/oracle;
已连接。
SQL> revoke select on emp from xiaoming;
撤销成功。
SQL> conn xiaohong/oracle;
已连接。
SQL> select * from scott.emp;
select * from scott.emp
第 1 行出现错误:
ORA-00942: 表或视图不存在
结果显示:小红受到诛连了。。
注:with admin option与with grant option区别:
with admin option用于系统权限授权,with grant option用于对象授权。
给一个用户授予系统权限带上with admin option时,此用户可把此系统权限授予其他用户或角色,但收回这个用户的系统权限时,这个用户已经授予其他用户或角色的此系统权限不会因传播无效,如授予A系统权限create session with admin option,然后A又把create session权限授予B,但管理员收回A的create session权限时,B依然拥有create session的权限,但管理员可以显式收回B create session的权限,即直接revoke create session from B. 而with grant option用于对象授权时,被授予的用户也可把此对象权限授予其他用户或角色,不同的是但管理员收回用with grant option授权的用户对象权限时,权限会因传播而失效,如grant select on table with grant option to A,A用户把此权限授予B,但管理员收回A的权限时,B的权限也会失效,但管理员不可以直接收回B的SELECT ON TABLE 权限。