Oracle 11g用户管理与权限分配(《Oracle从入门到精通》读书笔记5)

来源:互联网 发布:打印机报端口已存在 编辑:程序博客网 时间:2024/05/16 18:40

先看下Oracle数据库的安全保护是怎么做的:

首先,用户向DB提供身份识别信息(也就是账号/密码),在确定该信息是正确的前提下、DB再判断该用户所拥有的权限,给予其相应的操作权限。

其次,Oracle采用了传统的权限->角色->用户模式来给最终用户授予权限,也就是先把权限集定义为一个角色,再把角色赋给用户;这样既方便了维护,也一定程度上提高了安全性。Oracle也允许直接把某些权限赋给最终用户,但除非是测试环境,否则不推荐这样做。

这里的权限,大体可以分为系统权限(如connect、ALTER SYSTEM等)和对象权限(也就是具体操作表、视图的权限,如select,update等)。


一、角色管理

1. 角色相关的数据字典:

数据库列上的所有权限:DBA_COL_PRIVS

数据库对象上的所有权限:DBA_TAB_PRIVS

已经授予用户或其他角色的角色:DBA_ROLE_PRIVS

已授予用户或角色的系统权限,或者查看某个角色包含哪些权限:DBA_SYS_PRIVS

系统特权数据目录:system_privilege_map

查看当前连接用户的所有有效角色:

select * from session_roles;

查看某个角色包含哪些权限:

select * from dba_sys_privs where grantee = 'ROLE_NAME';--ROLE_NAME要大写


2. Oracle 11g的预置角色:

(1)connect包含的权限:

alter session,create cluster,create database link,create sequence,create session,create synonym,create table,create view

(2)resource包含的权限:

create cluster,create indextype,create operator,create procedure,create sequence,create table,create trigger,create type

(3)DBA包含所有权限

(4)EXP_FULL_DATABASE包含的权限:

select any table,backup any table,execute any procedure,execute any type,administer resource manager

(5)IMP_FULL_DATABASE包含的权限:

execute_catalog_role,select_catalog_role

此外还有很多,可以通过查询DBA_ROLES知道该版本的Oracle中包含哪些预置角色


3. 创建自定义角色和授权

(1)创建角色:

create role role_name [ not identified | identified by [ password | exeternally  | globally] ]

·identified by password:使用该角色时需提供密码验证

·identified by exeternally:OS验证

·identified by globally:Oracle安全域中心服务器验证

例:

create role designer identified by exeternally;

(2)将权限赋给角色:

grant right1,right2,... to role_name;

例:

grant create view,create table to designer;


4. 管理角色

(1)取消角色使用时的密码:

alter role role_name not identified;

修改角色密码:

alter role role_name identified by new_password;

(2)角色的生效:

假如某个用户同时具备了若干个角色r1,r2,r3.那么如果r1不生效的话,则该用户同样无法使用r1包含的权限。

最大可生效的角色数有MAX_ENABLED_ROLES决定:

show parameter MAX_ENABLED_ROLES;

设置角色生效并带有密码:

set role role_name identified by password;

(3)修改角色中的权限:

继续像已存在的角色添加新的权限:

grant new_right1,new_right2,... to exist_rolename;

回收某角色中的权限:

revoke exist_r1,exist_r2,... on schema.object from role_name;

(4)设置当前用户要生效的角色:假如不使用户具有的角色生效,那么用户同样不能使用这些权限

set role role_name [identified by passwd];

(5)删除角色:

drop role role_name;


二、用户管理

1. 创建用户:

create user user_name identified by passwd--用户名和密码尽量用字母数字和#_号,使用其他符号的话,在写sql脚本时容易和shell、C++、java等语法冲突

[or identified exeternally]

[or identified globally as 'CN=user']

[default tablespace tablespace_name]] --指定该用户所在的默认表空间

[temporary tablespace tablespace_name] --指定该用户使用的临时表空间

