天天看点

Oracle 用户管理与权限分配 1.用户与用户模式的关系2.创建与管理用户3.用户权限管理4.角色管理5.资源配置profile本次实验:

目录

1.用户与用户模式的关系

2.创建与管理用户

2.1身份验证

2.2创建用户

2.3修改用户

2.4删除用户

2.5查询用户

3.用户权限管理

3.1权限简介

3.2授权操作

3.3回收系统权限

3.4对象授权

3.5回收对象权限

3.6查询用户与权限

4.角色管理

4.1角色简介

4.2预定义角色

4.3创建角色与授权

4.4管理角色

4.5角色与权限查询

5.资源配置profile

5.2使用profile管理密码

1.账户锁定

2.密码过期时间

3.密码历史

4.密码复杂度

5.3使用profile管理资源

5.4维护profile文件

1.修改profile文件

2.删除profile文件

5.5显示profile信息

1.显示用户的资源配置信息

2.显示指定profile文件的资源配置信息

本次实验:

1.用户与用户模式的关系

1.这里的用户指的是oracle数据库的账户,有用户名和密码

2.oracle不同用户的权限不同,oracle提供了一些特权用户,

    例如:sysdba或者sysoper

这类用户主要用于执行数据库的维护操作,如启动数据库、关闭数据库、建立数据库,以及备份和恢复等操作

3.sysdba和sysoper区别:sysdba不具有sysoper的所有权限,但还可以建立数据库,执行不完全恢复。

4.模式:模式又称方案,模式或者方案实际上是用户所拥有的数据库对象的集合。

     对象(表、视图等)是用户来组织的

     用户与模式是一一对应的(所以虽然概念不同,实质上可以等价的)

  • 用户可以直接访问其他模式对象,但是得拥有该对象的访问权限,例如:用户scott可以直接查看其模式中的emp表,但 如果用户HR要查看scott模式中的emp表时,则必须在emp表上具有select操作的权限
  • 当用户要访问其他模式对象时,必须附加模式名作为前缀。

2.创建与管理用户

2.1身份验证

  • 密码验证
  • 外部验证
  • 全局验证

主要使用密码验证,另外两种验证很少很少使用。初学不用深究(下面都是密码验证)

2.2创建用户

create user 用户名 identified by 密码

[or identified externally]

[or identified globally as 'CN=user']

[default tablespace tablespace_default]

[temporary tablespace tablespace_temp]

[quota [integer k[m]] [unlimited] ] on tablespace_specify1

[,quota [integer k[m]] [unlimited] ] on tablespace_specify2

[,...]...on tablespace_specifyn

[profiles profile_name]

[account lock or account unlock];

  • identified externally:表示用户名在操作系统下验证,这种情况下要求该用户必须与操作系统所定义的用户名相同
  • identified globally as 'CN=user':表示该用户名由oracle安全域中心服务器验证,CN名字表示用户的外部名
  • [default tablespace tablespace_default]:表示该用户在创建数据对象时使用的默认表空间
  • [temporary tablespace tablespace_temp]:表示该用户所使用的临时表空间
  • [quota[integer K[M]][unlimited]] on tablespace_specify1:表示用户在指定表空间中允许占用的最大空间
  • [profiles profile_name]:资源文件名称
  • [account lock or account unlock]:用户是否被加锁,默认情况下是不加锁的

实例

(1)创建用户,并指定默认表空间和临时表空间

eg:创建一个mr用户,口令为mrsoft,并设置默认表空间为users,临时表空间为temp的用户

--注意中间没有','分隔

create user mr identified by mrsoft
default tablespace users
temporary tablespace temp;
           

(2)创建用户,并配置其在指定表空间上的磁盘限额

eg:创建一个用户east,口令为mrsoft,默认表空间为users,临时表空间为temp的用户,并

指定该用户在tbsp_1表空间上最多可使用的大小为10MB,代码及运行结果如下。

create user east identified by mrsoft
default tablespace users
temporary tablespace temp
quota 10M on tbsp_1;
           

--查看表空间:select * from v$tablespace;保证确实有tbsp_1

如果要禁用用户使用某个表空间,则可以通过quota关键字设置该表空间的使用限额为0

(3)创建用户,并配置其在指定表空间上不受限制

使用 quota unlimited on tablespace_specify 子句

