Oracle——16用户、角色和权限

Oracle——16用户、角色和权限
Oracle 权限设置
一、权限分类:
系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。
实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。
 
二、系统权限管理:
1、系统权限分类:
DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
对于普通用户:授予connect, resource权限。
对于DBA管理用户:授予connect,resource, dba权限。
 
2、系统权限授权命令:
[系统权限只能由DBA用户授出:sys, system(最开始只能是这两个用户)]
授权命令:SQL> grant connect, resource, dba to 用户名1 [,用户名2]...;
[普通用户通过授权可以具有与system相同的用户权限,但永远不能达到与sys用户相同的权限,system用户的权限也可以被回收。]
例:
SQL> connect system/manager
SQL> Create user user50 identified by user50;
SQL> grant connect, resource to user50;
查询用户拥有哪里权限:
SQL> select * from dba_role_privs;
SQL> select * from dba_sys_privs;
SQL> select * from role_sys_privs;
删除用户:SQL> drop user 用户名 cascade;  //加上cascade则将用户连同其创建的东西全部删除
 
3、系统权限传递:
增加WITH ADMIN OPTION选项,则得到的权限可以传递。
SQL> grant connect, resorce to user50 with admin option;  //可以传递所获权限。
 
4、系统权限回收:系统权限只能由DBA用户回收
命令:SQL> Revoke connect, resource from user50;
 
说明:
1)如果使用WITH ADMIN OPTION为某个用户授予系统权限,那么对于被这个用户授予相同权限的所有用户来说,取消该用户的系统权限并不会级联取消这些用户的相同权限。
2)系统权限无级联,即A授予B权限,B授予C权限,如果A收回B的权限,C的权限不受影响;系统权限可以跨用户回收,即A可以直接收回C用户的权限。
 
三、实体权限管理
1、实体权限分类:select, update, insert, alter, index, delete, all  //all包括所有权限
execute  //执行存储过程权限
user01:
SQL> grant select, update, insert on product to user02;
SQL> grant all on product to user02;
user02:
SQL> select * from user01.product;
// 此时user02查user_tables,不包括user01.product这个表,但如果查all_tables则可以查到,因为他可以访问。

2. 将表的操作权限授予全体用户:
SQL> grant all on product to public;  // public表示是所有的用户,这里的all权限不包括drop。
[实体权限数据字典]:
SQL> select owner, table_name from all_tables; // 用户可以查询的表
SQL> select table_name from user_tables;  // 用户创建的表
SQL> select grantor, table_schema, table_name, privilege from all_tab_privs; // 获权可以存取的表(被授权的)
SQL> select grantee, owner, table_name, privilege from user_tab_privs;   // 授出权限的表(授出的权限)
 
3. DBA用户可以操作全体用户的任意基表(无需授权,包括删除):
DBA用户:
SQL> Create table stud02.product(
 id number(10),
 name varchar2(20));
SQL> drop table stud02.emp;
SQL> create table stud02.employee
 as
 select * from scott.emp;
 
4. 实体权限传递(with grant option):
user01:
SQL> grant select, update on product to user02 with grant option; // user02得到权限,并可以传递。
 
5. 实体权限回收:
user01:
SQL>Revoke select, update on product from user02;  //传递的权限将全部丢失。
 
说明
1)如果取消某个用户的对象权限,那么对于这个用户使用WITH GRANT OPTION授予权限的用户来说,同样还会取消这些用户的相同权限,也就是说取消授权时级联的。
 
 
Oracle 用户管理
一、创建用户的Profile文件
SQL> create profile student limit  // student为资源文件名
 FAILED_LOGIN_ATTEMPTS  3  //指定锁定用户的登录失败次数
 PASSWORD_LOCK_TIME 5  //指定用户被锁定天数
 PASSWORD_LIFE_TIME 30  //指定口令可用天数
 
二、创建用户
SQL> Create User username
 Identified by password
 Default Tablespace tablespace
 Temporary Tablespace tablespace
 Profile profile
 Quota integer/unlimited on tablespace;
例:
SQL> Create user acc01
 identified by acc01   // 如果密码是数字,请用双引号括起来
 default tablespace account
 temporary tablespace temp
 profile default
 quota 50m on account;
