Oracle 权限控制

来源:互联网 发布:dota2天梯排名算法 编辑:程序博客网 时间:2024/05/01 09:27

1 oracle的数据模式是:用户建在数据库实例上,表建在用户上 
    不同数据库实例可以建相同的用户;
    同一个数据库实例,用户名不能相同;
    一个用户可以使用多个表空间;
    一个表空间可以被多个用户所使用;
    表的权限是和用户绑定的;
    表空间不涉及任何权限控制问题;
    不同用户可以在表空间上创建同名表,但是此时不能为同名表创建同义词了;
    oracle数据库权限控制是在用户,角色和数据对象之间控制的,和表空间没有关系;
    
2 一个用户的表就象自己的私有财产一样,没有自己或管理员授权别的用户是不可见的,更不可能进行相关任何操作; 


3 对于不同用户下的同名表,都是独立的数据对象,如user1.table1和user2.table1是相互独立的,
用户分别操作自己的表是不影响其他用户的;


4 对于同一用户下的同一个表,所有有权限的用户对其进行数据操作时,是会相互影响的,如对user1.table1来说,
    user1修改了它的一行,user2又对该表的该行进行了修改,那么该表的该行的实际内容是在user1修改后基础上user2修改的结果
   (注意,所有修改以最后成功提交修改请求的用户的内容为准),多个用户对同一个用户下的同一个表的同时修改和锁定会造成锁等待
   
   
   
5.表空间是Oracle数据库逻辑组织结构,类似于编程语言中的命名空间;
  数据文件时oracle数据库的物理形式;
  表空间可以有多个物理文件;
  但是一个物理文件只可能属于某一个表空间;
  表数据在表空间上的分布是不规则的,可能分散在多个物理文件上;
  
  
6.建议遵循的规则是:
   创建用户时指定默认表空间和临时表空间;创建表时不要指定表空间,使用用户默认表空间;避免数据存储混乱,难以备份;

===============================================================================================================

系统权限

三个默认用户:
用户   密码
sys(网络管理员)change_on_install [as sysdba](连接数据库所用)
system(本地管理员)manager
scott(普通用户)tiger
上面为oracle9i中的用户密码,如果是10i则前两个用户由自己在安装时指定。


创建自己的用户
出现协议适配器错误:启动两个服务(监听、实例)
通过命令启动以上两个服务:
监听:lsnrctl start (监听名称,可不写)
实例:oradim -starup -sid orcl


1、通过超级用户登录:
sqlplus [username]/[password] as sysdba  此用户为"sys"
2、创建用户:
create user zlb identified by zlb(密码)


使用用户:
先授会话权限:
grant create session to zlb;
再登陆:
sqlplus zlb/zlb


创建表:
先分配权限:
grant unlimited tablespace to zlb; 
grant create table to zlb;
创建表:
create table mytable (id int);
插入:
insert into mytable values(1);

说明:当一个用户拥有了创建表的权限时,他就拥有了这张表所有操作的权限。

撤销表的权限:
revoke create table from zlb;
查找用户拥有哪些系统权限:
select * from user_sys_privs;

如果想把某个权限授予所有用户:
grant create any table to public;(把创建表的权限授予所有用户)


对象权限

用户之间不能相互访问;
sys有权限访问所有用户的权限。
在oracle中要通过手动提交,即当你插入一条数据时,要通过“commit”提交以下。


如果要想用户之间能够相互访问,可通过授权来实现:
grant select on mytable to lb;(表示zlb把查询表的权限授予lb),其他的增删改权限授予同上。


如果想把所有的权限授予lb,写法为:
grant all on mytable to lb;
撤销所有权限:revoke all on mytable from lb;


查找用户拥有哪些表权限:
select * from user_tab_privs;


断开连接:disconn;启用连接:connzlb/zlb


权限可以控制到列上,如:
grant update(id) on mytable to lb;
把更新字段“id”的权限授予lb
注意:查询和删除不能控制到列


查看列的权限:
select * from user_col_privs;


DDL:对表的操作语言
DML:增删改查(只有DML中的插入、更新、删除在编写完SQL之后要对其进行“commit”提交)
DCL:权限控制语言


权限传递

系统权限下:

sys把管理的权限授予zlb,因此zlb就拥有的管理的权限,zlb也可以再把此管理权限授予lb,如:
sys将管理权限授予zlb:
grant alter any table to zlb with admin option;
zlb将管理权限授予lb:
grant alter any table to lb with admin option;

对象权限下:

权限授予语句:
在zlb用户下:
grant select On table to lb with grant option;zlb将查询table表的权限授予lb,并且,把此权限的管理权也授予了lb



角色权限

创建角色:
create role myrole;
授权:
grant create table to myrole;
授权:
grant create table to myrole;
创建用户:
create user zhangsan identified by zhangsan;
将此用户授予角色
grant myrole to zhangsan;
这样的话此用户就拥有了角色中的所有权限


有些权限级别很高,只能单独授予用户,只能授予角色,如:
grant unlimited tablespace to myrole;将执行失败


权限说明:

create table:为自己创建表
create any table:不仅为自己,也可以为别的用户创建表
修改表/删除表:不存在alter table/drop table,只有alter any table/drop any table.因为当用户有了create table的权限时,则已经表示他可以对此表进行任意的操作,所以,修改和删除自己的表权限语句就不存在了。



表是属于某一个用户,而角色是公共的,不属于任何一个用户


丢失管理员密码怎么办

普通用户:

可以通过sys用户去修改普通用户密码
如:通过sys用户修改zlb的密码:
alter user zlb identified by zlb123;

sys用户:

如果我把原有口令文件删掉了,路径为:
E:\oracle\ora92\database\pwdora9i.ora;
创建密码文件:
orapwd file=E:\E:\oracle\ora92\database\pwdora9i.ora password=sys entries=10(指定密码文件中可以放多少特权用户);

之后我们可以查看密码文件中有多少特权用户:
select * from v$pwfile_users;



数据库的是三种验证机制,依次为:

1、操作系统验证:

拥有sysoper和sysdba权限的用户,默认情况下为安装数据库时以该计算机用户名自动创建的,因此在登录时可以不输入用户名密码也可登陆进去;如果把此用户删除,则进行下一步验证。

2、密码文件验证:

拥有sysoper和sysdba权限的用户,如:sys用户

3、数据库验证(普通用户使用)


创建用户:

create user abc(用户名)
identified by abc(密码)
default tablespace users(默认表空间)
Temporary tablespace temp(临时表空间,支持排序)
quota 50M on users(在默认表空间中所使用的空间,即限额;如果是没有限制,则把50M改为unlimited)
原创粉丝点击