分类: Oracle
Oracle11G用户、表空间、权限、角色、回收、管理及查看用户所有权限

一、登陆

sqlplus / as sysdba;//登陆sys帐户
sqlplus sys as sysdba;//同上
sqlplus scott/tiger;//登陆普通用户scott
sqlplus / as sysdba;//登陆sys帐户
sqlplus sys as sysdba;//同上
sqlplus scott/tiger;//登陆普通用户scott

二、管理用户

A、创建用户的Profile文件
CREATE PROFILE STUDENT LIMIT // student为资源文件名
FAILED_LOGIN_ATTEMPTS 3 //指定锁定用户的登录失败次数
PASSWORD_LOCK_TIME 5 //指定用户被锁定天数
PASSWORD_LIFE_TIME 30 //指定口令可用天数
PASSWORD_LOCK_TIME:用于指定帐户被锁定的天数.
PASSWORD_LIFE_TIME:用于指定口令有效期
PASSWORD_GRACE_TIME:用于指定口令宽限期.
PASSWORD_REUSE_TIME:用于指定口令可重用时间.
PASSWORD_REUSE_MAX;用于指定在重用口令之前口令需要改变的次数.
PASSWORD_VERIFY_FUNCTION;是否校验口令(校验将值改为VERIFY_FUNCTION)
CPU_PER_SESSION:用于指定每个会话可以占用的最大CPU时间.
LOGICAL_READS_PER_SESSON:用于指定会话的最大逻辑读取次数.
PRIVATE_SGA:用于指定会话在共享池中可以分配的最大总计私有空间.需要注意,该选项只使用与共享服务器模式.
COMPOSITE_LIMIT:用于指定会话的总计资源消耗(单位:服务单元).
CPU_PER_CALL:限制每次调用(解析,执行或提取数据)可占用的最大CPU时间(单位:百分之一秒)
LOGICAL_READS_PER_CALL:用于限制每次调用的最大逻辑I/O次数.
SESSIONS_PER_USER:用于指定每个用户的最大并发会话个数.
CONNECT_TIME:用于指定会话的最大连接时间.
IDLE_TIME:用于指定会话的最大空闲时间.

查看一个用户的所有系统权限(包含角色的系统权限)

select privilege from dba_sys_privs where grantee='DATAUSER'  
union  
select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee='DATAUSER' );  

创建一个新的profile文件:

CREATE PROFILE test01 limit FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 1 PASSWORD_LIFE_TIME 300;

删除一个新的尚未分配给用户的PROFILE,

DROP PROFILE ROFILE名称 CASCADE

一旦PROFILE被删除,用户被自动加载DEFAULT PROFILE
对于当前连接无影响
DEFAULT PROFILE不可以被删除

查看当前存在的profile文件

select distinct profile from dba_profiles;

查看指定profile文件中各资源的限制情况:

select * from dba_profiles where profile='TEST01';

修改现在profile文件中资源选项:

alter profile TEST01 limit FAILED_LOGIN_ATTEMPTS 1 PASSWORD_LOCK_TIME 3;

让用户使用新的profile文件:

alter user test profile TEST01;

查看用户当前使用的profile文件

select username,profile from dba_users;

使用profile文件限制用户对资源的使用;
必须先激活资源限制:

alter system set resource_limit=TRUE scope=memory;

对资源限制做修改:

alter profile TEST01 limit cpu_per_session 5000;

表空间

B、创建表空间
create tablespace [表空间名称]
datafile [表空间数据文件路径 ]
size [表空间大小]
autoextend on;

例如:

create tablespace test01
datafile '/data/app/oracle/oradata/orcl/test01.dbf'
size 50m
autoextend on;
针对某个用户修改表空间:

alter user user_name default tablespace tbs_name;
设置数据库的默认临时表空间:

Alter database default temporary tablespace temp_tbs_name;
查询当前默认表空间

SELECT PROPERTY_VALUE FROM database_properties WHERE PROPERTY_NAME ='DEFAULT_PERMANENT_TABLESPACE';
更改数据表大小(1G)

alter database datafile '/data/app/oracle/oradata/powerdes/users01.dbf' resize 1024m;
查看表空间详细数据文件:

SELECT FILE_NAME,TABLESPACE_NAME from DBA_DATA_FILES;
查看各表空间分配情况

select tablespace_name, sum(bytes) / 1024 / 1024  from dba_data_files group by tablespace_name;  
查看各表空间空闲情况

select tablespace_name, sum(bytes) / 1024 / 1024  from dba_free_space  group by tablespace_name;
查看表空间是否自动增长

SELECT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM dba_data_files;
设置表空间自动增长

ALTER DATABASE DATAFILE '/data/app/oracle/oradata/powerdes/powerdesk01.dbf' AUTOEXTEND ON;//打开自动增长

