--查看所有用户:
select * from dba_users; 
select * from all_users; 
select * from user_users;
--查看用户或角系统权限(直接赋值给用户或角的系统权限):
select * from dba_sys_privs; 
select * from user_sys_privs; (查看当前用户所拥有的权限)
--查看角(只能查看登陆用户拥有的角)所包含的权限
select * from role_sys_privs;
--查看用户对象权限:
select * from dba_tab_privs; 
select * from all_tab_privs; 
select * from user_tab_privs;
--查看所有角:
select * from dba_roles;
--查看用户或角所拥有的角:
select * from dba_role_privs; 
select * from user_role_privs;
--查看哪些用户有sysdba或sysoper系统权限(查询时需要相应权限)
select * from v$pwfile_users
--sqlplus中查看一个用户所拥有权限 username即用户名要大写才行。
select * from dba_sys_privs where grantee='username';
-
-创建用户
create user <user name> identified by <password>   
default tablespace <tablespace name>   
temporary tablespace <temporary tablespace name>;   
--用户授权
grant <object/system privilege> to <user name>; 
--用户权限收回
revoke <object/system privilege> to <user name>;
revoke all on table_name from user_name;
--删除用户 
drop user <user name> cascade;
-
-实体权限分类:select, update, insert, alter, index, delete, all //all包括所有权限
--execute //执行存储过程权限
grant select, update, insert on <table name> to <user name>;
grant all on  <table name> to <user name>;
grant create session to public; --表示把创建表的权限赋予所有人
grant all on <table name>  to public; -- public表示是所有的用户,这里的all权限不包括drop。
--修改用户:
alter user username identified password
default tablespace tablespace
temporary tablespace tablespace
profile profile
quota integer/unlimited on tablespace;
--修改口令字:
alter user acc01 identified by "12345";
--修改用户缺省表空间:
alter user acc01 default tablespace users;
--修改用户临时表空间
alter user acc01 temporary tablespace temp_data;
--查询默认临时表空间
select * from database_properties where property_name='default_temp_tablespace';
--修改默认临时表空间
alter database default temporary tablespace temp1;
-
-所有用户的默认临时表空间都将切换为新的临时表空间:
--查看用户临时表空间
select username,temporary_tablespace,default_ from dba_users;
--强制用户修改口令字:
alter user acc01 password expire;
--查看用户开始状态
select username,account_status,lock_date from dba_users;
--将用户加锁
alter user acc01 account lock; --加锁
alter user acc01 account unlock; --解锁
--解锁并设置远程登录尝试次数
alter profile default limit failed_login_attempts unlimited;
--orcale 权限管理。建议
给角分配权限,然后将用户分配到角下。
--类同于操作系统的用户组和用户权限的管理、
--创建角
create role <role name> [identified by <password>/using <package>/externally/globally ];
--角授权:
grant <object/system privilege> to <role name>;
--从角收回权限:
revoke <privilege> from <role name>;
--将角赋予另一个角或用户:
grant <role> to <username or role> ;
alter user user_name quota unlimited on osdb;
--系统权限的传递,需带上with admin option:
grant alter table to user_name with admin option;
--那么user_name可以通过把该权限传递下去,
--对象权限的传递,需带上 with grant option:
grant select on table_name to user_name with grant option;
--对表的列进行授权
grant select on table_name(table_column) to user_name;
--创建带有口令以角(在生效带有口令的角时必须提供口令)
create role role1 identified by password1;
-
-修改角:是否需要口令
alter role role1 not identified;
alter role role1 identified by password1;
--设置当前用户要生效的角
/*(注:角的生效是一个什么概念呢?假设用户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;--查看当前用户的生效的角。
--修改指定用户,设置其默认角
alter user user1 default role role1;
alter user user1 default role all except role1;
--删除角
drop role role1;
--角删除后,原来拥用该角的用户就不再拥有该角了,相应的权限也就没有了。
--说明:
--1)无法使用with grant option为角授予对象权限
-
-2)可以使用with admin option 为角授予系统权限,取消时不是级联
/*qracle为了兼容以前的版本,提供了三种标准的角(role):connect、resource和dba。
connect role(连接角)
临时用户,特别是那些不需要建表的用户,通常只赋予他们connect role。connect是使用oracle的简单权限,这种权限只有在对其他用户的表有访问权时,包括select、insert、update和delete等,才会变得有意义。拥有connect role的用户还能够创建表、视图、序列(sequence)、簇(cluster)、同义词(synonym )、会话(session)和与其他数据库的链(link)
resource role(资源角)
更可靠和正式的数据库用户可以授予resource role。resource提供给用户另外的权限以创建他们自己的表、序列、过程(procedure)、触发器(trigger)、索引(index)和簇(cluster)。
dba role(数据库管理员角)
dba role拥有所有的系统权限----包括无限制的空间限额和给其他用户授予各种权限的能力。system由dba用户拥有。下面介绍一些dba经常使用的典型权限。*/
--权限说明
/*connect和resource是两个系统内置的角,和dba是并列的关系。
系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。
实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。
接下来看系统权限,
dba:拥有全部特权,是系统最高权限,只有dba才可以创建数据库结构。
resource:拥有resource权限的用户只可以创建实体,不可以创建数据库结构。
connect:拥有connect权限的用户只可以登录oracle,不可以创建实体,不可以创建数据库结构。
对于普通用户:授予connect, resource权限。
对于dba管理用户:授予connect,resource, dba权限。
且系统权限只能由dba用户授出:sys, system(最开始只能是这两个用户)。普通用户通过授权可以具有与system相同的用户权限,
但永远不能达到与sys用户相同的权限,system用户的权限也可以被回收。
另外,对于with admin option级联授权的问题,
1)如果使用with admin option为某个用户授予系统权限,那么对于被这个用户授予相同权限的所有用户来说,取消该用户的
系统权限并不会级联取消这些用户的相同权限。
2)系统权限无级联,即a授予b权限,b授予c权限,如果a收回b的权限,c的权限不受影响;系统权限可以跨用户回收,即a可以
直接收回c用户的权限。*/
--grant 语法:
--显式授权(直接将对象授权给用户)
grant privilege [, ...] on object [, ...]  to  { public| group | username|role} [with grant option ] 
--隐式授权(通过将角授权给用户)
grant role to  { public| group | username|role}
--语法说明:
/*privilege (权限)
可能的权限有:
select--访问声明的表/视图的所有列/字段.
insert--向声明的表中插入所有列字段.
update--更新声明的所有列/字段.
delete --从声明的表中删除所有行.
rule  在表/视图上定义规则 (参见 create rule 语句).
all 赋予所有权限.
object 赋予权限的对象名.
可能的对象是: 
table (表)
view (视图)
sequence (序列)
index (索引)
public    代表是所有用户的简写.
group    将要赋予权限的组group .目前的版本中,组必须是用下面方
法显式创建的.
username  将要赋予权限的用户名.public 是代表所有用户的简写.
role      某个角,(如dba)
with grant option 允许向别人赋予同样权限,被授权的用户可以继续授权.
描述
对象创建后,除了创建者外,除非创建者赋予(grant)权限,其他人没有访问对象的权限。
grant 允许对象的创建者给某用户或某组或所有用户(public)某些特定的权限。不需要给创建者赋予(grant)对象的权限,创建者自动拥有对象的所有权限,包括删除它的权限。
说明
oracle不允许在过程中使用未经显式授权的对象. 要使用另一用户的对象,必须通过另一用户给自己显示授权。
因为oracle在编译存储过程时并不检查定义者拥有的角,只是检查其被显式授予的权限,而dba也是一种角,所以即使是dba,也需要显式授权。
二、授权方式 (显式和隐式)
对象授权有两种模式,显式和隐式: 
显示授权和隐式授权的区别是:显示授权是直接把对象授权给用户,隐式授权是给用户授予角的方式来实现授权。
*/
--显式授权是直接用grant语句进行授权。
--语法:
grant 某种权限 to 用户
--如:
conn  user1/password
grant select  on table1 to user2;    --- 将user1的表table1的select 权限显示授权给user2
grant update  on table1 to user2;    --- 将user1的表table1的update权限显示授权给user2
-
connect to和connect with的区别-注:用system/manager登录是没法授权的,要使user2用户能在存储过程里面访问user1用户的表,必须以user1用户(该用户有dba权限)登录,然后授权就可以了。
grant select on user1.ma_userinfo to user2
--隐式授权则是通过role来授权。
--语法:
grant 某个角 to 用户
--如: 
conn  user1 
grant select on table1 to role1;    --- 将user1的表table1的select权限显示授权给role1
conn  system 
grant role1 to user2;                --- 给user2授与role1的权限。
--收回权限
--语法:
revoke 权限 from 用户;
--例子:
  revoke select on table1 from user1; --收回查询select表的权限;
  revoke all    on table1 from user1;
