oracle安全性

oracle安全性




创建和管理数据库用户账户


用户登录到数据库,通过指定一个账户名以及某种身份验证方式连接到用户账户. 


用户:用某个用户账户名建立针对实例的会话,并进行登录来连接到该账户的个人.
模式(schema):用户账户拥有的一组对象.






用户账户属性


用户账户拥有很多在创建账户时定义的属性,这些将用于连接到账户的会话,在会话运行期间,DBA或会话可以更改其中一些属性:


-用户名
-身份验证方法
-默认表空间
-表空间配额
-临时表空间
-用户配置文件
-账户状态


创建用户时指定以上属性,但其中只有用户名和身份验证方式是必须的,其它军有默认值.


1.用户名:
必须唯一,必须以字母开头,不超过30个,不能是保留字,区分大小写,但会自动转为大写字母,除非你要玩自己在双引号中指定用户名,可以不遵守这些规则(长度除外)


用户名创建后不能更改,想改?删了(同时用户模式所有对象都会删除)重建.


2.默认表空间配额:
每个账户都有默认的表空间,用户的任何模式对象(表,索引等)将保存在此表空间中.


            select property_value from database_properties
            where property_name='DEFAULT_PERMANENT_TABLESPACE'


如果创建用户时没指定默认表空间,那就使用数据库的默认表空间给所有用户账户.可以在创建数据库时设置默认表空间,也可随时更改:


            alter tablespace default tablespace 空间名;
           
配额(quota):
表空间中为用户的模式对象分配的空间量.到达配额前随意创建对象,用尽后则无法创建任何对象.如果将某用户配额改为小于其拥有的对象大小,那么对象将不变,但不允许变大.


select username,default_tablespace,temporary_tablespace from dba_users
where username='HR'                                     --查询用户hr的默认表空间和临时表空间


alter user hr quota 10M on users                    --hr有权占用user表空间的10M空间


alter user hr quota unlimited on example       --hr在example上可使用不限量空间


创建表,用户必须有create table权限,并且拥有在其中创建表的表空间上的配额.




2.临时表空间


永久对象(比如表)存储在永久表空间中,临时对象就存在临时表空间中.如果会话执行操作需要的空间量超出了PGA 的可用空间量,就需要临时表空间中的空间.
PGA是程序全局区,是分配给会话的专用内存.需要临时空间(如果可能,在内存中,如有必要在临时表空间中)的操作包括排序,联接表,构建索引和使用临时表.
回味每个用户账户分配临时表空间,但连接到 该账户的all用户会话将共享此临时表空间.


临时表空间的管理自动完成,不用你操心,数据库自己会根据需要创建,删除临时对象,不用为用户授予临时表空间的配额.因为临时表空间的对象不归用户
所有,而属于SYS用户,SYS用户拥有所有表空间上的无限配额.


要更改用户的临时表空间:
            alter user 用户名 temporary tablespace 临时空间名;
           


4.配置文件
用户的配置文件控制口令设置,并在一定程度上控制资源的使用.配置文件时管理口令和资源的有效方法,但实际上只适用于每个应用程序都有自己的数据库用户账户的环境.




5.用户账户状态:
            select account_status from dba_users
           
常见的也就是open,locked,expired,expired&locked


锁定或解锁某一账户:
            alter user 用户名 account unlock;
            alter user 用户名 account lock;
           
强制用户更改口令:
            alter user 用户名 password expire;
           










身份验证方法


用户必须有身份验证方法:数据库借助这些方法,确定尝试创建会话的用户是否有权这么做.最简单的是提供一个与数据库中保存的口令相匹配的口令,除此之外还有其他方法:


-操作系统身份验证(管理员专用)
-口令文件身份验证(管理员专用)
-口令身份验证
-外部身份验证
-全局身份验证




1.操作系统和口令文件身份验证
必须为用户授予SYSDBA or SYSOPER权限:
            
            grant [  sysdba | sysoper  ] to 用户名;
           
一旦授予后,就会将用户口令从数据字典复制到外部口令文件中,此后数据库即使没打开,实例也可读取口令


            connect sys/bob@bob as sysdba | sysoper;
            
           
更改用户口令,需要有权限的用户来:


            alter user 用户名 identified by 新密码;
           
3.外部身份验证


4.全局身份验证






创建账户


create user必须有用户名和身份验证方法:


            create user myla identified by yang                     --用户名,用与口令验证的口令
            default tablespace users temporary temp          --提供默认表空间和临时表空间
            quota 100m on users,unlimited on example       --设定配额
            profile developer_profile                                      --为用户口令和资源管理的配置文件名
            password expire                                                   --强制用户更改口令
            account unlock;                                                     --解锁用户,可用(默认设置)
           
要改口令:


            alter user myla identified by yang;


更改默认表空间临时表空间:


            alter user myla default tablespace newusers temporary temp01;


更改配额:            
            
            alter user myla quota unlimited on newusers,quota 0 on users;
            
更改配置文件:
       
            alter user myla profile prod_profile;


强制用户更改口令:            
            
            alter user myla password expire;


锁定账户:
           
            alter user myla lock;
