开发工具与关键技术:Oracle
作者:吴东梅
撰写时间:20190420
创建用户
DBA 使用 CREATE USER 语句创建用户
语法:
CREATE USER user --user 是用户名
IDENTIFIED BY password; --新用户的登录密码
创建用户
创建一个用户名为orcltest,密码为orcltest 的用户。
CREATE USER orcltest
IDENTIFIED BY orcltest;
创建成功之后,可以把服务端的命令SQL Plus 窗口打开,可以方便用来验证此用户到底有没有创建成功,初次登录的时候会报该用户没有创建session的权限,无法登录。如下图所示:
1、先给orcltest 赋予create session (创建会话)权限
grant create session to orcltest;
授予成功之后,再次在此窗口进行登录,会发现该用户已经可以登录了。如下图所示:
现在我想用此用户去创建表的时候,就会报以下的错误:权限不足
2、给orcltest 赋予create table(创建表)权限
grant create table to orcltest
赋予成功之后,再次去创建表,就会成功,如下图:
也可以重新打开一个Oracle,用新用户去登录来实现一些权限,上面的操作也可以在Oracle去重新操作验证。登录Oracle之后,再把表重新创建,创建成功之后,可以查询这个表的数据。
3、给orcltest 赋予create sequence(创建序列)权限
grant create sequence to orcltest;
4、给orcltest 赋予create view (创建视图)权限
grant create view to orcltest;
5、给orcltest 赋予create procedure (创建过程)权限
grant create procedure to orcltest;
上面的方法就是,创建一个用户之后,把一些常见的权限一个个的赋予给这个用户。但是,这种方式比较繁琐,如果经常创建普通用户的话,那么就要经常写那么多,就会感觉到很烦。这个时候我们就需要用到角色了。
创建角色并赋予权限
•创建角色 custumer
CREATE ROLE custumer;
•为角色赋予权限
GRANT create session,create table ,create view, create sequence
to custumer;
•将角色赋予用户
GRANT custumer TO DEHAAN, KOCHHAR;
上面的语句就是把常用的一些权限全部赋予给custumer角色,这样接下来不管需要创建多少的普通用户,直接把这个角色里面的权限赋予给用户就可以了,不用每次都需要一个个的赋予。
接下来,我们重新创建一个命名为Oracle2 的用户,然后把custumer角色里面的权限一次性赋予给Oracle2 这个用户。如图所示:
操作完上面的语句之后,我们重新打开Oracle,用用户Oracle2去登录,去实验以下赋予的权限存不存在,如下图所示,可以创建表成功,证明已经赋予成功了。
修改密码
•DBA 可以创建用户和修改密码
•用户本人可以使用 ALTER USER 语句修改密码
–把 orcltest2 用户的密码改为 lion
ALTER USER orcltest2 IDENTIFIED BY lion;
修改成功之后,如果还用原来的密码去登录,则会报下面的错,如下图:
因为密码已经修改成功了,所以要用新密码去登录。
对象权限
•不同的对象具有不同的对象权限
•对象的拥有者拥有所有权限
•对象的拥有者可以向外分配权限
分配对象权限
把t1 表的查询权限赋予给orcltest2 这个用户;如下图所示:
在 orcltest2 用户查询orcltest 的表,查询成功,证明赋予成功,如下图所示:
WITH GRANT OPTION和PUBLIC关键字
•WITH GRANT OPTION 使用户同样具有分配权限的权利
(也就是A把权限和可以分配权限的能力分配给了B,那么B就有了和A同样的分配能力权限)
GRANT select, insert
ON departments
TO scott
WITH GRANT OPTION;
上面的操作意味着把departments 表的select、insert 权限分配给scott用户,而这个用户也拥有了可以把这些权限分配给其他用户的权限。
•向数据库中所有用户分配权限(所有用户都赋予了访问权限) PUBLIC
(也就是把一个表赋予了PUBLIC,那么所有的用户对这个表都有了访问权限)
1、如下图所示,用下面的方法把t2表public了,相当于这个表已经是公共的表了,那么也就意味着所有的用户对这个表都有了访问权限
2、现在下面我们用一个我们没有特意把t2表的权限赋予给这个用户orcltest2,那么我们用这个用户去对这个表进行查询访问,如下图所示,是可以操作成功的。但是有一点要注意,如果查询的表不是本用户名下的表,那么一定要在表名前面加上这个表的用户名,否则的话,就不会对这个表成功操作。
收回对象权限
•使用 REVOKE 语句收回权限
•使用 WITH GRANT OPTION 子句所分配的权限同样被收回
1、把orcltest2用户的对t2表的访问权限收回。
2、然后再次登录orcltest2用户去对这个表进行访问权限,由于已经把权限收回了,所以就会报错,访问不了。
SET 运算符
•将多个查询用 SET 操作符连接组成一个新的查询
UNION/UNION ALL – 求并集
INTERSECT 求交集
MINUS 求差集
•除 UNION ALL之外,系统会自动将重复的记录删除
•系统将第一个查询的列名显示在输出中
•除 UNION ALL之外,系统自动按照第一个查询中的第一个列的升序排列。
1、 UNION 操作符返回两个查询的结果集的并集。对于两个结果集的重复部分,会自动去重。
如下图所示,返回的就是两张表的所有数据,但是会自动去重。
2、 UNION ALL 操作符返回两个查询的结果集的并集。对于两个结果集的重复部分,不去重。
如下图所示,返回的就是两张表的所有数据,但是并没有去重,重复的数据也全部查询出来。
3、 INTERSECT 操作符返回两个结果集的交集。
从上面的查询也可以看出有两条数据是相同的,所以交集后的数据是2行,是正确的。
4、 MINUS操作符:返回两个结果集的差集。(但是也只是显示上面表的数据)
相当于两张表查出来的数据进行对比,把查出来部门ID是40的去掉,那么显示出来的就只有第一张表部门ID是20的数据了。