eg:创建一个用户df,口令为mrsoft,临时表空间为temp,默认表空间为tbsp_1,并且该

用户使用tbsp_1表空间不受限制。

create user df identified by mrsoft
temporary tablespace temp
default tablespace tbsp_1
quota unlimited on tbsp_1;
           
创建完用户后要注意一下几点:
  • 创建用户时不指定default tablespace 子句,oracle会将system表空间作为用户默认表空间
  • 创建用户时不指定temporary tablespace子句,oracle会将数据库默认临时表空间作为用户的临时表空间
  • 初始建立的用户没有任何权限,所以为了使用户可以连接到数据库,必须授权其create session权限,关于用户的权限设置会在后面介绍
  • 创建用户时没有为表空间指定quota子句,那么用户在特定表空间上的配额为0,用户将不能在相应的表空间上建立数据对象
  • 初始建立的用户没有任何权限,不能执行任何数据库操作

2.3修改用户

将创建时的create改成alter就是修改用户的语法,则创建时能指定什么参数,此处就能修改什么参数了

(1)修改用户的磁盘限额

eg:修改用户east在表空间上的磁盘限额为20MB(原始为10MB,现在增加10MB)

alter user east quota 20m on tbsp_1;
           

(2)修改用户口令

eg:修改用户east的新口令为123456(原来为mrsoft)

alter user east identified by 123456;
           

(3)解锁被锁住的用户

为了安全起见,很多用户处于locked状态,dba可以解锁

--格式见创建的最后一个子句

alter user SH account unlock;
           

2.4删除用户

删除用户是通过drop user语句完成的。删除用户后,oracle会从数据字典中删除用户、方案及其所有对象方案

drop user user_name [cascade];

  • user_name:要删除的用户名
  • cascade:级联删除选项,如果用户包含数据库对象(表等),则必须加cascade选项,此时连同该用户所拥有的对象一起删除

eg:使用drop user语句删除用户df,并连同该用户所拥有的对象一起删除。

--执行比较慢

drop user df cascade;
           

2.5查询用户

(1).查看数据库里面所有用户,前提是你是有dba权限的帐号,如sys,system
col external_name for a20;
set linesize 500;
select * from dba_users;
-- desc dba_users;
           
--查询用户名和密码
select username,password from dba_users where username='EAST';
           

--根本看不到密码,不错,就算是管理员也看不到密码明文,只能修改密码。这是oracle的安全之处!

(2)查询当前可登陆的所有用户

select distinct owner from all_objects;
           
(3)查看你能管理的所有用户!
select * from all_users;
-- desc all_users;
           
(4)查看当前用户信息 !
select * from user_users;
-- desc user_users;
           
于是查询当前登录用户可以使用
select username from user_users;
           

3.用户权限管理

新创建的用户不能进行任何操作,此时必须让具有dba角色的用户对该用户进行授权

3.1权限简介

系统权限:在系统级对数据库进行存取和使用的机制

        例如:用户是否能连接到数据库系统(session权限)

                执行系统级的ddl语句(如:create,alter,drop)等

对象权限:指的是某一个用户对其他用户的表、视图、序列、存储过程、函数、包等的操作权限。

不同类型的对象具有不同的对象权限,对于某些模式对象,例如:簇、索引、触发器、数据库连接

等没有相应的实体权限,这些权限由系统权限进行管理。

3.2授权操作

eg1: 为用户east授予连接和开发系统权限,并尝试使用east连接数据库
grant connect,resource to east;
connect east/[email protected];
           

授权

eg2:在创建用户dongfang和xifang后,首先system将创建session和创建table的权限授权给dongfang,

然后dongfang再将这两个权限传递给xifang,最后通过xifang这个用户创建一个数据表

connect sys/[email protected] as sysdba;

创建两个用户

create user dongfang identified by mrsoft
default tablespace users
quota 10m on users;

create user xifang identified by mrsoft
default tablespace users
quota 10m on users;
           
查询用户
select * from all_users where username like '%FANG';
           
sys授权给dongfang
grant create session,create table to dongfang with admin option;
           
切换到dongfang dongfang授权给xifang
connect dongfang/[email protected];
grant create session,create table to xifang;
           
切换到xifang xifang使用权限建表
connect xifang/[email protected];
create table tb_xifang(
    id number,
    name varchar2(20)
);
           