删除账户(一旦拥有对象就得加cascade了:


            drop user myla cascade;
           




public用户挺有意思,它是个概念用户,如果想给所有用户授权,你可以将权限授予public,那么所有用户就都拥有你赋予的某个权限了. 












授予可撤销权限


默认下非授权用户不能在数据库中进行任何操作,用grant授权,revoke撤销权限.默认下SYS和SYSTEM才有权授予任何权限.
将权限授予他人的叫授予者grantor,被授予的叫grantee.


权限有两种:系统权限(用户可执行影响数据字典的操作)和对象权限(可以执行影响主句的操作)




系统权限
大约200种,大多数应用于影响数据字典的操作,比如创建用户或表.其它的影响数据库或实例,比如创建表空间,调整实例参数值,建立会话等.常用的权限如下:


-create session                             允许用户进行连接,否则用户都无法登录到数据库
-alter database                              允许访问多个修改物理结构所需的命令
-create tablespace                        允许被授权人在自己的模式创建,更改或删除表,在其上运行select和DML命令,创建更改删除索引
-grant any object privilege            允许被授权人将其本身没有的对象的对象权限授予他人,但不能授予自己.
-create any table                           被授权人可以创建属于其他用户的表
-drop any table                              被授权人可以删除属于其他用户的表
insert/update/delete any table      被授权人可以对所有其它用户拥有的表执行DML命令
select any table                             可以对任何表执行select命令


授予权限的语法:


            grant privilege [  ,privilege...  ] to 用户名;
           
创建用户账户后,通常给用户如下系统权限:


            grant create session,alter session,
                     create table,create view,create synonym,create cluster,create database link,
                     create sequence,create trigger,create type,create procedure,create operator
            to 用户名;


这些权限允许用户连接和配置会话,创建存储数据的对象和PL/SQL对象,只存在于其模式中,用户没有针对其他模式的权限,对象的创建也受到为其分配
的配额的限制.
此语法的一个变体允许被授权人将权限传递给第三方,比如:


            connect sys/bob
            grant create table to myla with admin option;
            
            connect myla/yang
            grant create table to peach;
            
这给予了myla发出grant的权利,让peach也能创建表,但peach只在自己的模式中创建表


用户被授予带有admin option的权限,即使对其做了撤销,其给别人的权限也都保留,也就是说不存在撤销级联.


来个栗子:A grant ... to B admin option,B grant ... to C,把B的权限撤消了,也不影响C拥有的权限. 


!!!系统权限的撤销不会级联,而对象权限的撤销是有级联效应的.


any权限要慎用,因为针对的是数据库所有相关对象给予权限:


            grant select any table to myla;
           
此时myla能查询每个模式的每个表,除系统管理员外,any权限给谁都不稳妥!






对象权限


对象权限允许针对表和相关对象执行select,insert,update,delete命令,也允许执行PL/SQL对象.这些权限不存在于用户自己的模式对象中 .如果用户有create table权限,
那就能对创建的表执行select和DML操作,而不用额外再给它什么权限.


                                                                            不同权限的授权对象


    权限                                                                          不同权限的授权对象                           
   
   select                                                   表,视图,序列和同义词
   insert                                                    表,视图和同义词
   update                                                  表,视图和同义词
   delete                                                   表,视图和同义词
   alter                                                      表和序列
   execute                                                过程,函数,包和同义词       
  




语法如下:


            grant privilege on [  schema.  ] object to 用户名 [  with grant option  ];
            
例如:


            grant select on store.customers to myla;
            grant update (order_status) on store.orders to myla;
            grant all on store.regions to myla;
           
允许myla查询score模式中的orders表的所有列,但只对一个列order_status执行写操作.此后myla给予了store的regions表的所有对象权限(select和DML)


一般在列级别授权有些繁琐,创建一个显示特定列的视图,更方便一些.




使用with grant option可将对象权限传给第三方,会产生级联效应
            
再来个栗子:A grant ... to B with grant option,B grant ... to C,把B的权限撤消了, C也没了...权限.


查查某个用户都有哪些对象权限and系统权限


--select grantee,privilege,grantor,grantable from dba_tab_privs
select * from dba_tab_privs
where owner='HR' and table_name='JOBS'


select * from dba_sys_privs
where grantee='HR'










创建和管理角色


角色不是模式对象:不属于任何人,所以前面不能加用户名,但角色可以与用户共享同一个名称空间:创建的角色不能与已有用户同名,也不能与已有角色同名.


            create role 角色名;
           
然后用普通方式给角色授权,根据需要with admin option或with grant option


可以将角色授予另一个角色,角色的撤销不会级联.




预先定义的角色


-connect  高版本中只有create session权限
-resource 可创建数据对象(表)和过程对象(PL/SQL),还有unlimited tablespace权限
-DBA 有大多数系统权限,被授予的用户除了启动关闭数据库,其它权限都有.
-select_catalog_role 针对数据字典对象的2000多个对象权限,但没有系统权限或针对用户数据的权限.这对新管理员有用,这些人监视数据库并报告数据库情况,但看不到数据.
-scheduler_admin 有管理调度服务的调度程序所需的系统权限


还有个预定义的public,此角色始终授予每个用户,给public任何权限,大家就都有了此权限.








创建和管理配置文件

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25025926/viewspace-1124519/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25025926/viewspace-1124519/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值