---用户与权限管理----
--1,用户--
Create User 用户名 Identified By "口令"
Default Tablespace 表空间
---指定默认表空间,若不指定,则SYSTEM表空间将被指定为用户的默认表空间,为了提高数据库的性能,同时为了方便管理数据,Oracle建议为用户指定一个默认表空间---
Temporary Tablespace 临时表空间
Quota 空间配额大小 On 表空间
Password Expire
Account Lock|Unlock
-
Create User user1 Identified By "1234"
-
Default Tablespace Users
-
Temporary Tablespace temp
-
Quota 20M On Users ---若希望用户在所有表空间上都具有无限制的空间配额,则只要为其指定Unlimited tablespaces系统权限即可---
-
Password Expire
-
Account Unlock;
--删除用户--
Drop User 用户名
--需要注意的是,如果一个用户的模式中已经包含一些数据库对象,那么这个用户不能直接删除,必须指定cascade--
Drop User scott Cascade;
--用户的相关信息从数据字典视图dba_users中获得--
-
Select username,Password,default_tablespace,account_status From dba_users;
--修改用户口令--
Password 用户名 --若没有指定用户名,则默认为当前用户--
Alter User 用户 Identified By "新口令"
--alter也可以修改其它信息--
-
Alter User user1
-
Default Tablespace ts1
-
Temporary Tablespace ts1
-
Quota Unlimited On ts1;
--系统权限的管理--
--为用户授予权限的grant命令语法--
Grant 权限1,权限2,... To 用户1,用户2,... With Admin Option; --with admin option的好处是权限的获得者可以再将权限授予其他用户--
---权限包括系统权限和对象权限--
--系统权限--
Create Session,
Create Table,
Create Resource,
Create View,
Create User,
Create Trigger,
Create Tablespace,
Create procedure.
Alter Session,Database,User
--为了使一个用户可以操作数据库,至少需要有create session,create table和有指定(表)空间配额的3个权限--
Grant Create Session,Create Table,Unlimited Tablespace To 用户名;
--回收权限--
--注意:系统权限可以转授,但是回收时不能间接回收--
Revoke 系统权限1,系统权限2 ...
From 用户1,用户2 ...
--对象权限 主要是对数据库对象中的数据的访问权限,这类权限主要针对普通用户--
Grant 对象权限1(列名),对象权限2(列名)...
On 对象 To 用户1,用户2... With Grant Option
-
Grant Select On dept To user1 With Grant Option
-
Grant Insert(empno),Update(sal) On emp To user1,user2
-
Grant Execute On functional To user1
--回收权限--
--权限insert,update,references在分配时可以指定相关的列,但在回收时不能指定列,而只能指定表名--
Revoke 对象权限1,对象权限2... On 对象
From 用户1,用户2...
-
Revoke Update(sal) On emp From user2 --错误语句--
-
Revoke Update On emp From user2
--数据库中所有的系统权限--
-
Select Name From system_privilege_map;
--sys从数据字典视图dba_sys_privs中查询任何用户所具有的系统权限--
-
Select grantee,Privilege,admin_option From dba_sys_privs Where grantee='SCOTT'
----普通用户通过user_sys_privs查询 用户直接获得的系统权限,即通过grant命令授予当前用户的系统权限---
Select username,Privilege,admin_option From user_sys_privs
--从数据字典视图session_privs中可以查询一个用户在当前会话中所具有的系统权限--
-- session_privs权限==直接获得的权限 + 該用户从角色中间接获得的系统权限 ---
--对象权限有关的数据字典视图:dba_tab_privs,dba_col_privs,user_tab_privs和user_col_privs--
-
-- dba_tab_privs 查询任何用户所具有的对象权限 ---
-
Select grantee,Privilege,grantor,table_name,grantable From dba_tab_privs
-
Where grantee='USER1';
-
--dba_col_privs 查询用户在列上的权限 --
-
Select grantee,table_name,column_name,Privilege,grantor,grantable
-
From dba_col_privs Where grantee='USER1';
-
Select grantee,table_name,column_name,Privilege,grantor,grantable
-
From user_tab_privs Where grantee='SCOTT';
--角色--
--connect角色 包含的权限有create Session --
/* resource角色 包含的权限有 crate sequence,create trigger,create cluster,create procedure,
create type,create operator,create table ,create indextype */
Create Role 角色名
Drop Role 角色名
Grant Select On emp To role1
Revoke Select On emp From role1
--角色信息的查询--
/* dba_roles 记录数据库中所有角色
dba_role_privs 记录所有被授予用户或另一角色的角色
user_role_privs 记录所有被授予当前用户的角色
role_role_privs 记录一个角色中包含的其他角色
role_sys_privs 记录一个角色中包含的系统权限
role_tab_privs 记录一个角色中包含的对象权限
session_roles 记录当前会话中所使用的角色 */
--获得系统中所有的角色--
-
Select Role From dba_roles
--查询用户user1所拥有的角色和默认角色--
-
Select granted_role,default_role From dba_role_privs Where grantee='user1'
--查询角色connect所包含的系统权限--
-
Select Privilege,admin_option From role_sys_privs Where Role='CONNECT'
--profile的管理--
-
--查询用户的会话信息,强制终止用户会话,锁定用户帐号--
-
Select username,Sid,serial# From v$session Where username='SCOTT';
-
Alter System Kill Session '144,7'; --144和7分别为用户会话的sid和serial#--
-
Alter User scott Account Lock;
--profile创建--
Create Profile profile名称 Limit
口令限制
资源限制
--指定profile 每个用户只能指定一个profile--
-
Create User user2 Identified By "1234" Profile p1
-
Alter User scott Profile p1
--从数据字典dba_users中可以获得为每个用户指定的profile-
-
Select Profile From dba_users Where username='SCOTT';
-
--数据字典dba_profiles--
-
Select resource_name,Limit From dba_profiles Where Profile='P1';
-
--删除profile--
-
Drop Profile profile名字 [Cascade];
--Profile限制--
/* Failed_Login_Attempts 允许的失败登录次数,默认值为10次
Password_Lock_Time 账号锁定时间,默认值为1天
Password_Life_Time 口令的有效期,默认值为180天
Password_Grace_Time 口令有效期的延长期,默认值为-周、7天
Password_Reuse_Time 为了再次使用过去用过的口令,必须经过的天数
Password_Reuse_Max 为了再次使用过去用过的口令,必须使用不同口令的次数
Password_Reuse_Time 和 Password_Reuse_Max 必须一起使用 */
--如果用户失败的登录次数达到3次,则用户账号将被锁定5天--
-
Create Profile p1 Limit Failed_Login_Attempts 3 Password_Lock_Time 5
--用户在30天内必须把口令修改过5次后,才能使用过去用过的口令--
-
Create Profile p2 Limit Password_Reuse_Time 30 Password_Reuse_Max 5
--利用profile对用户使用资源进行控制--
如果要使profile对用户使用系统资源起限制作用,则需要将参数Resource_limit的值设置为True
-
Alter System Set resource_limit=True
Sessions_Per_User 一个用户所允许的并发会话数目
Cpu_Per_Session 用户在一个会话内所使用的Cpu时间的总和,时间单位为0.01秒
Logical_Reads_Per_Session 用户在一个会话内所能访问的数据块的数量(包括物理读和逻辑读的数量)
Connect_Time 一个用户会话所能持续的时间,以分钟为单位;超过这个时间,会话将自动断开
Idle_Time 一个用户会话所允许的连续的空闲时间,以分钟为单位,超过这个时间,会话将自动断开
Private_Sga 如果数据库
服务器的连接模式为共享模式,这个参数用来限制为一个用户会话所分配的Sga空间
Cpu_Per_Call 用户执行的每条命令所使用的Cpu时间,时间单位为0.01秒
Logical_Reads_Per_Call 用户执行的每条命令所能访问的数据块的数量
如果能够对用户消耗Cpu时间、访问数据块的数量等这些资源进行限制,那么就可以有效地
防止诸如死循环的执行、访问一个大表中的所有数据这类情况的发生。
-
Create Profile p3 Limit
-
Sessions_Per_User 100
-
Logical_Reads_Per_Session 500
-
Connect_Time 5
-
Create Profile p4 Limit
-
Cpu_Per_Call 10
-
Logical_Reads_Per_Call 50
/* 若没有为用户指定profile文件,则用户会受默认profile限制,如果要对所有用户进行同样的限制,那么只要修改
这个默认profile所包含的限制,并且不要为用户指定其他的profile */
-
Select resource_name,Limit From dba_profiles Where Profile='DEFAULT';