查看表结构
set linesize 50;
desc tb_xifang;
           

3.3回收系统权限

revoke sys_privi|role from user|role|public;

参数说明:

  • sys_privi:系统权限或角色
  • role:角色
  • user:具体的用户名,或者是一系列的用户名
  • public:保留字,代表oracle系统的所有用户
eg1:撤销east用户的resource系统权限
connect sys/[email protected] as sysdba;    
revoke resource from east;
           

dba grant授权给用户A时带有with admin option,则用户A有权将系统权限授予B。

此时dba使用revoke命令撤销A用户的系统权限,用户B的系统权限仍然有效。

eg2:首先撤销用户dongfang的create table权限,然后尝试是否还可以通过用户xifang创建数据表

revoke create table from dongfang;
connect xifang/[email protected];

create table tb_xifang2(
    id number,
    name varchar2(10)
);
           
--仍然可以建表

3.4对象授权

系统权限讲完了,下面讨论对象权限,和授予系统权限基本相同

授予对象权限给用户也使用grant命令

grant obj_privi|all column 

    on schema.object

    to user|role|public 

    [with grant option]|[with hierarchy option];

参数说明:

  • obj_privi:表示对象的权限,可以是alter,execute,select,update和insert
  • role:角色名
  • user:被授予的用户名
  • with grant option:表示被授权者可以再将权限授予另外的用户
  • with hierarchy option:在对象的子对象(在视图上再建立视图)上授权给用户
eg1:给用户xifang授予select、insert、delete和update表scott.emp的权限
grant select,insert,delete,update
    on scott.emp
    to xifang;
           

3.5回收对象权限

要从用户或者角色中撤销对象权限,仍然要使用revoke命令
revoke obj_privi|all
    on schema.object
    from user|role|public 
    cascade constraints;
           
参数说明如下:
  • obj_privi:表示对象的权限
  • public:保留字,代表oracle系统的所有权限
  • cascade constraints:表示有关联关系的权限也被撤销

eg:从xifang用户撤销scott.emp表的update和delete权限

connect system/password;

revoke delete,update 
    on scott.emp 
    from xifang;
           

如果数据库管理员grant命令给用户A授予对象权限时带有with grant option,则该用户A有权将权限再次授予另外的用户B.

在这种情况下,如果数据库管理员用revoke命令撤销A用户的对象权限时,用户B的对象权限也被撤销。由此可见,在进行

系统权限回收和进行对象权限回收时,效果是不同的。

3.6查询用户与权限

用户被授予的系统权限或对象权限都被记录在oracle的数据字典里。

数据字典

数据字典表 说明
dba_users 数据库用户基本信息表
dba_sys_privs 已授予用户或角色的系统权限
dba_tab_privs 数据库对象上的所有权限
user_sys_privs 登录用户可以查看自己的系统权限
role_sys_privs 登录用户查看自己的角色
all_tables 登录用户自己可以查询的基表信息
user_tab_privs 用户自己将哪些基表权限授予哪些用户
all_tab_privs 哪些用户给自己授权

4.角色管理

oracle权限过多,很杂,管理数据库权限带来了很大麻烦,这是就需要角色来简化权限管理。

4.1角色简介

  • 角色是一个独立的数据库实体,它包括一组权限。也就是说,角色是包括一个或者多个权限的集合,它并不被哪个用户所拥有。角色可以被授予任何用户,也可以从用户中将角色收回。
  • 使用角色可以简化权限的管理,可以仅用一条语句就能从用户那里授予或回收权限,而不必对用户一一授权。使用角色还可以实现权限的动态管理,例如,随着应用的变化可以增加或者减少角色权限,这样通过改变角色的权限,就实现了改变多个用户的权限
  • 角色、用户及权限是一组关系密切的对象,既然角色是一组权限的集合,那么,它只有被授予某个用户才能有意义。

4.2预定义角色

系统已经创建好的一些角色,可以直接拿来用

connect、resource、dba、exp_full_database、imp_full_database

角色connect,resource及dba主要用于数据库管理,这3个角色之间可能有系统权限的重叠,但是相互之间没有任何包含关系

一般而言数据库管理员需要:connect、resource、dba

一般的数据库开发人员需要:connect、resource