grant  connect to xujin;
  revoke  connect  from xujin
revoke  role1    from user2;
-----------------------------------------------------------------
--oracle用户删除不了,提示无法删除当前连接用户
alter user xxx account lock;
select * from v$session where username='lgdb';
alter system kill session 'xx,xx'drop user xx cascade
--或者shutdown掉数据库,再重启
--具体可如下: 
--查看用户的连接状况 
select username,sid,serial# from v$session
------------------------------------------
/*如下结果:   
username          sid                serial#
----------------------------------------
netbnew   
513              22974 
netbnew          514              18183 
netbnew          516              21573 
netbnew          531              9 
wuzhq            532              4562 */
--到要删除用户的sid,和serial,并删除
-------------------------------------------
--如:你要删除用户'wuzhq',可以这样做:   
alter system kill session'532,4562'   
--删除用户 
--------------------------------------------
drop user username cascade 
/*(**)如果在drop 后还提示ora-01940:无法删除当前已链接的用户,说明还有连接的session,
可以通过查看session的状态来确定该session是否被kill 了,用如下语句查看:*/
------------------------------------- 
select saddr,sid,serial#,paddr,username,status from v$session where username is not null
/*结果如下(以我的库为例): 
saddr                    sid          serial#            paddr              username              status 
-------------------------------------------------------------------------------------------------------- 
564a1e28                  513          22974              569638f4          netbnew              active 
564a30dc                  514          18183              569688cc          netbnew              inactive     
564a5644                  516          21573              56963340          netbnew              inactive 
564b6ed0                  531          9                  56962d8c          netbnew              inactive     
564b8184                  532          4562              56a1075c          wuzhq                killed 
1.你可以用 alter user 用户id account unlock 先解开这个用户锁定 
2.这个机制是在用户的profile中设定,profile主要是对系统资源和用户囗令的管理,你可以打开查看,里面有个 failed_login_attempts 参数,
你还可以结合其它的参数一起使用来管理资源和囗令。系统有个默认的profile叫default 给个示例*/
create profile luck_prof limit
sessions_per_user 8
cpu_per_session 16800 
logical_reads_per_session 23688
connect_time 268
idle_time 38;
--囗令的,如修改 default 
alter profile default limit
password_life_time 60
password_grace_time 10
password_reuse_time 1800
failed_login_attempts 3
password_lock_time 1/1440; 
--然后再创建或修改用户时指定一个profile如:
create user wuser
identified by wuser
....... 
profile luck_prof