ALTER DATABASE DATAFILE '/data/app/oracle/oradata/powerdes/powerdesk01.dbf' AUTOEXTEND ON NEXT 200M ;//每次自动增长200m

ALTER DATABASE DATAFILE '/data/app/oracle/oradata/powerdes/powerdesk01.dbf' AUTOEXTEND ON NEXT 200M MAXSIZE 1024M;//每次自动增长200m,数据表最大不超过1G
表空间
删除表空间
DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;

删除空的表空间,但是不包含物理文件
drop tablespace tablespace_name;

删除非空表空间,但是不包含物理文件
drop tablespace tablespace_name including contents;

删除空表空间,包含物理文件
drop tablespace tablespace_name including datafiles;

删除非空表空间,包含物理文件
drop tablespace tablespace_name including contents and datafiles;

如果其他表空间中的表有外键等约束关联到了本表空间中的表的字段,就要加上CASCADE CONSTRAINTS
drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;
C、创建用户
CREATE USER username
IDENTIFIED BY password
DEFAULT TABLESPACE tablespace
TEMPORARY TABLESPACE tablespace
PROFILE profile
QUOTA integer|UNLIMITED ON tablespace

各选项含义如下:
IDENTIFIED BY password:用户口令;
DEFAULT TABLESPACE tablespace:默认表空间;
TEMPORARY TABLESPACE tablespace:临时表空间;
PROFILE profile|DEFAULT:用户资源文件;
QUOTA integer[K|M]|UNLIMITED ON tablespace:用户在表空间上的空间使用限额,可以指定多个表空间的限额。

举例

CREATE USER us1 IDENTIFIED BY "abc123" DEFAULT TABLESPACE user01 TEMPORARY TABLESPACE temp PROFILE DEFAULT QUOTA 1000M ON user01;
创建用户格式 create user 用户名 identified by 密码 其他参数...;
-- 创建一个密码为my22的myjava用户(密码要以字母开头,不能以数字开头)
create user myjava identified by my22;

查询用户缺省表空间、临时表空间
select username, default_tablespace, temporary_tablespace from dba_users;

查询系统资源文件名:
select * from dba_profiles;

资源文件类似表,一旦创建就会保存在数据库中。
select username, profile, default_tablespace, temporary_tablespace from dba_users;

删除用户
-- 通常使用dba身份去删除某个用户,若是其它身份则需要具有drop user权限,且不允许自己删除自己
-- 若欲删除的用户已创建table,则可以在删除时附加cascade参数,表明同时也删除该用户所创建的表

drop user 用户名 [cascade]

修改用户密码

-- 普通用户,可以直接使用password
password
-- 系统管理员,可以使用下面两种方式
password 用户名
alter user 用户名 identified by 新密码

create user zhangsan;//在管理员帐户下,创建用户zhangsan
alert user scott identified by tiger;//修改密码
create user zhangsan;//在管理员帐户下,创建用户zhangsan
alert user scott identified by tiger;//修改密码

三、监视用户:
1、查询用户会话信息:

select username, sid, serial#, machine from v$session;

2、删除用户会话信息:

Alter system kill session 'sid, serial#';

3、查询用户SQL语句:

select user_name, sql_text from v$open_cursor;
将用户加锁
Alter user acc01 account lock; // 加锁
Alter user acc01 account unlock; // 解锁

四、用户权限
权限分类:
系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。
实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。

1、系统权限分类:

DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
sys;//系统管理员,拥有最高权限
system;//本地管理员,次高权限
scott;//普通用户,密码默认为tiger,默认未解锁

对于普通用户:授予connect, resource权限。
对于DBA管理用户:授予connect,resource, dba权限。

2、系统权限授权命令:
[系统权限只能由DBA用户授出:sys, system(最开始只能是这两个用户)]
授权命令:SQL> grant connect, resource, dba to 用户名1 [,用户名2]...;
[普通用户通过授权可以具有与system相同的用户权限,但永远不能达到与sys用户相同的权限,system用户的权限也可以被回收。]

create user zhangsan;//在管理员帐户下,创建用户zhangsan
alert user scott identified by tiger;//修改密码

/管理员授权/
grant create session to zhangsan;//授予zhangsan用户创建session的权限,即登陆权限
grant unlimited session to zhangsan;//授予zhangsan用户使用表空间的权限
grant create table to zhangsan;//授予创建表的权限
grante drop table to zhangsan;//授予删除表的权限
grant insert table to zhangsan;//插入表的权限
grant update table to zhangsan;//修改表的权限
grant all to public;//这条比较重要,授予所有权限(all)给所有用户(public)

/管理员授权/
grant create session to zhangsan;//授予zhangsan用户创建session的权限,即登陆权限
grant unlimited session to zhangsan;//授予zhangsan用户使用表空间的权限
grant create table to zhangsan;//授予创建表的权限
grante drop table to zhangsan;//授予删除表的权限
grant insert table to zhangsan;//插入表的权限
grant update table to zhangsan;//修改表的权限
grant all to public;//这条比较重要,授予所有权限(all)给所有用户(public)