exp_full_database、imp_full_database:这两个权限则用于数据库的导入导出

Oracle 用户管理与权限分配 1.用户与用户模式的关系2.创建与管理用户3.用户权限管理4.角色管理5.资源配置profile本次实验:
eg:查询dba_roles数据字典中的角色信息。
set pagesize 50;
select * from dba_roles;
           
Oracle 用户管理与权限分配 1.用户与用户模式的关系2.创建与管理用户3.用户权限管理4.角色管理5.资源配置profile本次实验:
共55行

4.3创建角色与授权

格式:create role role_name [ not identified | identified by [password]| [exeternally] | [globally] ];

参数说明如下:

  • role_name:角色名
  • identified by password:角色口令
  • identified by exeternally:表示角色名在操作系统下验证
  • identified globally:表示用户是由oracle安全域中心服务器来验证,此角色由全局用户来使用。
eg:创建一个名为designer的角色,该角色的口令为123456
connect sys/pass[email protected] as sysdba;
create role designer identified by 123456;
           

若管理员具有grant_any_prvilege权限,就可以对某个角色进行授权。(角色也需要权限)

eg:给designer角色授予create view和create table权限

grant create view,create table to designer;
           

在角色获得了权限之后,就可以把这个有使用价值的角色授予给某个用户了。把角色授予给某个用户仍然使用grant...to语句

eg:把designer角色授权给用户dongfang

grant designer to dongfang;
           

4.4管理角色

(1)查看角色所包含的权限

使用 role_sys_privs 数据字典

select * from role_sys_privs where role=upper('designer');
           

(2)修改角色密码

取消角色密码和修改角色密码。使用 alter role 语句

首先取消designer角色的密码,然后再重新给该角色设置一个密码

alter role designer not identified;
alter role designer identified by mrsoft;
           

(3)设置当前用户要生效的角色

只有角色生效了,角色内的权限才作用于用户

最大可生效角色数由参数max_enabled_roles设定

设置角色生效可使用 set role 语句

eg:创建一个无需密码验证的角色 queryer ,然后设置该角色生效,接下来再设置带有密码的角色 designer 也生效。

create role queryer;
--设置角色生效
set role queryer;
set role designer identified by mrsoft;
           

(4)删除角色

drop role

eg:使用drop role语句删除角色queryer

drop role queryer;
           
删除角色后,原来拥有该角色的用户将不再拥有该角色,相应的权限也将失去

4.5角色与权限查询

存放用户、角色、权限的数据字典

数据字典 说明
dba_col_pirvs 数据库列上的所有权限
dba_role_privs 显示已经授予用户或其他角色的角色
dba_tab_privs 数据库对象上的所有权限
dba_sys_privs 已授予用户或角色的系统权限
eg1:查询HR用户被授予的系统角色
desc dba_role_privs;
select granted_role,default_role from dba_role_privs where grantee='HR';
           
eg2:在scott模式下,查询当前用户的所有有效角色
connect scott/[email protected];
select * from session_roles;
           

5.资源配置profile

profile文件,即概要文件,是密码限制、资源限制的命名集合。profile文件作为oracle安全策略的重要组成部分,利用它可以对数据库用户进行基本的资源限制,并且可以对用户的密码进行管理。

在安装数据库时,oracle会自动建立名为default的默认配置文件。如果没有为新建的用户指定default文件(没有[profiles profile_name]子句),oracle将为他指定default配置文件。

初始的default文件没有进行任何密码和资源限制。

使用profile文件时需要注意如下事项:

  • 建立用户时,如果不指定profile选项,oracle会自动将default分配给相应的数据库用户。
  • 建立profile文件时,如果只设置了部分密码和资源限制选项,其他选项会自动使用默认值,即使的default文件中有相应选项的值。
  • 使用profile管理密码时,密码管理选项总是处于被激活状态,但是如果使用profile管理资源,必须要激活资源限制。
  • 一个用户只能分配一个profile文件。如果要同时管理用户的密码和资源,那么在建立profile时应该同时指定密码和资源选项

5.2使用profile管理密码

为防止黑客暴力破解密码,可以使用profile文件管理密码。profile文件提供了一些密码管理选项,他们提供了强大的密码管理功能。必须先建立profile文件,建立profile文件使用create profile语句。一般由管理员建立profile文件,其他用户想建立概要文件则多一步授权即可,grant create profile to scott;