SQL> grant connect, resource to acc01;
  • 查询用户缺省表空间、临时表空间
  • SQL> select username, default_tablespace, temporary_tablespace from dba_users;
  • 查询系统资源文件名:
  • SQL> select * from dba_profiles;
    资源文件类似表,一旦创建就会保存在数据库中。
    SQL> select username, profile, default_tablespace, temporary_tablespace from dba_users;
    SQL> create profile common limit
     failed_login_attempts 5
     idle_time 5;
     
    SQL> Alter user acc01 profile common;
     
    三、修改用户:
    SQL> Alter User 用户名
     Identified 口令
     Default Tablespace tablespace
     Temporary Tablespace tablespace
     Profile profile
     Quota integer/unlimited on tablespace;
     
    1、修改口令字:
    SQL>Alter user acc01 identified by "12345";
    2、修改用户缺省表空间:
    SQL> Alter user acc01 default tablespace users;
    3、修改用户临时表空间
    SQL> Alter user acc01 temporary tablespace temp_data;
    4、强制用户修改口令字:
    SQL> Alter user acc01 password expire;
    5、将用户加锁
    SQL> Alter user acc01 account lock;  // 加锁
    SQL> Alter user acc01 account unlock;  // 解锁
     
    四、删除用户
    SQL>drop user 用户名;  //用户没有建任何实体
    SQL> drop user 用户名 CASCADE;  // 将用户及其所建实体全部删除
    *1. 当前正连接的用户不得删除。

    五、监视用户:
    1、查询用户会话信息:
    SQL> select username, sid, serial#, machine from v$session;
    2、删除用户会话信息:
    SQL> Alter system kill session 'sid, serial#';
    3、查询用户SQL语句:
    SQL> select user_name, sql_text from v$open_cursor;
     
     
    Oracle 角色管理
    一、何为角色
      角色。角色是一组权限的集合,将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限。
    二、系统预定义角色
      预定义角色是在数据库安装后,系统自动创建的一些常用的角色。下介简单的介绍一下这些预定角色。角色所包含的权限可以用以下语句查询:
    sql>select * from role_sys_privs where role='角色名';
    1.CONNECT, RESOURCE, DBA
    这些预定义角色主要是为了向后兼容。其主要是用于数据库管理。oracle建议用户自己设计数据库管理和安全的权限规划,而不要简单的使用这些预定角色。将来的版本中这些角色可能不会作为预定义角色。
     
    2.DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE, SELECT_CATALOG_ROLE
    这些角色主要用于访问数据字典视图和包。
     
    3.EXP_FULL_DATABASE, IMP_FULL_DATABASE
    这两个角色用于数据导入导出工具的使用。
     
    4.AQ_USER_ROLE, AQ_ADMINISTRATOR_ROLE
    AQ:Advanced Query。这两个角色用于oracle高级查询功能。
     
    5. SNMPAGENT
    用于oracle enterprise manager和Intelligent Agent
     
    6.RECOVERY_CATALOG_OWNER
    用于创建拥有恢复库的用户。关于恢复库的信息,参考oracle文档《Oracle9i User-Managed Backup and Recovery Guide》
     
    7.HS_ADMIN_ROLE
    A DBA using Oracle's heterogeneous services feature needs this role to access appropriate tables in the data dictionary.
     
    三、管理角色
    1.建一个角色
    sql>create role role1;

    2.授权给角色
    sql>grant create any table,create procedure to role1;

    3.授予角色给用户
    sql>grant role1 to user1;

    4.查看角色所包含的权限
    sql>select * from role_sys_privs;

    5.创建带有口令以角色(在生效带有口令的角色时必须提供口令)
    sql>create role role1 identified by password1;

    6.修改角色:是否需要口令
    sql>alter role role1 not identified;
    sql>alter role role1 identified by password1;

    7.设置当前用户要生效的角色
    (注:角色的生效是一个什么概念呢?假设用户a有b1,b2,b3三个角色,那么如果b1未生效,则b1所包含的权限对于a来讲是不拥有的,只有角色生效了,角色内的权限才作用于用户,最大可生效角色数由参数MAX_ENABLED_ROLES设定;在用户登录后,oracle将所有直接赋给用户的权限和用户默认角色中的权限赋给用户。)
    sql>set role role1;//使role1生效
    sql>set role role,role2;//使role1,role2生效
    sql>set role role1 identified by password1;//使用带有口令的role1生效
    sql>set role all;//使用该用户的所有角色生效
    sql>set role none;//设置所有角色失效
    sql>set role all except role1;//除role1外的该用户的所有其它角色生效。
    sql>select * from SESSION_ROLES;//查看当前用户的生效的角色。

    8.修改指定用户,设置其默认角色
    sql>alter user user1 default role role1;
    sql>alter user user1 default role all except role1;
    详见oracle参考文档

    9.删除角色
    sql>drop role role1;
    角色删除后,原来拥用该角色的用户就不再拥有该角色了,相应的权限也就没有了。
     
    说明:
    1)无法使用WITH GRANT OPTION为角色授予对象权限
    2)可以使用WITH ADMIN OPTION 为角色授予系统权限,取消时不是user用户角色权限grant 

    一、用户

    创建用户的语句
    create user  用户名
    identified by  密码(不要加引号)
    default tablespace 默认表空间名 quota 5M on 默认表空间名
    [temporary tablespace 临时表空间名]
    [profile 配置文件名]                                          //配置文件
    [default role 角色名]                                        //默认角色
    [password expire]                                             //密码失效
    [account lock]                                                   //账号锁定
    修改用户
    alter user 用户名 identified by 密码 quota 10M on 表空间名
    alter user 用户名 account lock/unlock
    删除用户
    drop user 用户名 [cascade].如果要删除的用户中有模式对象,必须使用cascade.
    二、概要文件

    资源限制参数:对CPU时间,逻辑读,用户并发会话数,空闲时间,连接时间等数据库和系统资源进行限制。资源参数的值可以是整数,也可以是default或者unlimited。会话级限制是对用户在一个会话过程中所能使用的资源进行限制,调用级限制是对一条SQL语句在执行过程中所能使用的资源进行限制。

    资源限制参数有以下几个:sessions_per_user,cpu_per_session/call, lagical_reads_per_session/call, connect_time, idle_time(会话的空闲时间), composite_limit,private_sga。

    口令管理策略参数包括:failed_Login_attempts,password_lock_time, password_life_time, password_grace_time,password_reuse_time, password_reuse_max,password_verify_function.

    在数据库启动之前,可以通过设置resource limit来决定资源限制的状态。默认是false,不启用。在数据库启动后,可以使用alter system来改变资源限制的状态。alter system set resource limit = true/false.

    创建概要文件,可以使用create profile profilename limit [parameters]的语句。
    修改概要文件,可以使用alter profile profilename limit [parameters]
    删除概要文件,drop profile profilename [cascade 如果已经分配给某个用户]

    下面的视图是数据库用户和配置文件信息:
    DBA_USERS     所有用户,
    all_users     当前用户能看到的所有用户,
    user_users     描述当前用户,
    dba_ts_quotas    描述用户的表空间限额,
    user_ts_quotas    描述具体用户的表空间限额,
    user_password_limits 当前用户的口令概要文件参数,
    user_resource_limits 当前用户的资源限制,
    DBA_profiles    所有的概要文件及其限制,
    resource_cost    每个资源的开销,
    V_$session     每个当前会话的会话信息,
    v_$sesstat     用户会话的统计数据,
    v_$_statname, proxy_users可以呈现其他身份的用户.

    三、权限

          系统权限是执行一种特殊动作或在对象类型上执行一种特殊动作的权利。这些权限可以授权给用户或者角色,不过一般只授予管理人员和应用开发人员,终端用户不需要这些相关功能。获得授权的用户可以将该权限授予其他用户或者角色,也可以从被授权的用户或者角色收回系统权限(不管是不是自己授权的,都可以收回)。
          对象权限是指在指定的表、视图、序列、过程、函数或者包上执行特殊动作的权力。对于不同类型的对象,有不同的对象权限。像聚集,索引,触发器,数据库链等没有相关的对象权限,它们由系统权限控制。模式的所有者对模式中的对象具有全部对象权限。这些对象的所有者可将这些对象上的任何对象权限授予其他用户。被授权的那些用户可以将获得的权限继续授权给其他人。

    四、角色

    角色是相关权限的命名组,可以授权给用户或者角色,但不能出现循环授权
    任何角色都可授权给任何数据库用户
    一个角色可以被授予系统权限,或者对象权限
    角色不包含在任何模式中,所以建立角色的用户被删除后,角色不会受到影响
    创建角色的语句是    create role 角色名
    grant {select on tablename} to rolename为该角色授予一些对象权限和系统权限。角色也需要认证,不过创建角色时默认是不认证的。可以用identified by子句来加上认证
    oracle事先定义了五个角色。conncet具有创建表、视图、序列等权限。resource具有创建过程,触发器,表,序列等权限,dba具有全部系统权限,exp_full_database和mp_full_database具有卸出与装入数据库的权限。可以查询sys_dbs,sys_privs可以了解各种角色拥有的权限。
    下面是数据库中有关权限和角色的视图:
    dba col privs                   描述db中所有列对象的授权,就是具体到某个字段的那些授权    
    all col privs                      描述当前用户或者具有public权限用户的所有列对象授权     
    user col privs                   描述列对象权限,这些权限的授予者或者被授予者,是当前用户。
    all col privs made           描述列对象权限,这些权限的所有者或者授予者是当前用户
    user col privs made        描述列对象权限,这些权限的授予者是当前用户,
    all col privs recd             描述列对象权限,这些权限的被授予者是当前用户或者public
    user col privs recd          描述列对象权限,这些权限的被授予者是当前用户
    dba tab privs                   数据库中所有表的授权
    all tab privs                     描述表权限,这些权限的授予者是当前用户或者public
    user tab privs                  列出当前用户是其被授予者所有对象的授权
    all tab privs made           描述当前用户所做的,或者在当前用户所拥有的对象上的对象授权
    user tab privs made        列出在当前用户所拥有的所有对象上的授权
    all tab privs recd             描述对象授权,这些授权的被授予者是当前用户或者public
    user tab privs recd          描述对象授权,这些授权的被授予者是当前用户
    dba roles                       数据库中存在的所有角色             //没有找到这个视图
    dba role/sys privs              授予给用户或角色的角色/系统权限
    user role/sys privs             授予给当前用户的角色/系统权限
    role role privs                 授予给其他角色的角色,只是该用户可以访问的角色信息
    role sys privs                  授予给角色的系统权限的信息,提供的只是该用户可以访问的信息
    role tab privs                  授予给角色的对象权限的信息,提供的只是该用户可以访问的信息
    session privs/roles             用户当前激活的权限和角色

    五、角色和权限的操作

    授予权限或者角色

    grant 系统权限 to 用户名 [with admin option].带上with子句,可以让该用户有权限把系统权限授予其他用户
    grant 对象权限/all to 用户名[with grant option].带上with子句,可以让该用户有权限把对象权限授予其他用户
    有三类对象权限可以授予表或者视图的字段,分别是insert,update,references。比如grant select, insert(字段名),update(字段名) on 表名 to 用户名 with grant option.   
    grant 角色名 to 用户名 [with admin/grant option]. 可以把角色授予用户。如果使用了with admin option 子句,该用户可以从任何具有该角色的用户那里收回角色,也可以删除或者修改这个角色。
    在同一条grant语句中,可以同时为一个用户授予系统权限和角色,但是不能同时授予对象权限和角色。
    收回权限

    revoke select, update on 表名 from 用户名
    也可以用all 或者all privileges将某个对象所有的对象权限都收回。
    激活与禁用角色
            当用户连接到数据库时,只有他的默认角色是激活的,可以用  alter user 用户名 default role  角色名  改变默认角色。还可以用set role 激活或禁用自己拥有的角色。

    创建用户;
    create user
    例子:
    create user lv identified by m215957055;
    其中lv是用户名,m215957055是用户名。但是要注意的是,创建之后你是连不上这个数据库的,以为你还没有赋给他权限,
    下面让我们来了解一下:
    一、权限分类:
    系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。
    实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。
    二、系统权限管理:
    1、系统权限分类:
    DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
    RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
    CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
    对于普通用户:授予connect, resource权限。
    对于DBA管理用户:授予connect,resource, dba权限。
    三,数据对象
    指的是例如表,视图,过程 。。。。。。等
    四,角色
    预定义角色:安装时系统配置
    自定义角色:自己写的角色,交授权限。
    赋予权限的指定命令
    例子:grant connect to 新建用户;连接权限。
    回收权限指定命令:revoke select on emp to 用户;这是回收用户对emp表的查询权限
    权限向下传递
    例子:grant select on emp to 用户 with grant option;

    (一)什么叫用户(user):
    A user is a name defined in the database that can connect to and access objects.
    用户是用连接数据库和访问数据库对象的。(用户是用来连接数据库访问数据库)。
    (二)什么叫模式(schema):
    A schema is a collection of database objects (used by a user.).
    Schema objects are the logical structures that directly refer to the database’s data.
    模式是数据库对象的集合。模式对象是数据库数据的逻辑结构。
    (把数据库对象用模式分开成不同的逻辑结构)。
    (三)用户(user)与模式(schema)的区别:
    Schemas and users help database administrators manage database security.
    用户是用来连接数据库对象。而模式用是用创建管理对象的。模式跟用户在Oracle 是一对一的关系。
    ( 不过db2却不同,db2 一个用户可以对应多个模式,db2 用户是系统,他首先必须获得系统用户才能成为数据库用户,也就是数据库用户就是系统用户,只有模式才是数据库类似用户。有兴趣可以去研究。这里就不跑题了,这也是db2特有的)。
    从定义中我们可以看出schema为数据库对象的集合,为了区分各个集合,我们需要给这个集合起个名字,这些名字就是我们在企业管理器的方案下看到的许多 类似用户名的节点,这些类似用户名的节点其实就是一个schema,schema里面包含了各种对象如tables, views, sequences, stored procedures, synonyms, indexes, clusters, and database links。一个用户一般对应一个schema,该用户的schema名等于用户名,并作为该用户缺省schema。这也就是我们在企业管理器的方案下看 到schema名都为数据库用户名的原因。Oracle数据库中不能新创建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决 (Oracle中虽然有create schema语句,但是它并不是用来创建一个schema的),在创建一个用户的同时为这个用户创建一个与用户名同名的schem并作为该用户的缺省 shcema。即schema的个数同user的个数相同,而且schema名字同user名字一一 对应并且相同,所有我们可以称schema为user的别名,虽然这样说并不准确,但是更容易理解一些。一个用户有一个缺省的schema,其 schema名就等于用户名,当然一个用户还可以使用其他的schema。如果我们访问一个表时,没有指明该表属于哪一个schema中的,系统就会自动 给我们在表上加上缺省的sheman名。比如我们在访问数据库时,访问scott用户下的emp表,通过select * from emp; 其实,这sql语句的完整写法为select * from scott.emp。在数据库中一个对象的完整名称为schema.object,而不属user.object。类似如果我们在创建对象时不指定该对象 的schema,在该对象的schema为用户的缺省schema。这就像一个用户有一个缺省的表空间,但是该用户还可以使用其他的表空间,如果我们在创 建对象时不指定表空间,则对象存储在缺省表空间中,要想让对象存储在其他表空间中,我们需要在创建对象时指定该对象的表空间。
    总结:对oracle 来说,用户就是模式。模式就是用户。(以上全是废话)。

    (四)权限。一个用户权限由系统权限。和用户对象权限组成。

    1.系统权限:
    系统权限包括:(由于太多,为了文章的篇幅所以只把查询语句提供。你提供具体的系统全部权限了)
    SQL> select distinct PRIVILEGE from dba_sys_privs order by PRIVILEGE;

    与系统权限相关的视图:
    dba_sys_privs(所有系统权限)
    user_sys_privs.(用户拥有的系统权限)。

    用户对象权限:
    一个模式创建的对象,或者其他模式赋予的并授予了管理劝降(adm)的对象。如:
    grant select,insert ,update ,delete on table_name to schema_name.这样就授予了一个用户对象权限。

    与用户权限相关的视图。
    user_tab_privs;(这世界上最恶心的试图,初一看还以为就只针对表的用户权限,不然其实他包括过程,包体,函数,试图等对象所有对象的用户权限,真想把oracle 命名的那仁兄给阉了,浪费我宝贵的时间)。
    如:SQL> select * from USER_TAB_PRIVS where GRANTOR='TESTDB' AND PRIVILEGE='EXECUTE';

    系统权限与用户对象权限的区别:
    系统权限是广义的。是相对整个对象的。而用户对象权限他只针对单个或者,一些对象。

    系统权限例子:
    grant create table to user.

    用户对象权限例子:
    grant select on table_name to schema_name;
    与用户对象权限相关的试图:

    角色:

    角色就是一些权限的集合:
    为了方便管理,我们把某些常用的权限组织成一个集合。赋予角色。然后把角色赋予用户。提高管理的效率。例如创建一个数据库某个模式,某几个用户下的的只读用户,可读可插入用户,等等。在实质生产中还是有很大的意义。

    1.创建角色,不指定密码:
    create role testrole;

    2.创建角色,指定密码:
    create role testrole identified by tanfufa;
    3.修改角色:
    alter role testrole identified by luqiaoling;
    给角色授予权限。
    Grant select on t1 to testrole;
    Grant select on t2 to testrole;
    Grant select on t3 to testrole;

    把角色赋予用户:(特别说明,授予角色不是实时的。如下:)
    grant testrole to testdb;

    起用角色:给用户赋予角色,角色并不会立即起作用。
    1.角色不能立即起作用。必须下次断开此次连接,下次连接才能起作用。
    2.或者执行命令:有密码的角色set role testrole   identified by tanfufa 立即生效;
    3.无密码的角色:set role testrole;或set   role all except rolename_withpassword.

    把角色赋予角色,角色嵌套。
    create role testrole1;
    grant select on t1 to testrole1;
    create role testrole2;
    grant testrole1 to testrole2;
    grant r2 to testdb;

    角色管理:
    与角色有关系的视图:
    所有角色:
    select * from dba_roles;

    当前用户scott有哪些角色:
    select * from session_roles;


    建立角色模板:只举一个例子。大家去触类旁通。
    只读用户角色的建立的脚本:
    1.授予某模式下对象读权限给角色。
    SET PAGESIZE 0
    SET FEEDBACK OFF
    SET VERIFY OFF
    SPOOL s.sql
    SELECT 'GRANT SELECT ON "' || u.object_name || '" TO &1;'
    FROM user_objects u
    WHERE   u.object_type IN ('TABLE','VIEW','SEQUENCE')
    AND NOT EXISTS (SELECT '1'
                   FROM all_tab_privs a
                   WHERE   a.grantee = UPPER('&1')
                   AND a.privilege   = 'SELECT'
                   AND a.table_name = u.object_name);
    SPOOL OFF
    -- Comment out following line to prevent immediate run @s.sql
    SET PAGESIZE 14
    SET FEEDBACK ON
    SET VERIFY ON

    2.为模式权限对象创建同意词。

    SET PAGESIZE 0
    SET FEEDBACK OFF
    SET VERIFY OFF
    SPOOL temp.sql
    SELECT 'CREATE SYNONYM "' || a.table_name || '" FOR "' || a.owner || '"."' || a.table_name || '";'
    FROM all_tables a
    WHERE   NOT EXISTS (SELECT '1'
                   FROM user_synonyms u
                   WHERE   u.synonym_name = a.table_name
                   AND u.table_owner   = UPPER('&1'))
    AND a.owner = UPPER('&1');

    SPOOL OFF
    -- Comment out following line to prevent immediate run
    @temp.sql
    SET PAGESIZE 14
    SET FEEDBACK ON
    SET VERIFY ON

    1、查看当前用户拥有的角色权限信息
      select * from role_sys_privs;
      2、查看所有用户:
      select * from all_users;
      3、查看当前用户的详细信息:
      select * from user_users;
      4、查看所有角色:
      select * from dba_roles;
      5、查看当前用户的角色信息:
      select * from user_role_privs;
      6,,查询数据库上操作的所有命令,需要有dba权限
      select * from v$sqlarea t order by t.FIRST_LOAD_TIME desc

    查看当前用户的缺省表空间
    SQL>select username,default_tablespace from user_users;
    查看当前用户的角色
    SQL>select * from user_role_privs;
    查看当前用户的系统权限和表级权限
    SQL>select * from user_sys_privs;
    SQL>select * from user_tab_privs;
    查看当前用户的缺省表空间

    SQL>select username,default_tablespace from user_users;

    查看当前用户的角色

    SQL>select * from user_role_privs;

    查看当前用户的系统权限和表级权限

    SQL>select * from user_sys_privs;

    SQL>select * from user_tab_privs;

    三、3种标准角色
    Oracle为了兼容以前的版本,提供了三种标准的角色(role):CONNECT、RESOURCE和DBA。
    1. CONNECT Role(连接角色)
     临时用户,特别是那些不需要建表的用户,通常只赋予他们CONNECTrole。CONNECT是使用Oracle的简单权限,这种权限只有在对其他用户的表有访问权时,包括select、insert、update和delete等,才会变得有意义。拥有CONNECT role的用户还能够创建表、视图、序列(sequence)、簇(cluster)、同义词(synonym )、会话(session)和与其他数据库的链(link)。
    2. RESOURCE Role(资源角色)
    更可靠和正式的数据库用户可以授予RESOURCE role。RESOURCE提供给用户另外的权限以创建他们自己的表、序列、过程(procedure)、触发器(trigger)、索引(index)和簇(cluster)。
    3. DBA Role(数据库管理员角色)
    DBA role拥有所有的系统权限----包括无限制的空间限额和给其他用户授予各种权限的能力。SYSTEM由DBA用户拥有。下面介绍一些DBA经常使用的典型权限。
    (1)grant(授权)命令
     下面对刚才创建的用户user01授权,命令如下:
      grant connect, resource to user01;
    (2)revoke(撤消)权限
    已授予的权限可以撤消。例如撤消(1)中的授权,命令如下:
    revoke connect, resource from user01;
    一个具有DBA角色的用户可以撤消任何别的用户甚至别的DBA的CONNECT、RESOURCE 和DBA的其他权限。当然,这样是很危险的,因此,除非真正需要,DBA权限不应随便授予那些不是很重要的一般用户。
    撤消一个用户的所有权限,并不意味着从Oracle中删除了这个用户,也不会破坏用户创建的任何表;只是简单禁止其对这些表的访问。其他要访问这些表的用户可以象以前那样地访问这些表。
    四、创建角色
    除了前面讲到的三种系统角色----CONNECT、RESOURCE和DBA,用户还可以在Oracle创建自己的role。用户创建的role可以由表或系统权限或两者的组合构成。为了创建role,用户必须具有CREATE ROLE系统权限。下面给出一个create role命令的实例:
    create role STUDENT;
    这条命令创建了一个名为STUDENT的role。
    一旦创建了一个role,用户就可以给他授权。给role授权的grant命令的语法与对对用户的语法相同。在给role授权时,在grant命令的to子句中要使用role的名称,如下所示:
    grant select on CLASS to STUDENT;
    现在,拥有STUDENT角色的所有用户都具有对CLASS表的select权限。
    五、删除角色
    要删除角色,可以使用drop role命令,如下所示:
    drop role STUDENT;
    指定的role连同与之相关的Oracle用户权限将从数据库中全部删除。

    下面是sql plus中常用的几个命令:

    oracle打开命令行的方式:
    在运行里输入:sqlplusw 或者sqlplus(传统的命令行)

    怎么设置能让SQLPLUS查询出来的结果集好看一些?

    现在是一行数据分了很多行,不好看

    ------解决方案--------------------

    <1> SQL code 可以用第三方工具,PL/SQL DEVELOPER!


    <2> 常用的格式化命令就是设置每行的宽度和每列的宽度!

    set linesize 120 行宽度默认是80个字符;

    col 列名 for a30其中a30是宽度,可以设置一列的宽度,或者 col colname format a20;

    col userid for a30 或者 col userid format a40

    1.set linesize 300(表示一行为300个字符)
    set linesize可以设置一行显示的字符数,默认情况下为80个字符

    2.l(list)
    可以显示缓冲区中的最后执行的内容

    3.run / r
    以上三个命令功能是一致的,重新运行缓存区中的语句

    4.save
    save可以将最后一次在缓存区中执行的语句保存到文件
    例如:save e:\emp.sql

    5.get
    get可以将文件中的sql语句放到缓存区中,采用/或r或run,可以执行

    6.ed(edit)
    ed可以采用记事本来编辑缓存区中的内容

    7.如何直接执行sql脚本:
    @e:\sql\yy.sql

    1. sys和system用户的区别
    system用户只能用normal身份登陆em。除非你对它授予了sysdba的系统权限或者syspoer系统权限。
    sys用户具有“SYSDBA”或者“SYSOPER”权限,登陆em也只能用这两个身份,不能用normal。
    --
    最重要的区别,存储的数据的重要性不同
    sys所有oracle的数据字典的基表和视图都存放在sys用户中,这些基表和视图对于oracle的运行是至关重要的,由数据库自己维护,任何用户都不能手动更改。sys用户拥有dba,sysdba,sysoper等角色或权限,是oracle权限最高的用户。
    system用户用于存放次一级的内部数据,如oracle的一些特性或工具的管理信息。system用户拥有普通dba角色权限。

    “SYSOPER”权限,即数据库操作员权限,权限包括:
      打开数据库服务器   关闭数据库服务器
      备份数据库       恢复数据库
      日志归档         会话限制
    “SYSDBA”权限,即数据库管理员权限,权限包括:
      打开数据库服务器   关闭数据库服务器
      备份数据库       恢复数据库
      日志归档       会话限制
      管理功能       创建数据库

     2.normal 、sysdba、 sysoper区别
    normal 是普通用户,只有通过被sys授权之后才可以对数据库进行操作
    sysdba拥有最高的系统权限
    sysoper主要用来启动、关闭数据库,sysoper 登陆后用户是 public
    sysdba登陆后是sys,而且只能是SYS登录sysdba.
    [html] view plaincopy
    SQL> conn / as sysdba  
    已连接。  
    SQL> grant sysoper to test;  
    授权成功。  
    SQL> conn test/test as sysoper;  
    已连接。  
    SQL> show user  
    USER 为"PUBLIC"  
    SQL> conn test/test as sysdba  
    已连接。  
    SQL> show user  
    USER 为"SYS"  
    SQL>  


    系统权限
    sysdba
    sysoper
    区别
    Startup(启动数据库)
    startup
    Shutdown(关闭数据库)
    shutdown
    alter database open/mount/backup
    alter database open/mount/backup
    改变字符集
    none
    create database(创建数据库)
    None不能创建数据库
    drop database(删除数据库)
    none
    create spfile
    create spfile
    alter database archivelog(归档日志)
    alter database archivelog
    alter database recover(恢复数据库)
    只能完全恢复,不能执行不完全恢复
    拥有restricted session(会话限制)权限
    拥有restricted session权限
    可以让用户作为sys用户连接
    可以进行一些基本的操作,但不能查看用户数据
    登录之后用户是sys
    登录之后用户是public
     

     

    system如果正常登录,它其实就是一个普通的dba用户,但是如果以as sysdba登录,其结果实际上它是作为sys用户登录的,这一点类似Linux里面的sudo的感觉,从登录信息里面我们可以看出来。因此在as sysdba连接数据库后,创建的对象实际上都是生成在sys中的。其他用户也是一样,如果 as sysdba登录,也是作为sys用户登录的,看以下实验:
    [html] view plaincopy
    SQL> create user strong identified by strong;  
    用户已创建。  
    SQL> conn strong/strong@magick as sysdba;  
    已连接。  
    SQL> show user;  
    USER 为 "SYS"  
    SQL> create table test(a int);  
    表已创建。  
    SQL> select owner from dba_tables where table_name='test';  
    未选定行 //因为创建表时oracle自动转为大写,所以用小写查的时候是不存在的;  
    SQL> select owner from dba_tables where table_name='TEST';  
    OWNER  
    ------------------------------  
    SYS  


    3.dba和sysdba的区别
    dba、sysdba这两个系统角色有什么区别呢 
    在说明这一点之前我需要说一下oracle服务的创建过程
    ·创建实例
    ·启动实例
    ·创建数据库(system表空间是必须的)
    启动过程
    ·实例启动
    ·装载数据库
    ·打开数据库
    sysdba,是管理oracle实例的,它的存在不依赖于整个数据库完全启动,
    只要实例启动了,它就已经存在,以sysdba身份登陆,装载数据库、打开数据库
    只有数据库打开了,或者说整个数据库完全启动后,dba角色才有了存在的基础,dba只是个角色而已.

    4.在查询用户角色表的时候,没有看到sysdba等角色,为什么?
    [html] view plaincopy
    sys@WENCHAOD> select role from dba_roles order by role    
      2  ;  
      
    ROLE  
    ------------------------------  
    ADM_PARALLEL_EXECUTE_TASK  
    APEX_ADMINISTRATOR_ROLE  
    AQ_ADMINISTRATOR_ROLE  
    AQ_USER_ROLE  
    AUTHENTICATEDUSER  
    CONNECT  
    CSW_USR_ROLE  
    CTXAPP  
    CWM_USER  
    DATAPUMP_EXP_FULL_DATABASE  
    DATAPUMP_IMP_FULL_DATABASE  
    DBA  
    DBFS_ROLE  
    DELETE_CATALOG_ROLE  
    EJBCLIENT  
    EXECUTE_CATALOG_ROLE  
    EXP_FULL_DATABASE  
    GATHER_SYSTEM_STATISTICS  
    GLOBAL_AQ_USER_ROLE  
    HS_ADMIN_EXECUTE_ROLE  
    HS_ADMIN_ROLE  
    HS_ADMIN_SELECT_ROLE  
    IMP_FULL_DATABASE  
    JAVADEBUGPRIV  
    JAVAIDPRIV  
    JAVASYSPRIV  
    JAVAUSERPRIV  
    JAVA_ADMIN  
    JAVA_DEPLOY  
    JMXSERVER  
    LOGSTDBY_ADMINISTRATOR  
    MGMT_USER  
    OEM_ADVISOR  
    OEM_MONITOR  
    OLAPI_TRACE_USER  
    OLAP_DBA  
    OLAP_USER  
    OLAP_XS_ADMIN  
    ORDADMIN  
    OWB$CLIENT  
    OWB_DESIGNCENTER_VIEW  
    OWB_USER  
    RECOVERY_CATALOG_OWNER  
    RESOURCE  
    SCHEDULER_ADMIN  
    SELECT_CATALOG_ROLE  
    SPATIAL_CSW_ADMIN  
    SPATIAL_WFS_ADMIN  
    WFS_USR_ROLE  
    WM_ADMIN_ROLE  
    XDBADMIN  
    XDB_SET_INVOKER  
    XDB_WEBSERVICES  
    XDB_WEBSERVICES_OVER_HTTP  
    XDB_WEBSERVICES_WITH_PUBLIC  
      
    55 rows selected.  
      
    sys@WENCHAOD>   
    解释:
    dba是Oracle里的一种对象,Role 和User一样,是实实在在存在在Oracle里的物理对象,而sysdba是指的一种概念上的操作对象,在Oracle数据里并不存在。 
    所以说这两个概念是完全不同的。dba是一种role对应的是对Oracle实例里对象的操作权限的集合,而sysdba是概念上的role是一种登录认证时的身份标识而已。 
    [html] view plaincopy
    --grant dba 和grant sysdba的差别   
    --dba是正真的role,所以grant后在dba_role_privs里有记录,而revoke后就没有了   
      
    SQL>  grant dba to testuser;   
    SQL> select * from dba_role_privs where grantee = ‘TESTUSER’;   
    GRANTEE                        GRANTED_ROLE                  ADM DEF   
    —————————— —————————— — —   
    TESTUSER                      RESOURCE                      NO  YES   
    TESTUSER                      CONNECT                        NO  YES   
    TESTUSER                      DBA                            NO  YES   
    SQL>  revoke dba from testuser;   
    SQL> select * from dba_role_privs where grantee = ‘TESTUSER’;   
    GRANTEE                        GRANTED_ROLE                  ADM DEF   
    —————————— —————————— — —   
    TESTUSER                      RESOURCE                      NO  YES   
    TESTUSER                      CONNECT                        NO  YES   
      
    --对于sysdba是不会出现这个情况的,因为他不是正真的role   
    SQL> grant sysdba to testuser;   
    SQL> select * from dba_role_privs where grantee = ‘TESTUSER’;   
    GRANTEE                        GRANTED_ROLE                  ADM DEF   
    —————————— —————————— — —   
    TESTUSER                      RESOURCE                      NO  YES   
    TESTUSER                      CONNECT                        NO  YES   

    那么这个是sysdba是这么记录的叻, 
    我在一个文章和帖子里对对sysdba的登录有过详细的叙述 
    对了,sysdba是登录时候需要的他是和remote_login_passwordfile关联的 
    我们可以查询v$pwfile_users; 
    如下: 
    SQL> select * from v$pwfile_users; 
    USERNAME                      SYSDB SYSOP 
    —————————— —– —– 
    SYS                            TRUE  TRUE 
    SYSTEM                        TRUE  FALSE 
    TESTUSER                      TRUE  FALSE 
    当你grant sysdba后,在这里就多了一条 
    下面我们revoke一下,再来看 
    SQL> revoke sysdba from testuser; 
    SQL> select * from v$pwfile_users; 
    USERNAME                      SYSDB SYSOP 
    —————————— —– —– 
    SYS                            TRUE  TRUE 
    SYSTEM                        TRUE  FALSE 
    没有叻。 
    所以在这里dba和sysdba是根本不同概念了。 
    有关sysdba登录的解释可以查看帖子 
    http://topic.csdn.net/u/20090429/12/6d495d87-9f04-4828-ab2a-cb186ba8c5de.html

    5.Oracle数据库登录一些命令及解释
    1、启动oracle数据库: 
    从root切换到oracle用户进入:
    su - oracle

    进入sqlplus环境,nolog参数表示不登录:
    sqlplus /nolog

    以管理员模式登录:
    sqlplus / as sysdba

    启动数据库
    startup;
    停止数据库
    shutdown immediate
    远程连接数据库
    sqlplus /nolog
    conn sys/sys@ip:1521/orainstance as sysdba
    也可以直接运行:
    dbstart
    #启动数据库的脚本
    dbshut
    #停止数据库的脚本

    2、数据库监听:
    启动监听服务:
    lsnrctl start
    停止监听服务:
    lsnrctl stop
    查看监听状态:
    lsnrctl status
    3、用户权限管理:

    注:以下命令都需要DBA权限。
    创建用户:
    create user ittbank identified by 123456 ;
    赋予用户的表空间权限:
    alter user ittbank default tablespace ittbank;;
    或者两条命令合并为:
    create user ittbank identified by 123456 default tablespace ittbank;

    注:刚刚创建完的新用户是没有任何权限的,甚至连登录数据库的权限都没有。这时使用conn 用户名/密码 会提示没有权限。在新建一个用户之后还要对这个用户进行授权操作。当然是要使用有能力授权的用户,如sys、system。角色是指由系统权限集合。通常给某个用户授予权限时如果没有角色存在的话,那么需要一条一条的操作,角色的存在就是使得授权变得很方便。通常一个角色由多个系统权限组成。常用的角色有三个connect(7种权限)、dba、resource(在任何表空间建表)。

    授予用户管理权限:
    grant connect,resource,dba to ittbank ;

    删除用户
    drop user“name”cascade;
    注:cascade参数是级联删除该用户所有对象,经常遇到如用户有对象而未加此参数则用户删不了的问题,所以习惯性的加此参数。“name”的引号有无都是一样的。

    修改用户密码
    password ittbank( 在用户已经连接的情况下 )或者
    alter user ittbank identified by newpassword
    注意:在给其他用户修改密码时,需要具有DBA的权限或拥有alter user的系统权限。

    查看当前用户的角色
    select * from user_role_privs;
    select * from session_privs;
    查看当前用户的系统权限和表级权限
    select * from user_sys_privs;
    select * from user_tab_privs;
    查询用户表
    select name from dba_users;
    修改用户口令
    alter user "name" identified by "password";
    显示当前用户
    show user;


    6.ORACLE用户权限管理笔记整理
    select username from dba_users;  查询系统所有用户
    select * from dba_users where username = 'XXXX';查询用户相关信息
    select * from dba_roles;    查询系统所有角色

    DBA_ROLE_PRIVS        查询某个用户具有的角色或者某个角色下的有哪些用户
    select * from dba_role_privs wheregrantee ='SYS';
    select * fromdba_role_privs where granted_role ='RESOURCE';

    DBA_SYS_PRIVS   查询某个用户具有的系统权限
    select grantee,privilege from dba_sys_privs where grantee='XXXX';

    ROLE_SYS_PRIVS显示授予角色的系统权限
    select* from role_sys_privs where role = 'RESOURCE';查询RESOURCE角色相关的权限
    ROLE_TAB_PRIVS显示授予角色的表权限
    管理用户、角色和权限的DBA视图:
    DBA_USERS         提供用户的信息
    DBA_ROLES         显示数据库中所有角色
    DBA_COL_PRIVS     显示列级对象授权
    DBA_ROLE_PRIVS    显示用户及其角色
    DBA_SYS_PRIVS     显示被授予系统权限的用户
    DBA_TAB_PRIVS     显示用户及他们在表上的权限
    ROLE_ROLE_PRIVS   显示授予角色的角色
    ROLE_SYS_PRIVS    显示授予角色的系统权限
    ROLE_TAB_PRIVS    显示授予角色的表权限
    SESSION_PRIVS     显示允许用户使用的权限
    SESSION_ROLES     显示当前允许用户使用的角色

    select * from session_privs;查询用户本身拥有的权限
    select * from user_role_privs;查询用户本身拥有的角色
    select * from dba_sys_privs where grantee='CONNECT'; 查询角色所拥有的权限
    select * from role_sys_privs where role='CONNECT';查询角色所拥有的权限

    7.权限讲解
     
    (
    首先我应该分清权限和角色,大致讲讲
    权限oracle提供两种权限(系统权限sys privileges和对象(实体)权限object privileges) 
    角色:是具有名称的一组系统权限和对象权限的集合
    )
    一、权限分类:
    系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。
    实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。
     
    二、系统权限管理:
    1、系统权限分类:
    DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
    RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
    CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
    对于普通用户:授予connect, resource权限。
    对于DBA管理用户:授予connect,resource, dba权限。
     
    2、系统权限授权命令:
    [系统权限只能由DBA用户授出:sys, system(最开始只能是这两个用户)]
    授权命令:SQL> grant connect, resource, dba to 用户名1 [,用户名2]...;
    [普通用户通过授权可以具有与system相同的用户权限,但永远不能达到与sys用户相同的权限,system用户的权限也可以被回收。]
    例:
    SQL> connect system/manager
    SQL> Create user user50 identified by user50;
    SQL> grant connect, resource to user50;
    查询用户拥有哪里权限:
    SQL> select * from dba_role_privs;
    SQL> select * from dba_sys_privs;
    SQL> select * from role_sys_privs;
    删除用户:SQL> drop user 用户名 cascade;  //加上cascade则将用户连同其创建的东西全部删除
     
    3、系统权限传递:
    增加WITH ADMIN OPTION选项,则得到的权限可以传递。
    SQL> grant connect, resorce to qwith admin option;  //可以传递所获权限。
     
    4、系统权限回收:系统权限只能由DBA用户回收
    命令:SQL> Revoke connect, resource from user50;
     
    说明:
    1)如果使用WITH ADMIN OPTION为某个用户授予系统权限,那么对于被这个用户授予相同权限的所有用户来说,取消该用户的系统权限并不会级联取消这些用户的相同权限。
    2)系统权限无级联,即A授予B权限,B授予C权限,如果A收回B的权限,C的权限不受影响;系统权限可以跨用户回收,即A可以直接收回C用户的权限。
     
    三、实体权限管理
    1、实体权限分类:select, update, insert, alter, index, delete, all  //all包括所有权限
    execute  //执行存储过程权限
    user01:
    SQL> grant select, update, insert on product to user02;
    SQL> grant all on product to user02;
    user02:
    SQL> select * from user01.product;
    // 此时user02查user_tables,不包括user01.product这个表,但如果查all_tables则可以查到,因为他可以访问。

    2. 将表的操作权限授予全体用户:
    SQL> grant all on product to public;  // public表示是所有的用户,这里的all权限不包括drop。
    [实体权限数据字典]:
    SQL> select owner, table_name from all_tables; // 用户可以查询的表
    SQL> select table_name from user_tables;  // 用户创建的表
    SQL> select grantor, table_schema, table_name, privilege from all_tab_privs; // 获权可以存取的表(被授权的)
    SQL> select grantee, owner, table_name, privilege from user_tab_privs;   // 授出权限的表(授出的权限)
     
    3. DBA用户可以操作全体用户的任意基表(无需授权,包括删除):
    DBA用户:
    SQL> Create table stud02.product(
     id number(10),
     name varchar2(20));
    SQL> drop table stud02.emp;
    SQL> create table stud02.employee
     as
     select * from scott.emp;
     
    4. 实体权限传递(with grant option):
    user01:
    SQL> grant select, update on product to user02 with grant option; // user02得到权限,并可以传递。
     
    5. 实体权限回收:
    user01:
    SQL>Revoke select, update on product from user02;  //传递的权限将全部丢失。
     
    说明
    1)如果取消某个用户的对象权限,那么对于这个用户使用WITH GRANT OPTION授予权限的用户来说,同样还会取消这些用户的相同权限,也就是说取消授权时级联的。
    总结:
    --查看用户系统权限
      select * from dba_sys_privs; 
      select * from session_privs; 
      select * from user_sys_privs; 
    --查看用户对象权限
      select * from dba_tab_privs; 
      select * from all_tab_privs; 
      select * from user_tab_privs; 
    8.Oracle 用户管理
    一、创建用户的Profile文件
    SQL> create profile student limit  // student为资源文件名
     FAILED_LOGIN_ATTEMPTS  3  //指定锁定用户的登录失败次数
     PASSWORD_LOCK_TIME 5  //指定用户被锁定天数
     PASSWORD_LIFE_TIME 30  //指定口令可用天数
     
    二、创建用户
    SQL> Create User username
     Identified by password
     Default Tablespace tablespace
     Temporary Tablespace tablespace
     Profile profile
     Quota integer/unlimited on tablespace;
    例:
    SQL> Create user acc01
     identified by acc01   // 如果密码是数字,请用双引号括起来
     default tablespace account
     temporary tablespace temp
     profile default
     quota 50m on account;
    SQL> grant connect, resource to acc01;
  •  查询用户缺省表空间、临时表空间
  • SQL> select username, default_tablespace, temporary_tablespace from dba_users;
  •  查询系统资源文件名:
  • SQL> select * from dba_profiles;
    资源文件类似表,一旦创建就会保存在数据库中。
    SQL> select username, profile, default_tablespace, temporary_tablespace from dba_users;
    SQL> create profile common limit
     failed_login_attempts 5
     idle_time 5;
     --指定用户资源文件给用户
    SQL> Alter user acc01 profile common;
     
    三、修改用户:
    SQL> Alter User 用户名
     Identified 口令
     Default Tablespace tablespace
     Temporary Tablespace tablespace
     Profile profile
     Quota integer/unlimited on tablespace;
     
    1、修改口令字:
    SQL>Alter user acc01 identified by "12345";
    2、修改用户缺省表空间:
    SQL> Alter user acc01 default tablespace users;
    3、修改用户临时表空间
    SQL> Alter user acc01 temporary tablespace temp_data;
    4、强制用户修改口令字:
    SQL> Alter user acc01 password expire;
    5、将用户加锁
    SQL> Alter user acc01 account lock;  // 加锁
    SQL> Alter user acc01 account unlock;  // 解锁
     
    四、删除用户
    SQL>drop user 用户名;  //用户没有建任何实体
    SQL> drop user 用户名 CASCADE;  // 将用户及其所建实体全部删除
    *1. 当前正连接的用户不得删除。

    五、监视用户:
    1、查询用户会话信息:
    SQL> select username, sid, serial#, machine from v$session;
    2、删除用户会话信息:
    SQL> Alter system kill session 'sid, serial#';
    3、查询用户SQL语句:
    SQL> select user_name, sql_text from v$open_cursor;

    1.授权 
    grant <privilege1,privilege2,....> to <user_name> [with admin|grant option];  
    如果需要让user_name同时拥有分配这些权限的权限可以添加:
    With admin option: 可以分配系统权限。
    With grant option: 可以分配对象权限。
    2.授权撤销  
    revoke <privilege1,privilege2,...>  from <user_name>; 

     
    9.Oracle 角色管理
    一、何为角色
      角色。角色是一组权限的集合,将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限。
    二、系统预定义角色
      预定义角色是在数据库安装后,系统自动创建的一些常用的角色。下介简单的介绍一下这些预定角色。角色所包含的权限可以用以下语句查询:
    sql>select * from role_sys_privs where role='角色名';
    1.CONNECT, RESOURCE, DBA
    这些预定义角色主要是为了向后兼容。其主要是用于数据库管理。oracle建议用户自己设计数据库管理和安全的权限规划,而不要简单的使用这些预定角色。将来的版本中这些角色可能不会作为预定义角色。
    2.DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE, SELECT_CATALOG_ROLE
    这些角色主要用于访问数据字典视图和包。
    3.EXP_FULL_DATABASE, IMP_FULL_DATABASE
    这两个角色用于数据导入导出工具的使用。 
    4.AQ_USER_ROLE, AQ_ADMINISTRATOR_ROLE
    AQ:Advanced Query。这两个角色用于oracle高级查询功能。
    5. SNMPAGENT
    用于oracle enterprise manager和Intelligent Agent
    6.RECOVERY_CATALOG_OWNER
    用于创建拥有恢复库的用户。关于恢复库的信息,参考oracle文档《Oracle9i User-Managed Backup and Recovery Guide》 
    7.HS_ADMIN_ROLE
    A DBA using Oracle's heterogeneous services feature needs this role to access appropriate tables in the data dictionary.
     
    三、管理角色
    1.建一个角色
    sql>create role role1;
    2.授权给角色
    sql>grant create any table,create procedure to role1;
    3.授予角色给用户
    sql>grant role1 to user1;
    4.查看角色所包含的权限
    sql>select * from role_sys_privs;
    5.创建带有口令以角色(在生效带有口令的角色时必须提供口令)
    sql>create role role1 identified by password1;
    6.修改角色:是否需要口令
    sql>alter role role1 not identified;
    sql>alter role role1 identified by password1;
    7.设置当前用户要生效的角色
    (注:角色的生效是一个什么概念呢?假设用户a有b1,b2,b3三个角色,那么如果b1未生效,则b1所包含的权限对于a来讲是不拥有的,只有角色生效了,角色内的权限才作用于用户,最大可生效角色数由参数MAX_ENABLED_ROLES设定;在用户登录后,oracle将所有直接赋给用户的权限和用户默认角色中的权限赋给用户。)
    sql>set role role1;//使role1生效
    sql>set role role,role2;//使role1,role2生效
    sql>set role role1 identified by password1;//使用带有口令的role1生效
    sql>set role all;//使用该用户的所有角色生效
    sql>set role none;//设置所有角色失效
    sql>set role all except role1;//除role1外的该用户的所有其它角色生效。
    sql>select * from SESSION_ROLES;//查看当前用户的生效的角色。
    8.修改指定用户,设置其默认角色
    sql>alter user user1 default role role1;
    sql>alter user user1 default role all except role1;
    详见oracle参考文档
    9.删除角色
    sql>drop role role1;
    角色删除后,原来拥用该角色的用户就不再拥有该角色了,相应的权限也就没有了。
    说明:
    1)无法使用WITH GRANT OPTION为角色授予对象权限
    2)可以使用WITH ADMIN OPTION 为角色授予系统权限,取消时不是级联

    10.sqlplus / as sysdba方式登录

    以sqlplus / as sysdba方式登录时,采用的是操作系统验证的方式,所以用户名/密码输与不输入是一样的?真的是这样的吗?

    Oracle的用户信息一般来说是保存在数据字典里的,所以常规用户在Oracle数据库没有启动的时候是无法登陆的。但有两类用户例外,这就是具有sysdba或者sysoper权限的用户。Oracle sysdba或者sysoper用户的登陆有两种方式:一是通过OS认证,二是通过密码文件验证。
    究竟使用哪一种验证方式以及能否成功登陆取决于三个方面的因素:
    1. sqlnet.ora中SQLNET.AUTHENTICATION_SERVICES的设置
    2. 参数文件中REMOTE_LOGIN_PASSWORDFILE的设置
    3. 密码文件 PWD%sid%.ora

    Oracle进行权限验证的大致顺序如下:
    1. 根据SQLNET.AUTHENTICATION_SERVICES的值决定是进行os验证还是密码文件验证。
    2. 如果是os验证,根据当前用户的用户组判断是否具有sysdba权限。如果os验证失败,则进行密码文件验证。
    2. 如果是密码文件验证,REMOTE_LOGIN_PASSWORDFILE的值以及密码文件是否存在决定了验证是否成功。
    sqlnet.ora
     windows中sqlnet.ora文件为空时采用Oracle密码文件验证,Linux相反!
     SQLNET.AUTHENTICATION_SERVICES= (NTS)     基于操作系统验证;
     SQLNET.AUTHENTICATION_SERVICES= (NONE)  基于Oracle密码文件验证
     SQLNET.AUTHENTICATION_SERVICES= (NONE,NTS)  二者并存,注意是半角,否则不识别(windows)

     默认情况下Unix/Linux下的sqlnet.ora文件是没有SQLNET.AUTHENTICATION_SERVICES参数的,
    此时是操作系统验证和Oracle密码验证并存,加上SQLNET.AUTHENTICATION_SERVICES这个参
    数后,不管SQLNET.AUTHENTICATION_SERVICES设置为NONE还是NTS还是(NONE,NTS),都是
    基于Oracle密码验证。

    设定sqlnet.authentication_services:
    none:作用是不允许通过os系统用户登录数据库,需要提供用户名及密码;
    all:作用是允许所有的登录方式;
    nts:作用是windows的本地操作系统用户认证;
    注:需要说明的是据试验该用户名和密码是指具有sysdba权限的用户;在linux上若用系统用户oracle登录数据库需要设定为all或是注销该字段;
    注:linux上默认是没有该文件的,可以手动创建,参考$ORACLE_HOME/network/admin/samples/sqlnet.ora内容,并将之设定在$ORACLE_HOME/network/admin/目录下。


    如果是密码文件验证的话,需要确认密码文件是否存在!即:
    $ORACLE_HOME/dbs/下有没有orapw$ORACLE_SID的文件
    密码文件是可以通过参数REMOTE_LOGIN_PASSWORDFILE开启(EXCLUSIVE或者SHARED)或者是禁用(none)的
    show parameter xxxxxxxxx--查看
     alter system set remote_login_passwordfile  = none scope=spfile;--修改

    --查看具有sysdba或者sysoper权限的用户
    select * from v$pwfile_users;

    每次使用grant sysdba/sysoper授予新用户特殊权限或是alter user命令修改拥有sysdba/sysoper权限的用户密码的时候,Oracle都会自动的同步密码文件,这样保证在数据库没有打开的情况拥有特殊权限的用户能正常的登陆数据库以进行管理操作。

    [html] view plaincopy
    SQL> show parameters remote_login_passwordfile;  
      
    NAME                                 TYPE        VALUE  
    ------------------------------------ ----------- ------------------------------  
    remote_login_passwordfile            string      EXCLUSIVE  
    SQL> select * from v$pwfile_users;    
      
    USERNAME                       SYSDB SYSOP SYSAS  
    ------------------------------ ----- ----- -----  
    SYS                            TRUE  TRUE  FALSE  
      
    SQL> grant sysdba to hr    
      2  ;  
      
    Grant succeeded.  
      
    SQL> select * from v$pwfile_users;    
      
    USERNAME                       SYSDB SYSOP SYSAS  
    ------------------------------ ----- ----- -----  
    SYS                            TRUE  TRUE  FALSE  
    HR                             TRUE  FALSE FALSE  
      
    SQL>  

    密码文件的重建
    其中文件名和密码是必需的。entries设置了密码文件可包含的dba用户的最大数目。force定义了是否覆盖当前文件。重建密码文件会清除系统内除了sys用户以外所有sysdba用户的密码。必须使用grant sysdba同步密码文件。
    命令orapwd

    windows环境下的
    oracle的操作系统认证(connect as sysdba)登录方式
    有一种oracle的登录方式是操作系统验证登录方式,即常说的OS验证登录方式,在SQL server中也有这种方式。
    有些朋友经常使用connect / as sysdba登录,但不知道为什么没有提供用户名和密码就得到了sysdba的权限。还认为这样是不是不安全呢?
    Oracle在常见的多用户操作系统上都可以进行OS认证方式来登录。例如solaris,windows等等。
    下面以常见的windows操作系统来说明看一下这个操作系统认证方式登录的原理。如果你的机器可以使用connect / as sysdba获取sysdba的权限,那么下面的每一个过程你的机器上都会得到验证,如果不能,按照下面的操作更改后,你也能以这种方式登录。
    在命令行下敲入compmgmt.msc 进入计算机管理
    选择本地用户和组—>组
    看是不是有一个组的名字叫做ORA_DBA
    双击改组可以看到里面是不是有administrator用户
    想一想你是不是以administrator用户登录的呢?
    再进入Oracle安装目录(即$ORACLE_HOME 一般是D:"oracle)"ora92"network"admin 找到sqlnet.ora文件看看里面的是不是有SQLNET.AUTHENTICATION_SERVICES= (NTS)
    如果这些都对的话,你就能已操作系统认证的方式(connect / as sysdba)来登录Oracle
    接下来的问题是,如果你的数据很重要,出于安全考虑,希望禁止这种操作系统认证的方式。那么该怎么做呢?
    很简单,找到在刚才的第6步骤中的sqlnet.ora文件,将SQLNET.AUTHENTICATION_SERVICES= (NTS)改为SQLNET.AUTHENTICATION_SERVICES=none即可。你再试一下看看会不会得到到如下结果:
    ERROR:
    ORA-01031: insufficient privileges
    警告: 您不再连接到 ORACLE。
    如果你的机器不能以系统认证的方式登录,检查以上几个步骤,你总可以找到原因的。

    详细了解再看虾米呐的链接或者http://www.itpub.net/thread-1037871-1-1.html

    11:sqlplus连接时的三种方式
    SQLPlus 在连接时通常有三种方式
    1. sqlplus / as sysdba
        操作系统认证,不需要数据库服务器启动listener,也不需要数据库服务器处于可用状态。比如我们想要启动数据库就可以用这种方式进入
        sqlplus,然后通过startup命令来启动。
    2. sqlplus username/password
        连接本机数据库,不需要数据库服务器的listener进程,但是由于需要用户名密码的认证,因此需要数据库服务器处于可用状态才行。
    3. sqlplus usernaem/password@orcl
        通过网络连接,这是需要数据库服务器的listener处于监听状态。此时建立一个连接的大致步骤如下 
      a. 查询sqlnet.ora,看看名称的解析方式,默认是TNSNAME  
      b. 查询tnsnames.ora文件,从里边找orcl的记录,并且找到数据库服务器的主机名或者IP,端口和service_name  
      c. 如果服务器listener进程没有问题的话,建立与listener进程的连接。  
      d. 根据不同的服务器模式如专用服务器模式或者共享服务器模式,listener采取接下去的动作。默认是专用服务器模式,没有问题的话客户端
                就连接上了数据库的server process。
      e. 这时连接已经建立,可以操作数据库了。


    一、用户
    1、利用SQL创建用户的语法格式如下:
     
    Sql代码  
        create user user_name --用户名*/  
        [identified by password | externally | globally as 'external_name'] --以何种方式验证用户,验证方式有3种:口令、外部和全局,  
        --口令表示利用创建用户时提供的password进行验证,外部表示利用第三方程序来验证,如操作系统的登录密码,全局则指当有多个数据时,  
        --建立一个全局的用户,其他数据库都以这个用户来验证,只有使用口令的时候才需要关键字by*/  
        [default tablespace tablespace_name] --指定用户的默认表空间*/  
        [temporary tablespace tablespace_name] --指定用户的临时表空间*/  
        [quota integer K | integer M | unlimited on tablespace_name] --在指定表空间能分配的最大空间*/  
        [profile profile_name] --指定概要文件*/  
        [default role roleName,..n | all[except roleName,...n] | none] --指定用户拥有的角色,default是将一个或多个默认的  
        --角色分给用户,all[except role]是把所有的角色或除某些角色以外的角色分给用户,none表示不指定角色*/  
        [password expire] --表示使password失效,这将强制用户在第一次登录数据库时更换密码*/  
        [account lock | unlock] --账户是否锁定*/  
    示例代码:  
        create user hello identified by world password expire;  
          
     
    2、利用SQL修改用户的语法格式如下:
     
    Sql代码  
    alter user user_name  
    identified by password | externally | globally as 'external_name'  
    [default tablespace tablespace_name]  
    [temporary tablespace tablespace_name]  
    [quota integer K | integer M | unlimited on tablespace_name]  
    [profile profile_name]  
    [default role roleName | all[except roleName] | none]  
    [password expire]  
    [account lock | unlock]  
    例代码:  
    alter user hello identified by helloworld;  
     

    3、利用SQL命令删除用户的语法格式如下:
     
    Sql代码  
    drop user user_name [cascade]; --使用cascade会把用户拥有的对象一起删除*/  
    例代码:  
    drop user hello cascade;  
     


    二、角色
    1、利用SQL语句创建角色的语法格式如下:
     
    Sql代码  
    create role role_name  
    [not identified]  
    [identified by password | externally | globally]  
     
    示例代码:
     
    Sql代码  
    create role hello;  
     

    2、利用SQL语句修改角色的语法格式如下:
     
    Sql代码  
    alter role role_name  
    [not identified]  
    [identified by password | externally | globally]  
     

    3、利用SQL语句删除角色的语法格式如下:
     
    Sql代码  
    drop role role_name  
     


    三、权限
    权限既可以授予单独的用户,也可以授予给角色。
    1、使用grant进行授权
    语法格式如下:
     
    Sql代码  
    grant system_privilege | role_name to user_name | role_name [with admin option]; --把系统权限或某个角色授予某一用户或角色*/  
     
    说明:with admin option表示被授予权限的用户有权限把该权限授予其他用户或角色。
    示例代码:
     
    Sql代码  
    grant connect to hello;  
     
    对某些对象也可以单独授予权限,如表、视图等,语法格式如下:
     
    Sql代码  
    grant system_privilege on object to user_name | role_name; --对某个对象授予权限*/  
     
    示例代码:
     
    Sql代码  
    grant select on table_name to hello; --授予用户hello对表table_name的select权限*/  
     

    2、使用revoke进行权限的移除
    语法格式如下:
     
    Sql代码  
    revoke system_privilege | role_name from user_name | role_name; --把系统权限或某个角色从某一用户或角色的权限列表中移除*/  
     
    示例代码:
     
    Sql代码  
    revoke connect from hello;  
     
    对某些对象单独授予的权限,也可以使用revoke进行移除,语法格式如下:
     
    Sql代码  
    revoke system_privilege on object from user_name | role_name; --把某一对象的系统权限授予某一用户或角色*/  
     
    示例代码:
     
    Sql代码  
    revoke select on table_name from hello; --移除用户hello对表table_name的select权限*/  

    猜你喜欢

    转载自zhyp29.iteye.com/blog/2302619