/oralce对权限管理比较严谨,普通用户之间也是默认不能互相访问的/
grant select on tablename to zhangsan;//授予zhangsan用户查看指定表的权限
grant drop on tablename to zhangsan;//授予删除表的权限
grant insert on tablename to zhangsan;//授予插入的权限
grant update on tablename to zhangsan;//授予修改表的权限
grant insert(id) on tablename to zhangsan;
grant update(id) on tablename to zhangsan;//授予对指定表特定字段的插入和修改权限,注意,只能是insert和update
grant alert all table to zhangsan;//授予zhangsan用户alert任意表的权限

/oralce对权限管理比较严谨,普通用户之间也是默认不能互相访问的/
grant select on tablename to zhangsan;//授予zhangsan用户查看指定表的权限
grant drop on tablename to zhangsan;//授予删除表的权限
grant insert on tablename to zhangsan;//授予插入的权限
grant update on tablename to zhangsan;//授予修改表的权限
grant insert(id) on tablename to zhangsan;
grant update(id) on tablename to zhangsan;//授予对指定表特定字段的插入和修改权限,注意,只能是insert和update
grant alert all table to zhangsan;//授予zhangsan用户alert任意表的权限

五、撤销权限
基本语法同grant,关键字为revoke

REVOKE CONNECT, RESOURCE FROM 用户名;
REVOKE SELECT ON 表名 FROM 用户名;
REVOKE SELECT, INSERT, DELETE ON 表名 FROM 用户名1, 用户名2;
六、查看权限
select * from user_sys_privs;//查看当前用户所有权限
select * from user_tab_privs;//查看所用用户对表的权限
select * from user_sys_privs;//查看当前用户所有权限
select * from user_tab_privs;//查看所用用户对表的权限

七、权限传递
即用户A将权限授予B,B可以将操作的权限再授予C,命令如下:

grant alert table on tablename to zhangsan with admin option;//关键字 with admin option
grant alert table on tablename to zhangsan with grant option;//关键字 with grant option效果和admin类似
grant alert table on tablename to zhangsan with admin option;//关键字 with admin option
grant alert table on tablename to zhangsan with grant option;//关键字 with grant option效果和admin类似

八、角色
角色。角色是一组权限的集合,将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限。
角色即权限的集合,可以把一个角色授予给用户
预定义角色是在数据库安装后,系统自动创建的一些常用的角色。下介简单的介绍一下这些预定角色。角色所包含的权限可以用以下语句查询:
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
用于创建拥有恢复库的用户。

create role myrole;//创建角色
grant create session to myrole;//将创建session的权限授予myrole
grant myrole to zhangsan;//授予zhangsan用户myrole的角色
drop role myrole;删除角色
/但是有些权限是不能授予给角色的,比如unlimited tablespace和any关键字/

查看角色所包含的权限
select * from role_sys_privs;

删除角色(通常由dba或具有drop any role系统权限的其它用户来执行)
drop role 角色名; --此时该角色所被授予的用户,将同时会失去该角色所包含的权限
drop role role1;
角色删除后,原来拥用该角色的用户就不再拥有该角色了,相应的权限也就没有了。
说明:
1)无法使用WITH GRANT OPTION为角色授予对象权限
2)可以使用WITH ADMIN OPTION 为角色授予系统权限,取消时不是级联

修改指定用户,设置其默认角色
alter user user1 default role role1;
alter user user1 default role all except role1;

设置当前用户要生效的角色
(注:角色的生效是一个什么概念呢?假设用户a有b1,b2,b3三个角色,那么如果b1未生效,则b1所包含的权限对于a来讲是不拥有的,只有角色生效了,角色内的权限才作用于用户,最大可生效角色数由参数MAX_ENABLED_ROLES设定;在用户登录后,oracle将所有直接赋给用户的权限和用户默认角色中的权限赋给用户。)
set role role1;//使role1生效

set role role,role2;//使role1,role2生效

set role role1 identified by password1;//使用带有口令的role1生效

set role all;//使用该用户的所有角色生效

set role none;//设置所有角色失效

set role all except role1;//除role1外的该用户的所有其它角色生效。

select * from SESSION_ROLES;//查看当前用户的生效的角色。

显示角色
当以用户的身份连接到数据库时,Oracle会自动激活默认的角色
通过dba_role_privs可以显示某个用户具有的所有角色以及当前默认的角色
select * from dba_role_privs where grantee='用户名'; --显示某个用户具有的所有角色以及当前默认的角色
select * from dba_roles; --显示所有角色,包括预定义和自定义的角色
select * from role_sys_privs where role='角色名' --显示角色所具有的系统权限
select * from dba_tab_privs where grantee='角色名'; --显示角色所具有的对象权限


相关博文:

发表新评论