使用profile文件可以实现如下四种密码管理:账户锁定、密码的过期时间、密码历史和密码的复杂度。

1.账户锁定

连续输入多少次错误密码后,oracle会自动锁定用户的账户,并且可以规定账户的锁定时间。

锁定账户两个参数:

    failed_login_attempts:用户在登录到oracle数据库时允许失败的次数。

    password_lock_time:账户被锁定的天数

eg:创建profile文件,要求设置连续失败次数为5,超过该次数后,账户将被锁定7天,然后使用alter user语句将profile文件

(即lock_account)分配给用户dongfang

create profile lock_account limit
    failed_login_attempts 5
    password_lock_time 7;
           
alter user dongfang profile lock_account;
           
此时若登录dongfang用户连续失败5次,账户会自动锁定7天,此时即使使用正确口令也无法登录。
Oracle 用户管理与权限分配 1.用户与用户模式的关系2.创建与管理用户3.用户权限管理4.角色管理5.资源配置profile本次实验:
此时也可以dba手动解锁用户: (别漏了account关键字)
alter user dongfang account unlock;
           
若不主动解锁改用户,则必须等7天后,oracle自动解锁该用户了。注意:若建立profile文件时没有提供password_lock_time参数,则将自动使用默认值unlimited,此时就必须dba来手动解锁用户账户了。

2.密码过期时间

密码过期时间是强制用户定期修改自己的密码,当密码过期后,oracle会随时提醒用户修改密码。密码宽限期是指密码到期之后的宽限使用时间。

同样设置密码过期时间也有两个参数:

password_life_time:密码有效时间,单位天

password_grace_time:口令宽限时间,使得失效时间到达后,密码还可以使用一段时间。(最好两者同时设置)

eg:下面创建一个profile文件(即password_lift_time),并设置用户的密码有效期为30天,密码宽限期为3天,

然后使用alter user 语句将profile文件分配给用户dongfang

create profile password_lift_time limit
    password_life_time 30
    password_grace_time 3;
           
alter user dongfang profile password_lift_time;
           

--则东方用户30天内没有修改密码,Oracle会显示警告信息,密码将在3天后到期(expire)。若33天内都没有更改密码,

--那么当第34天连接时,oracle会强制用户修改密码,否则不允许连接到数据库。

3.密码历史

密码历史是用于控制账户密码的可重复使用次数或可重用时间。使用密码历史参数后,oracle会将密码修改信息存放到

数据字典中。这样,当修改密码时,oracle会对新、旧密码进行比较,以确保用户不会重用过去已经用过的密码。

password_reuse_time:指定密码的可重用时间,单位为天

password_reuse_max:口令在能够被重复使用之前,必须改变的次数

注:使用密码历史选项时,两个参数只能使用其中一个,并将另一个设置为unlimited.

4.密码复杂度

通过指定函数来强制用户的密码必须具有一定的复杂度。例如:强制用户的密码不能与用户名相同使用校验函数验证用户密码的复杂度时,只需要将这个函数名称指定给profile文件中的password_verify_function参数

oracle 11g,系统目录下有一个新的密码验证文件utlpwdmg.sql,和先前指定的验证函数一起对密码进行检查

5.3使用profile管理资源

profile文件不仅可以管理密码,还可以管理资源(根据用户所承担任务的不同为其分配合理的资源),管理资源时必须将resource_limit参数设置为true,以激活资源限制。

eg:首先使用show命令查看 resource_limit 参数的值,然后使用 alter system 命令修改该参数的值为true,从而激活资源限制

show parameter resource_limit;
alter system set resource_limit=true;
           
利用profile配置文件可以对以下系统资源进行限制
  • cpu时间:防止无休止使用cpu,限制用户每次调用时使用的cpu时间以及在一次会话期间所使用的cpu时间
  • 逻辑读:为了防止过多使用系统的I/O操作,限制每次调用即会话时读取的逻辑数据块数目
  • 用户的并发会话数
  • 会话空闲的限制:当一个会话空闲的时间达到了限制值时,当前事务被回滚,会话被终止并且所占用的资源被释放
  • 会话可持续时间:如果一个会话的总计连接时间达到了该限制值,当前事务被回滚,会话被终止并释放所占用的资源
  • 会话所使用的SGA空间的限制。

