ORACLE用户管理

来源:互联网 发布:知乎专栏怎么写文章 编辑:程序博客网 时间:2024/05/01 04:31
 

Oracle的安全
  
第一:用户管理
用户至少需要会话的权利,否则连接也不成功;

用户在会话的权利上,应该有其他操作的权利;

Oracle的用户和口令不区分大小写,真是让人大跌眼镜;

Oralce中,所有用户必须明确被授权,才可以操作;
SQL Server
中,创建的用户自动就拥有了一些权限;

Oracle不依赖操作系统;SQL Server依赖Windows;

MicroSoft假定大多数用户都是合法用户,采取乐观态度;
Oracle
首先假定用户都是不安全的,采取悲观态度;

Oracle中的用户是互相隔离的,称为用户模式;

内置用户:
 sys,
网络管理员,最高权限;
    
当你试图输入了用户名:sys
         
密码:通用

    
之后,你发现连接不上;
    
而输入 用户名:system
        
密码:通用

    
或者    用户名:scott
         
密码:
tiger
    
的时候都可以连接,所以你认为

     sys
的权限没有system高;
    
其实正是因为sys的权限高,所以你必须以
     dba
的身份来登陆:sys/通用 as sysdba
//
可以使用数据字典user_users来查看当前用户管理的用户:

  select * from user_users;
 
dba_users可以查看dba管理的用户;

 system,只管理本机上的数据库;
 
all_users查看所有用户,只能由dba来查看;
 
******
创建用户:
 create user
用户名 identified by 口令 [externally]
 [default tablesapce
表空间名
]
 [temporary tablespace
临时表空间名
]
 [quota
整数 K|M|unlimited on 表空间名]

对于新创建的用户如果出现无法连接的情况,有可能是新用户无法创建session,解决方法如下:GRANT create session to username;


//
注意:创建用户必须有dba的权限;
******
查询用户:
 
其实就是对表user_users/dba_users/all_users进行查询,
 
只不过这里不把他们叫表,叫数据字典;而且数据字典是系统
 
维护的;
*******
修改用户:
 alter user.....//
后面和创建一样;

Oracle中一个实例就是一个数据库,这个数据库相当与SQL Server的全部数据库;
Oracle
的一个数据库被分为很多个表空间,每个表空间相当于SQL Server中的一个数据库;
   
实例演示:

create user student_user
identified by student
default tablespace users
temporary tablespace temp
quota 5m on users
quota 3m on temp

/其中,users,temp都是内置的表空间,student_userusers里有5m空间,在temp里有3m;
新创建的用户是没有权利的:

SQL> conn student_user/student;
ERROR

ORA-01045: user STUDENT_USER lacks CREATE SESSION privilege; logon denied

警告: 您不再连接到 ORACLE


*****
限制用户
 
锁定:alter user 用户名 account lock;
 
效果:

  SQL> alter user student_user account lock;
 
用户已更改。
  SQL> conn student_user/student;
  ERROR

  ORA-28000: the account is locked
 
警告: 您不再连接到 ORACLE
 
解锁:alter user 用户名 account unlock;
 
口令无效:alter 用户名 password expire; 当用户创建了很多表,

 
如果直接删除用户,它下面的表都将被删除,所以我们可以
 
只使得它的口令无效;
//
可见,表是用户的手下,用户没了,用户创立的表,占用的空间都就没了;
//
所以,一般情况下,我们不要删除用户;

****删除用户:
 drop user
用户名[cascade]
 //cascade
是强制删除,即使有别人正在用这个用户的表;

//
数据库管理语句是自动结束事务的,没有rollback的机会;

第二:权限管理

授权:grant [系统特权名] [角色] [on 被授权操作表名] to [用户名列表]
 [public][with admin option]
 
如果是dcl语句,就不用on 被授权操作表名

 
 grant all on student to public:
把对student的所有权限授予所有用户;
 
数据字典:user_sys_privs
 select * from user_sys_privs
权限收回:

 revoke
权限列表 on from 用户;

 SQL> revoke create table from iam;
 
撤销成功。
撤消只是撤消本次授权的权限,所以如果某个用户原来就有某个权利,
而你又给它授了同样的一个权利,然后你收回这个权限的时候,它原来
就具有的这个权利还是有的;

第三:角色管理*****************************************
因为一个用户可能需要某些权限的集合,当我们得到一新的用户的时候,我们需要给一个

用户依次授权每个它需要的权限;角色正是一个权限的集合,用户可以直接被授予这个
角色,用户自然就拥有了它的角色所拥有的权利;
创建角色:
 create role
角色名 [no identified|identified by 口令|externally]
 not identified:
指出授予该角色的用户在使用时不需要检验;

 identified by:
指出授予该角色的用户在使用set role命令时需要检验;
 
收回权限:revoke 权限 from 角色名;

//角色就是权限的集合;

实例:
create role student_role
/
grant create table,create session,create view to student_role
/
grant student_role to scott
/
revoke create view from student_role
/
角色的某个权限被收回的时候,被授予该角色的用户的该权限也相应被收回;


.......................
前面5章回顾.............................

一个表空间就对应着一个数据文件,里面可以存储多个用户的表;
但是一个表只能在一个表空间里;

Oracle就三种基本数据类型:字符;日期;数值;
还有巨型的对象类型,可以存储电影;

三种语言:数据操作语言;数据定义语言;数据控制语言;