oracle
第三天视频1(user)
SQL> create user test2 identified by test2 default tablespace test temporary tab
lespace temp;
以这个用户连接时,若不指定表空间,默认就放在缺省表空间里。
10g以前默认表空间system
10开始放在数据库的缺省表空间,就放在users里。
如果不指定表空间,就放在数据库的默认表空间
select * from database_properties;--DEFAULT_PERMANENT_TABLESPACE USERS Name of default permanent tablespace
--user表空间不能删除,默认表空间不能删除。如下
SQL> drop tablespace users;
drop tablespace users
*
ERROR at line 1:
ORA-12919: Can not drop the default permanent tablespace;
SQL> alter database default tablespace test1;--将默认表空间更改为test1
Database altered.
SQL> create user test3 identified by test3 temporary tablespace temp;--此时不指定默认表空间,缺省表空间就放在test1里。
User created.
select * from dba_users;--和用户相关的视图test3,default tablespace test1
若用test3连接,会提示没有create session权限
C:\Users\HP>sqlplus test3/test3
SQL*Plus: Release 10.2.0.4.0 - Production on Mon Oct 8 11:16:36 2012
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
ERROR:
ORA-01045: user TEST3 lacks CREATE SESSION privilege; logon denied
用sys用户登录,授予test3 create session权限
C:\Users\HP>sqlplus / as sysdba
SQL> grant create session to test3;
此时再用test3连接,就连上了。
C:\Users\HP>sqlplus test3/test3
SQL*Plus: Release 10.2.0.4.0 - Production on Mon Oct 8 11:18:51 2012
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
看一个用户具有哪些系统权限--SYS登录
select * from dba_sys_privs where grantee='TEST3';
这个地方有个缺点,口令是明码
SQL> alter user test3 password expire;--下次登录口令过期
User altered.
C:\Users\HP>sqlplus test3/test3
SQL*Plus: Release 10.2.0.4.0 - Production on Mon Oct 8 11:36:17 2012
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
ERROR:
ORA-28001: the password has expired
Changing password for test3
New password:
Retype new password:
Password changed
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
还有一个特性,用户锁定,不希望这个用户登录
--sys用户登录
SQL> alter user test3 account lock;--锁定,可以从dba_users里查看到ACCOUNT_STATUS,之前是OPEN
User altered.
C:\Users\HP>sqlplus test3/test3
SQL*Plus: Release 10.2.0.4.0 - Production on Mon Oct 8 11:39:39 2012
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
ERROR:
ORA-28000: the account is locked
解锁
SQL> alter user test3 account unlock;--解锁
User altered.
SQL> select status from v$instance;--必须是OPEN状态才能用
STATUS
------------
OPEN
再用test3登录,就没问题啦。
--TEST3
SQL> create table t(id int);--此时没有创建表的权限,不指定表空间,就放在TEST3用户的缺省表空间
create table t(id int)
*
ERROR at line 1:
ORA-01031: insufficient privileges
select * from system_privilege_map;--create session,create table
--sys
SQL> grant create table to test3;
Grant succeeded.
系统权限授给用户后,不需要重新连接。
--test3
SQL> create table t(id int);--提示对表空间TEST1无权限
create table t(id int)
*
ERROR at line 1:
ORA-01950: no privileges on tablespace 'TEST1'
--可通过两种方式quota
--sys
SQL> alter user test3 quota 10m on test1 quota 20m on users;
SQL> alter user test3 quota unlimited on system;--也可以不限制
User altered.
select *from dba_ts_quotas
--test3此时再创建表,就没有问题啦。
SQL> create table t(id int);
Table created.
select * from dba_roles;CONNECT,RESOURCE,DBA;角色权限
为什么CONNECT能连上数据库,因为CONNECT封装了CREATE SESSION 权限
select * from dba_sys_privs where grantee='CONNECT';--CREATE SESSION
select * from dba_sys_privs where grantee='RESOURCE';
CREATE TRIGGER
CREATE SEQUENCE ,CREATE TYPE ,CREATE PROCEDURE ,CREATE CLUSTER, CREATE OPERATOR, CREATE INDEXTYPE, CREATE TABLE
没有创建包,视图,序列。
UNLIMITED TABLESPACE不能授给角色,只能授给用户,可以使用数据库里所有的表空间,对表空间没限制。
当把RESOURCE授给用户的时候,UNLIMITED TABLESPACE就自动的授给用户啦。
SQL> grant UNLIMITED TABLESPACE to resource;--UNLIMITED TABLESPACE不能授给角色
grant UNLIMITED TABLESPACE to resource
*
ERROR at line 1:
ORA-01931: cannot grant UNLIMITED TABLESPACE to a role
SQL> grant resource to test3;
Grant succeeded.
--select * from dba_sys_privs where grantee='TEST3';--增加了一个UNLIMITED TABLESPACE
. select * from dba_role_privs where grantee='TEST3';--RESOURCE,但RESOURCE包含的权限不会单独体现在这里。
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
角色授给用户后,需要重新连接。
SQL> select * from session_privs;--这里面把角色打开了,一个SESSION 具有哪些权限
PRIVILEGE
----------------------------------------
CREATE SESSION
UNLIMITED TABLESPACE
CREATE TABLE
CREATE CLUSTER--角色包含的系统权限
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE
SQL> select * from session_roles;
ROLE
------------------------------
RESOURCE
--test3
SQL> create table tt(id int) tablespace users;--创建表的时候直接指定表空间
Table created.
--sys回顾一下创建用户
SQL> create user test4 identified by test4 default tablespace users temporary ta
blespace temp password expire account unlock quota unlimited on users;
User created.
oracle
第三天视频2(user,role)
--SQL> show user
USER is "TEST3"
SQL> grant create session to test4;--test3不能授予test4权限
grant create session to test4
*
ERROR at line 1:
ORA-01031: insufficient privileges
--sys select * from dba_sys_privs where grantee='TEST3';
SQL> grant create session to test3 with admin option;--此时
Grant succeeded.
此时,test3就可以授权给test4啦
--test3
SQL> grant create session to test4;
Grant succeeded.
此时若把test3的create session 的权限收回,test4的create session 仍然存在
--sys
SQL> revoke create session from test3;--不需要加admin option
此时test3没有create session 的权限,test4 仍然有。
--sys 角色就是一个空的目录,可以把权限授给目录,再把角色授给用户
SQL> create role role_test;--创建角色
Role created.
SQL> grant create session ,resource to role_test;--给角色授权,角色也可以授予角色,UNLIMITED TABLESPACE不能授给角色
Grant succeeded.
SQL> grant role_test to test4;--将角色授权给用户
Grant succeeded.
select * from dba_role_privs where grantee='TEST4';--
SQL> alter user test4 default role none;--缺省的角色不起作用啦
User altered.
连一下test4
SQL> select * from session_privs;--只剩下create session了
PRIVILEGE
----------------------------------------
CREATE SESSION
--sys
SQL> alter user test4 default role role_test;--再将角色改完缺省的,改完后default_role 变成yes啦
User altered.
select * from dba_role_privs where grantee='TEST4';
再连一下test4(需要断开重新连)
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
CREATE TABLE
CREATE CLUSTER
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
CREATE TYPE
CREATE OPERATOR
CREATE INDEXTYPE
9 rows selected.
--角色也可以加口令
alter role role_test identified by role_test;--防止有人随便none
--test4
SQL> set role none;
Role set.
SQL> set role role_test;--没加口令
set role role_test
*
ERROR at line 1:
ORA-01979: missing or invalid password for role 'ROLE_TEST'
SQL> set role role_test identified by role_test;--ok啦
Role set.
Profile--对资源的限制和对口令的限制
每个用户创建几个SESSION
每个SESSION使用多少CPU
每次调用需要CPU
比较有用的:空闲时间 Idle time,空闲多长时间不工作,session断开一段时间
新建一个profile,名叫profile_test,将idle_time设置为1分钟,关联一下用户(默认的都是系统的DEFAULT)
--sys
SQL> alter user test4 profile profile_test;
User altered.
select * from dba_users where username='TEST3';--PROFILE 变为PROFILE_TEST
要想让整个PROFILE起作用,还需要修改个参数
--sys
SQL> show parameter RESOURCE_LIMIT
NAME TYPE VALUE
------------------------------------ ----------- ------
resource_limit boolean FALSE
SQL> alter system set resource_limit=true;
SQL> select sysdate from dual;
SYSDATE
-------------------
2012/11/16 09:51:01
SQL> select sysdate from dual;--过段时间再查询
select sysdate from dual
*
ERROR at line 1:
ORA-02396: exceeded maximum idle time, please connect again
口令里不要包含@,F:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\utlpwdmg.sql
SQL> @F:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\utlpwdmg.sql
Function created.
Profile altered.
再看下profile
--sys
SQL> alter user test3 identified by test3;
alter user test3 identified by test3
*
ERROR at line 1:
ORA-28003: password verification for the specified password failed
ORA-20001: Password same as or similar to user
SQL> alter user test3 identified by test3!;
alter user test3 identified by test3!
*
ERROR at line 1:
ORA-00922: missing or invalid option
SQL> alter user test3 identified by test3$;
User altered.
SQL> alter user test3 identified by test3#;
User altered.
把^放进来看看--修改utlpwdmg.sql
重新执行下脚本,还是不行,但也可以让它行,加上双引号可以
SQL> alter user test3 identified by test3^;
alter user test3 identified by test3^
*
ERROR at line 1:
ORA-00922: missing or invalid option
SQL> alter user test3 identified by "test3^";
User altered.
--脚本
ALTER PROFILE DEFAULT LIMIT
PASSWORD_LIFE_TIME 60
PASSWORD_GRACE_TIME 10
PASSWORD_REUSE_TIME 1800
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME 1/1440
PASSWORD_VERIFY_FUNCTION verify_function;
--连续三次口令错误,什么时候解除锁定呢?到时间后,再连接的时候解除锁定
锁定的时间是,实际上是PASSWORD_LOCK_TIME 1/1440
C:\Users\HP>sqlplus test3/test3
SQL*Plus: Release 10.2.0.4.0 - Production on Fri Nov 16 10:10:17 2012
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
ERROR:
ORA-01017: ???/????; ?????
Enter user-name:
C:\Users\HP>sqlplus test3/test3
SQL*Plus: Release 10.2.0.4.0 - Production on Fri Nov 16 10:10:23 2012
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
ERROR:
ORA-01017: ???/????; ?????
Enter user-name:
C:\Users\HP>sqlplus test3/test3
SQL*Plus: Release 10.2.0.4.0 - Production on Fri Nov 16 10:10:25 2012
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
ERROR:
ORA-01017: ???/????; ?????
Enter user-name:
C:\Users\HP>sqlplus test3/test3
SQL*Plus: Release 10.2.0.4.0 - Production on Fri Nov 16 10:10:28 2012
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
ERROR:
ORA-28000: ??????
select * from dba_users;--LOCKED(TIMED)
C:\Users\HP>sqlplus test3/test3
SQL*Plus: Release 10.2.0.4.0 - Production on Fri Nov 16 10:12:31 2012
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
ERROR:
ORA-01017: ???/????; ?????
select * from dba_users;--OPEN,再连接的时候解除锁定
口令能用60天(口令的生命),还有10天宽限(grace time),到达60天后,每次都警告
password reuse time:1800天,5年,在5年内不能重复使用口令
password reuse max:如果想在5年重新使用,必须修改过几次以上,就限制不住5年了。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/148459/viewspace-1062208/
,如需转载,请注明出处,否则将追究法律责任。