当一个sql语句占用的资源超过profile文件中的限制时,oracle将终止并回退当前的事务,然后向用户返回错误信息,如果受到

的限制是会话级别的,在提交或回退事务后,用户会话将被终止;而受到调用级限制时,用户会话还能够继续进行,只是当前执行

的sql语句将被终止。

profile文件中对各种资源限制的参数:

  • sessions_per_user:用户可以同时连接的会话数量。
  • cpu_per_session:限制用户在一次数据库会话期间可以使用的cpu时间,单位为百分之一秒。
  • cpu_per_call:限制用户每条sql语句所能使用的cpu时间,参数值是一个整数,单位是百分之一秒
  • logical_reads_per_session:限制每个会话所能读取的数据块数量,包括从内存中读取的数据块和从磁盘中读取的数据块
  • connect_time:限制每个用户连接到数据库的最长时间,单位为分钟。超时终止
  • idle_time:该参数限制每个用户会话连接到数据库的最长空闲时间。超过该空闲时间的会话,系统会终止该会话。

5.4维护profile文件

在oracle数据库中,profile文件也是一种数据资源。dba也可以使用相应的语句对其进行管理,包括修改配置文件、删除配置文件、激活或禁用配置文件。

1.修改profile文件

在创建profile文件之后,还可以使用alter profile语句修改其中的资源参数和密码参数

eg:对password_lift_time文件(即profile文件)的资源限制参数进行修改

alter profile password_lift_time limit
cpu_per_session 20000
sessions_per_user 10
cpu_per_call 500
password_life_time 180
failed_login_attempts 10;
           
对配置文件所做的修改只有在用户开始新的会话时才会生效

2.删除profile文件

使用drop profile语句删除profile文件,若该文件已经被指定给了用户,则必须在drop profile语句中使用cascade

eg:删除被分配给dongfang这个用户的password_lift_time配置文件

drop profile password_lift_time cascade;
           

5.5显示profile信息

当profile文件被创建后,其信息被存储在数据字典中。通过查询这些数据字典,可以了解profile文件的信息。

1.显示用户的资源配置信息

建立或修改用户时,可以为用户分配profile文件,如果没有为用户分配profile文件,oracle会自动将default分配给用户。通过查询数据字典dba_users,可以显示用户使用的profile文件。

eg:显示用户dongfang所使用的profile文件

select profile from dba_users where username=upper('dongfang');
           
desc dba_users;

2.显示指定profile文件的资源配置信息

建立或者修改profile文件时,oracle将会把profile参数存放在数据字典中。通过查询dba_profiles,可以显示profile的妙妙限制、资源限制信息。

eg:显示resource_limit文件的密码和资源限制信息。

column limit for a20;
set linesize 500;
set pagesize 50;
select resource_name,resource_type,limit from dba_profiles where profile=upper('lock_account');
           
Oracle 用户管理与权限分配 1.用户与用户模式的关系2.创建与管理用户3.用户权限管理4.角色管理5.资源配置profile本次实验:

本次实验:

--1.	创建概要文件
/*①	利用企业管理器创建概要文件”ygbx+学号_pro”,要求在此概要文件中CPU/会话为1000,读取数/会话为2000,
	登录失败次数为3,锁定天数为10.*/
--服务器->安全性->概要文件
--ygbx3160704339_pro

connect sys/[email protected] as sysdba;
--②	利用SQL*PLUS,创建概要文件“ygbx+学号_pro_sql”,其结构与”ygbx+学号_pro”一致。
create profile ygbx3160704339_pro_sql limit
	cpu_per_session 1000
	logical_reads_per_session 2000
	failed_login_attempts 3
	password_lock_time 10;

--2.查看概要文件
--①	利用企业管理器查看概要文件”ygbx+学号_pro”的信息。
--ygbx3160704339_pro


--②	利用SQL*PLUS,从DBA_PROFILES数据字典中查看“ygbx+学号_pro_sql”概要文件的资源名称和资源值等信息。
column limit for a20;
set linesize 500;
set pagesize 50;
select resource_name,profile,limit from dba_profiles where profile=upper('ygbx3160704339_pro_sql');