[quota [integer k[m] [unlimited]  on tablespace_1]--指定在tablespace_1上允许占用的最大空间

[,quota [integer k[m] [unlimited] ] on tablespace_2]--以此类推

...

[profiles profile_name] --该用户使用的资源文件的名称,不指定的话默认为default,一般默认即可

[account lock or  account unlock] --该用户是否加锁,不常用,一般默认不加;如果想用这个功能,需要事先在PROFILE文件里设置该功能,详见下文

例:

create user xk identified by xk
default tablespace tb_3
temporary tablespace TEMP_TEST
quota 10m on tb_3;

*注意,如果不适用quota语句,那么 该用户在此表空间上的配额为0,虽然它是可选的...

2. 修改用户:

(1)修改磁盘限额:

当oracle报错ORA-01536时,表示该用户在磁盘上的限额已满,需要扩充

alter user user_name quota 20m on tablespace_name;

(2)修改用户密码:

alter user user_name identified by 123456;

(3)解锁用户:

alter user ORACLE_OCM account unlock;

(4)删除用户:

drop user user_name cascade;--将用户下面的对象也一并删除

(5)给用户授权:与给角色授权类似

grant role_name, right_name to user_name [with admin option];

*with admin option:表示被授权的用户A有权把自己得到的角色二次授权给自己新建的用户B(如果它可以新建用户的话),即使A的某项权限被收回,B仍然可以使用这种权限

(6)回收用户权限:与回收角色权限类似

revoke role_name, right_name from user_name;


三、profile(资源配置文件,又叫用户配置文件)管理

profile文件,可以理解成是密码限制、资源限制等规则的集合;管理员可以通过它来为用户配置解锁/锁定条件、设置密码过期时间等安全策略,它是Oracle安全策略的重要组成部分。

1. 显示PROFILE信息:

显示资源配置文件的资源配置信息:

select * from dba_profile where profile='(select profile from dba_users where username='user_name')';

如果查不出来,表示没有为该用户配置安全策略

2. 使用PROFILE管理密码:

(1)账户锁定:

--设置一个连续登陆失败5次、将被锁定7天的配置名lock_account(也就是profile名,地位相当于default)

create profile lock_account limit
failed_login_attempts 5
password_lock_time 7;

--将这个配置分配给某个用户

alter user user_name profile lock_account;

(2)密码过期时间:

create profile password_lift_time limit
password_life_time 30         --密码有效期为30天
password_grace_time 3;           --表示到期前3天提醒
alter user user_name profile password_lift_time;

(3)密码历史:有两个参数可以实现

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

PASSWORD_REUSE_MAX:旧口令在可以重用前、必须改变的次数

如:超过一分钟,并且密码变更次数超过三后,密码可以重用
CREATE PROFILE sec_profile LIMIT
PASSWORD_REUSE_TIME 1/1440
PASSWORD_REUSE_MAX  3
;

如:PASSWORD_REUSE_TIME设置为unlimited,不做限制,PASSWORD_REUSE_MAX为3
ALTER PROFILE sec_profile LIMIT
PASSWORD_REUSE_TIME unlimited
PASSWORD_REUSE_MAX 3;

(4)密码复杂度:PASSWORD_VERIFY_FUNCTION

这里需要用到验证码复杂度的规则函数,Oracle 11g默认的规则校验函数(verify_function_11G)在下面位置:

app\Administrator\product\11.2.0\client_1\RDBMS\ADMIN\utlpwdmg.sql

我们只需要把这个函数配给PASSWORD_VERIFY_FUNCTION即可

ALTER PROFILEprofile_name LIMIT

PASSWORD_VERIFY_FUNCTION verify_function_11G;

当然,我们也可以自己改写这个函数。(但是记得备份文件/(ㄒoㄒ)/~~)

3. 使用PROFILE管理资源

首先要将下面参数置为true

show parameter resource_limit;

alter system set resource_limit=true;

创建和修改此类 profile文件的语法和上面完全一致

(1)某个用户可以同时连接的会话数:

SESSION_PER_USER

(2)某用户一次可以使用的CPU时间,单位是1/100秒:

CPU_PER_SESSION

(3)每条sql语句能使用的CPU时间,单位是1/100秒:

CPU_PER_CALL

(4)限制每个回话所能读取的数据块数量,单位为“个”

LOGICAL_READS_PER_SESSION

(5)限制每个用户所能连接到数据库的最长时间

CONNECT_TIME

(6)限制每个用户回话所能连接到数据库的最长时间

IDLE_TIME


4. 删除profile文件

drop profile profile_name cascade;


(第十二章完)

0 0
原创粉丝点击