SQL> --清屏有两种方式:host cls和clear
screen
SQL> host cls;
SQL>
--&:可以替代查询语句中用到的变量,但是该变量在执行时,需要用户输入
SQL> select * from emp where
job='&job';
输入 job 的值:
MANAGER
原值
1: select * from emp where
job='&job'
新值
1: select * from emp where
job='MANAGER'
EMPNO ENAME
JOB
MGR HIREDATE
---------- --------------------
------------------ ---------- --------------
SAL
COMM
DEPTNO
---------- ---------- ----------
7566 JONES
MANAGER
7839 02-4月
-81
2975
20
7698 BLAKE
MANAGER
7839 01-5月
-81
2850
30
7782 CLARK
MANAGER
7839 09-6月
-81
2450
10
SQL> --设置显示的行宽
SQL> set linesize 160;
SQL> --设置每页显示的行数目
SQL> set pagesize 30;
SQL>
--用户管理,一般具有dba权限的用户才能进行用户操作,不然会提示权限不足
SQL> create user xiaoming identified
by xm123;
create user xiaoming identified by
xm123
*
第 1
行出现错误:
ORA-01031:
权限不足
SQL> --切换到管理员
SQL> conn system/password as
sysdba;
已连接。
SQL> create user xiaoming identified
by xm123;
用户已创建。
SQL>
--在oracle10中,用户的密码必须以字母开头,不然她不会创建用户,而且会报告错误
SQL>
--新创建的用户是不能登陆的,因为新创建的用户没有任何权限
SQL> conn
xiaoming/xm123;
ERROR:
ORA-01045: user XIAOMING lacks CREATE
SESSION privilege; logon denied
警告: 您不再连接到 ORACLE。
SQL> show user;
USER 为 ""
SQL> conn system/password as
sysdba;
已连接。
SQL>
--需要管理员给用户分配相应的权限,新创建的用户才能登陆
SQL> grant create session to
xiaoming;
授权成功。
SQL> --创建用户的细节
SQL> create user xiaohong identified
by xh123
2
default tablespace users
3
temporary tablespace temp
4
quota 3m on users;
用户已创建。
SQL> --identified by
表明该用户将用数据库验证的方式验证
SQL> --default tablespace
users表示用户的表空间在users上
SQL> --temporary tablespaces
temp表示该用户的临时表创建在temp表空间
SQL> --quota 3m on
users表明用户建立的数据对象(表,索引,视图,pl/sql块等等)最大只能是3m
SQL> --给用户授予登陆权限
SQL> grant connect to
xiaohong;
授权成功。
SQL> --希望用户建立数据对象没有空间的限制
SQL> grant resource to
xiaohong;
授权成功。
SQL> --给用户修改密码
SQL> password xiaohong;
更改 xiaohong 的口令
口令已更改
SQL> --如果没有dba的权限,则拥有alter user
的系统权限也可以
SQL> alter user xiaohong identified
by xh123;
用户已更改。
SQL>
--删除用户,一般用dba的身份去删除用户,如果其他用户想要删除用户则需要有drop user的权限drop user 用户名
[cascade],最后的参数是可选的,如果要删除的用户已经建立了数据表,那么在删除该用户的的时候需要在语句后边加上cascade参数
SQL> drop user xiaoming;
用户已删除。
SQL>
--用户管理综合案例一:创建用户xiaoming,给他分配两个角色,可以让xiaoming登陆和创建表,并且可以操作自己创建的表,然后回收角色,删除该用户
SQL> --创建用户
SQL> create user xiaoming identified
by xm123;
用户已创建。
SQL> --分配角色
SQL> grant connect to
xiaoming;
授权成功。
SQL> grant resource to
xiaoming;
授权成功。
SQL> --修改xiaoming密码
SQL> password xiaoming;
更改 xiaoming 的口令
口令已更改
SQL> --用xiaoming登陆
SQL> conn
xiaoming/xm1234;
已连接。
SQL> --创建表
SQL> create table xm(id
number);
表已创建。
SQL> --添加数据
SQL> insert into xm
values(1);
已创建 1 行。
SQL> --查看表
SQL> select * from xm;
ID
----------
1
SQL> --使用system用户登陆,回收角色
SQL> conn system/password as
sysdba;
已连接。
SQL> revoke connect from
xiaoming;
撤销成功。
SQL> revoke resource from
xiaoming;
撤销成功。
SQL> --删除用户
SQL> drop user xiaoming
cascade;
用户已删除。
SQL>
--方案:当一个用户创建好以后,如果该用户创建了任意一个数据对象,这时,dbms(Data Base Management
System)就会创建一个方案与该用户对应,并且该方案的名字和用户名一致,如果该用户没有创建数据对象,dbms是不会为该用户创建方案的
SQL>
--要求:让xiaohong可以查询scott用户的emp表
SQL> conn
scott/password;
已连接。
SQL> grant select on emp to
xiaohong;
授权成功。
SQL>
--xiaohong要查询scott的emp表时,需要指定方案名,不然如果xiaohong的方案中有同名的表,查询的就是xiaohong的方案中的表
SQL> conn
xiaohong/xh123;
已连接。
SQL> select * from
scott.emp;
EMPNO ENAME
JOB
MGR HIREDATE
SAL
COMM
DEPTNO
---------- --------------------
------------------ ---------- -------------- ---------- ----------
----------
7369 SMITH
CLERK
7902 17-12月-80
800
20
7499 ALLEN
SALESMAN
7698 20-2月 -81
1600
300
30
7521 WARD
SALESMAN
7698 22-2月 -81
1250
500
30
7566 JONES
MANAGER
7839 02-4月
-81
2975
20
7654 MARTIN
SALESMAN
7698 28-9月 -81
1250
1400
30
7698 BLAKE
MANAGER
7839 01-5月
-81
2850
30
7782 CLARK
MANAGER
7839 09-6月
-81
2450
10
7788 SCOTT
ANALYST
7566 19-4月
-87
3000
20
7839 KING
PRESIDENT
17-11月-81
5000
10
7844 TURNER
SALESMAN
7698 08-9月 -81
1500
0
30
7876 ADAMS
CLERK
7788 23-5月 -87
1100
20
7900 JAMES
CLERK
7698 03-12月-81
950
30
7902 FORD
ANALYST
7566
03-12月-81
3000
20
7934 MILLER
CLERK
7782 23-1月 -82
1300
10
已选择14行。
SQL>
--给用户赋权限的命令是grant,回收权限的命令是revoke
SQL>
--权限分为系统权限和对象权限,系统权限是指用户对数据库相关的权限,对象权限是和用户操作数据对象相关的权限,其实我们所赋给用户的权限准确讲,不是权限,而是角色。
SQL> conn system/password as
sysdba;
已连接。
SQL> create user xiaoming identified
by xm123;
用户已创建。
SQL>
--希望xiaoming可以吧权限继续赋给别人,如果是系统权限:
SQL> grant connect to xiaoming with
admin option;
授权成功。
SQL> --如果是对象权限
SQL> conn
scott/password;
已连接。
SQL> grant select on scott.emp to
xiaoming with grant option;
授权成功。
SQL> conn
xiaoming/xm123;
已连接。
SQL>
--用xiaoming将对scott的emp的查询权限赋给xiaohong
SQL> grant select on scott.emp to
xiaohong;
授权成功。
SQL>
--此时如果scott吧xiaoming对emp表的查询权限回收,那么xiaohong也将失去该权限,也就是xiaohong被株连了
SQL> conn
scott/password;
已连接。
SQL> revoke select on emp from
xiaoming;
撤销成功。
SQL> conn
xiaohong/xh123;
已连接。
SQL> select * from
scott.emp;
EMPNO ENAME
JOB
MGR HIREDATE
SAL
COMM
DEPTNO
---------- --------------------
------------------ ---------- -------------- ---------- ----------
----------
7369 SMITH
CLERK
7902 17-12月-80
800
20
7499 ALLEN
SALESMAN
7698 20-2月 -81
1600
300
30
7521 WARD
SALESMAN
7698 22-2月 -81
1250
500
30
7566 JONES
MANAGER
7839 02-4月
-81
2975
20
7654 MARTIN
SALESMAN
7698 28-9月 -81
1250
1400
30
7698 BLAKE
MANAGER
7839 01-5月
-81
2850
30
7782 CLARK
MANAGER
7839 09-6月
-81
2450
10
7788 SCOTT
ANALYST
7566 19-4月
-87
3000
20
7839 KING
PRESIDENT
17-11月-81
5000
10
7844 TURNER
SALESMAN
7698 08-9月 -81
1500
0
30
7876 ADAMS
CLERK
7788 23-5月 -87
1100
20
7900 JAMES
CLERK
7698 03-12月-81
950
30
7902 FORD
ANALYST
7566
03-12月-81
3000
20
7934 MILLER
CLERK
7782 23-1月 -82
1300
10
已选择14行。
SQL>
--不对啊,出问题了,这个可能是oracle11g的更新吧,有待研究
SQL> conn
xiaoming/xm123;
已连接。
SQL> select * from
scott.emp;
select * from scott.emp
*
第 1
行出现错误:
ORA-00942:
表或视图不存在
SQL> --利用profile管理用户口令
SQL>
--profile是口令限制,资源限制的命令集合,当建立数据库时,oracle会自动建立名称为defaule的profile,当建立用户没有指定profile选项,那么oracle就会将default分配给用户
SQL>
--1.账户锁定:指定该用户登录时最多可以输入密码的次数,也可以指定用户锁定的时间(天),一般用dba的身份去执行该命令.
SQL> --基本语法:create profile 文件名 limit
failed_login_attempts 输入密码的次数 password_lock_time 锁定天数;alter user
用户名 profile 文件名;
SQL>
--例子:指定xiaoming这个用户最多只能尝试三次登陆,锁定时间为2天
SQL> --创建profile文件
SQL> conn system/password as
sysdba;
已连接。
SQL> create profile lock_account
limit failed_login_attempts 3 password_lock_time 2;
配置文件已创建
SQL> --执行文件
SQL> alter user xiaoming profile
lock_account;
用户已更改。
SQL>
--此时,xiaoming已经被设定登陆次数,如果xiaoming三次以内没有登陆成功,会报出ORA-28000:the
account is locked错误
SQL> --2.给用户解锁
SQL> alter user xiaoming account
unlock;
用户已更改。
SQL>
--解锁是临时的,只是在被锁定的天数内该用户再次可以登陆,但是如果登陆错误次数再一次超过设定的锁定次数,该用户还是会被锁定
SQL>
--3.终止口令:为了让用户定期修改密码可以使用终止口令来完成,同样这个命令也需要dba的身份完成
SQL> --终止口令语法:create profile 文件名
limit password_life_time 使用天数 password_grace_time 宽限天数
继续加限制条件;alter user 用户名 profile 文件名;
SQL>
--例子:给xiaoming创建一个profile文件,要求他每隔十天就要修改一次自己的登陆密码,宽限期限为2天。
SQL> show user;
USER 为 "SYS"
SQL> create profile myprofile limit
password_life_time 10 password_grace_time 2;
配置文件已创建
SQL> alter user xiaoming profile
myprofile;
用户已更改。
SQL>
--4.口令历史:如果希望用户在修改密码时,不能使用以前使用过的密码,可以使用口令历史,这样oracle就会将口令修改的信息存放到数据字典中,这样当用户修改密码时,oracle就会对新旧密码进行比较,当发现新旧密码一样时,就提示用户重新输入密码。
SQL> --例子:
SQL> conn
system/password;
已连接。
SQL> show user;
USER 为 "SYSTEM"
SQL> --1.建立profile
SQL> create profile password_history
limit password_life_time 10 password_grace_time
2
password_reuse_time 10;
配置文件已创建
SQL>
--password_reuse_time:指定口令可重用时间,即10天后就可以重新使用
SQL> --2.将profile分配给用户
SQL> alter user xiaoming profile
password_history;
用户已更改。
SQL>
--删除profile,当某个profile不再需要时,可以删除该文件,文件被删除后,用这个文件
的用户也会被释放
SQL> --语法:drop profile 文件名
[cascade];
SQL>
--如果profile指定了用户,则删除时必须加cascade,不然会报错
SQL> drop profile
password_history;
drop profile
password_history
*
第 1 行出现错误:
ORA-02382: 概要文件 PASSWORD_HISTORY 指定了用户,
不能没有 CASCADE 而删除
SQL> drop profile password_history
cascade;
配置文件已删除。
SQL>
--加了cascade后,会把级联的相关东西也删除掉
SQL> drop profile lock_account
cascade;
配置文件已删除。
SQL> drop profile myprofile
cascade;
配置文件已删除。
SQL> spool off;