--③	利用SQL*PLUS,从dba_profiles中查看“ygbx+学号_pro_sql”概要文件中锁定天数的值
select limit from dba_profiles 
	where profile=upper('ygbx3160704339_pro_sql') and resource_name=upper('password_lock_time');
--输出10

--3.修改概要文件。
--①	利用企业管理器,修改”ygbx+学号_pro”概要文件,将CPU/会话改为4000,连接时间为60
--

--②	利用SQL*PLUS,修改“ygbx+学号_pro_sql”概要文件,将并行会话设为20,读取数/会话设为DEFAULT
alter profile ygbx3160704339_pro_sql limit
	sessions_per_user 20
	logical_reads_per_session default;


--4.创建用户
--①	利用企业管理器,创建“ygbxuser+学号”用户,密码为“user+学号”,默认表空间为“ygbx_tbs”
--需要先建立表空间
create tablespace ygbx_tbs
	datafile 'E:/APP/ADMINISTRATOR/ORADATA/ORCL/Ygbx_TbsDataFile01.dbf'
	size 50m;
--查看表空间
select * from v$tablespace;

-- ygbxuser3160704339
-- user3160704339
-- ygbx_tbs


--②	利用sqlplus创建“ygbxuser+学号_sql”用户,密码为“user+学号+sql”,该用户处于锁状态
create user ygbxuser3160704339_sql identified by user3160704339sql
	account lock;


--③	利用sqlplus,将“ygbx+学号_pro”概要文件赋予“ygbxuser+学号”用户。
alter user ygbx3160704339
grant ygbx3160704339_pro 


--④	利用sql*plus,将“ygbx+学号_pro_sql”概要文件赋予“ygbxuser+学号_sql”用户。
alter user ygbxuser3160704339_sql profile ygbx3160704339_pro_sql;
--显示用户的profile
select profile from dba_users where username=upper('ygbxuser3160704339_sql');
--输出:YGBX3160704339_PRO_SQL

--5.查看用户
--①	利用企业管理器,查看“ygbxuser+学号”用户的信息
-- ygbx3160704339

--②	利用sqlplus,查看“ygbxuser+学号_sql”用户的信息,并查看该用户验证的方式
-- ygbxuser3160704339_sql
col external_name for a20;
set linesize 500;
select * from dba_users where username=upper('ygbxuser3160704339_sql');
--单独拎出来认证方式
select authentication_type from dba_users where username=upper('ygbxuser3160704339_sql');
--输出:PASSWORD

--③	利用sql*plus,从dba_users数据字典中查看“ygbxuser+学号_sql”用户的默认表空间和临时表空间的信息。
select default_tablespace,temporary_tablespace from dba_users 
	where username=upper('ygbxuser3160704339_sql');
--users 和 temp


--6.修改用户
--①	利用企业管理器,修改“ygbxuser+学号”用户,验证方式为外部
-- ygbx3160704339  
-- 前面用户名创建成了 ygbx3160704339 现在一直用下去吧

--②	利用sql*plus,修改“ygbxuser+学号_sql”用户,将该用户解锁,并将密码改为“sql+学号+user”
alter user ygbxuser3160704339_sql 
	identified by sql3160704339user
	account unlock;
--查看修改
select * from dba_users where username=upper('ygbxuser3160704339_sql');

--7.权限管理
--①	利用企业管理器,授予“ygbxuser+学号”用户“create any table”、“create any index”,
--	“alter any table”,”alter any index”,“drop any table”和“drop any index”系统权限
-- ygbx3160704339
--用户-> ygbx3160704339->编辑->系统权限->编辑列表


--②	利用sqlplus授予“ygbxuser+学号_sql”用户“sysoper”系统权限
grant sysoper to ygbxuser3160704339_sql;
--查看系统权限
--select * from dba_sys_privs where grantee=upper('ygbxuser3160704339_sql');


--③	利用企业管理器,将“ygbxuser+学号”用户添加到“system”方案中,对“help”表的查看、修改、删除等对象权限
--先建立表help
create table help(
	id int,
	name varchar2(20)
);

-- ygbx3160704339
-- 查找到用户->编辑->使用组权限->编辑列表->添加sys_group
-- ->切换到对象权限->选择对象类型->表->添加->选择 表 对象 内输入sys.help(如图)->右移动select、update、delete->确定
grant delete,select,update
	on sys.help
	to ygbx3160704339;


--④	利用sql*plus,收回“ygbxuser+学号”用户在“system”方案中对“help”表的查看、修改、删除等对象权限
revoke delete,select,update
	on sys.help
	from ygbx3160704339;


--⑤	利用sql*plus,收回“ygbxuser+学号_sql”用户的“sysoper”系统权限
revoke sysoper from ygbxuser3160704339_sql;


--8.创建角色
--①	利用企业管理器,创建“ygbxrole+学号”角色,赋予该角色能对表、索引、存储过程、序列、同义词进行基本操作的权限
-- ybgxrole3160704339


--②	利用sql*plus,创建“ygbxrole+学号_sql”角色,该角色具有“sysdba”系统权限,并将该角色赋予“ygbxuser+学号_sql”用户
create role ygbxrole3160704339_sql identified by 123456;
-- grant sysdba to ygbxrole3160704339_sql;
--ORA-01931: 无法将 SYSDBA 授予角色
-- grant create table to ygbxrole3160704339_sql;
--将dba角色赋予角色 也相当于有了系统权限了
grant dba to ygbxrole3160704339_sql;
grant ygbxrole3160704339_sql to ygbxuser3160704339_sql;


--	9.查看角色
--①	利用企业管理器,查看“ygbxrole+学号_sql”角色所具有的所有权限
-- ygbxrole3160704339_sql

--②	利用sqlplus,查看“ygbxrole+学号_sql”角色所具有的所有权限
--  ygbxrole3160704339_sql
select * from dba_sys_privs where grantee=upper('ygbxrole3160704339_sql');


--10.修改角色
--①	利用企业管理器,修改“ygbxrole+学号”角色,增加对角色的基本操作,并收回存储过程和序列的操作权限。
-- ygbxrole3160704339


--②	利用sqlplus,修改“ygbxrole+学号_sql”角色,收回“sysdba”系统,而授予“select any table”系统权限
revoke dba from ygbxrole3160704339_sql;
grant select any table to ygbxrole3160704339_sql;


--11.删除角色
--①	利用企业管理器,删除“ygbxrole+学号”角色
--查找到 ygbxrole3160704339 然后直接删除


--②	利用sqlplus,删除“ygbxrole+学号_sql”角色
drop role ygbxrole3160704339_sql;


--12.删除概要文件。
--①	利用企业管理器,删除“ygbx+学号_pro”概要文件,查看“ygbxuser+学号”用户的概要文件
-- ygbx3160704339_pro


--②	利用sqlplus,删除“ygbx+学号_pro_sql”概要文件,查看“ygbxuser+学号_sql”用户的概要文件
drop profile ygbx3160704339_pro_sql cascade;

--13.删除用户
--①	利用企业管理器,删除“ygbxuser+学号”用户
-- ygbx3160704339


--②	利用sqlplus,删除“ygbxuser+学号_sql”用户
drop user ygbxuser3160704339_sql;



--思考题:
--1.	分别建立dog,cat,pig用户,并分别用密码,操作系统和外部认证方式认证
create user dog identified by 123;
-- 书上的关键字似乎写错了 多了一个e  没错,加了个e就不是外部的意思了。。
create user cat identified externally;
create user pig identified globally as 'CN=user';

-- 2.	用dog身份登录,并在dog用户下建立cpy_emp表,该表为scott用户的emp表的拷贝表
grant create session,create table,resource to dog;
grant select on scott.emp to dog;
connect dog/[email protected];
create table cpy_emp as select * from scott.emp;
select * from cpy_emp;


--3.	收回dog的所有权限
-- revoke all privileges from dog;
revoke create session,create table,resource from dog;
revoke select on scott.emp from dog;

--4.	建立角色animal,并对角色赋予如上所需权限,然后为dog,cat,pig赋予角色
create role animal;
grant create session,create table,resource to animal;
grant animal to dog;
grant animal to cat;
grant animal to pig;


-- 5.	建立概要文件pro1,要求密码错误尝试3次,锁定30天,并将该文件指定给dog
create profile pro1 limit
	failed_login_attempts 3
	password_lock_time 30;

alter user dog profile pro1;


--6.	连接dog用户,并连续输入3次错误密码,然后再把密码解锁。
conn dog/[email protected];
conn dog/[email protected];
conn dog/[email protected];
alter user dog account unlock;