Oracle用户、权限、角色管理【来掰扯掰扯Oracle数据库的用户管理与权限分配吧】

来呀老弟,来扯一扯Oracle数据库的用户管理呀。
要想学习Oracle的用户管理,就不得不了解一下Oracle数据库中几个关于用户管理的概念。他们是:

  • 用户:操作数据库的人员,在数据库中表现为“账号”。
  • 模式:用户所拥有的对象集合
  • 权限:用户能够对数据库进行何种操作的权力。
  • 角色:可以看做是现实世界中的一个职业,在数据库中表现为一组权限的集合。

好了,开始掰扯吧

一.首先,了解一下什么是模式,以及模式与角色的关系:
模式是用户所拥有的所有对象的集合,用户-模式-对象的关系如图:
Oracle用户、权限、角色管理【来掰扯掰扯Oracle数据库的用户管理与权限分配吧】_第1张图片
需要关注的是:

  • 用户与模式为一对一关系,且名字相同,如scott用户对应scott模式。
  • 同一个模式下的对象名不能重复,但是不同模式下的对象名可以重复。
  • 如果用户要访问其他模式的对象,需要有权限,且需要使用模式名为前缀。

二.用户的新增、修改、删除

(1)新增一个用户的语法格式如下:

--使用create user命令创建用户
create user user_name identified by password --user_name为用户名,password为密码
[or identified exeternally] --外部验证(操作系统级别的验证),基本不用
[or identified globally as ‘CN=user]	--全局验证,基本不用
[default tablespace tablespace_default] -- 设置默认表空间
[temporary tablespace tablespace_temp]--设置临时表空间
[quota [integer k[m]] [unlimited] ] on tablesapce_ specify1--设置空间大小
[,quota [integer k[m]] [unlimited] ] on tablesapce_ specify2
[,]on tablespace_specifyn
[profiles profile_name]--配置文件
[account lock or account unlock]--锁住账号或不锁住账号

(2)新增一个用户示例如下:

create user test identified by 123456
default tablespace users
temporary tablespace temp;

(3)新增用户时,需要注意以下几点

  • 如果没有DEFAULT TABLESPACE子句,默认将SYSTEM表空间作为用户表空间。
  • 如果没有TEMPORARY TABLESPACE子句,将默认的临时表空间作为用户临时表空间。
  • 新建的用户没有任何权限,包括连接到数据库的权限都没有

(4)修改用户

alter user user_name quota 30m on tablesapce_1;--修改表空间磁盘配额
alter user user_name identified by password;--修改密码
alter user user_name account unlock;--解锁用户
--其他修改差不多

(5)删除用户

drop user user_name;--普通删除
drop user user_name cascade;--级联删除(用户拥有对象时使用,将对象一并删除)

三、权限管理(系统/对象权限的授权与收回)

(1)系统权限与对象权限
按照系统管理方式的不同将Oracle数据库权限分成两种:

  • 系统权限:在系统级对数据库进行存取和使用的权限。如Create、Drop、Alter等命令
  • 用户权限:一个用户对其他用户的对象进行操作的权限。

(2)向用户授权系统权限及撤回授权

GRANT system_privilege |ROLE TO USER | ROLE | PUBLIC [WITH ADMIN OPTION]--授权的语法格式
-- system_privilege为系统权限名
-- role为角色名
-- user为用户名
-- public表示所有用户和角色
-- with admin option 表示让被授权者拥有向其他用户或角色授权的能力
grant connect,resource,create table,create session to test_user with admin option;--授权示例

revoke system_privilege|role from user |role |public;--撤权的语法格式
revoke create table from test_user;--撤权的示例

(3) 向用户授权对象权限及撤回权限

Grant object_privilege | all column on schema.object to user | role | public [with admin option] | [with hierarchy option]--授权的格式
grant create,update on scott.dept to test_user;--授权示例

revoke object_privilege | all on schema.object from user|role|public [cascade constraints]--撤权的语法格式、--cascade constraint 表示同时收回被收回对象授予其他对象的权限
revoke create on scott.dept from test_user;--撤权示例

四、角色管理
注意!!!注意!!!注意!!!这是重点:一般我们不会一个权限一个权限地向角色授予权限,因为Oracle权限非常多,那样会非常复杂。
这个时候我们就很需要角色这个东西了,角色可以看作是现实中的职业,一个职业会有多种权力。角色在数据库中可以看作一组权限的集合
(1)预定义角色
oracle数据库为我们预定义了很多角色,可以自己去了解不同角色的权限,其中最DBA的权限最高。

Oracle用户、权限、角色管理【来掰扯掰扯Oracle数据库的用户管理与权限分配吧】_第2张图片
(2)创建角色与授权

create role role_name [not identified | identified by [password | exeternally |globally]];--创建角色的语法格式
create role test_role identified by 123456;--创建角色示例

--向角色授权和向用户授权差不多,可以看上面的向用户授权的部分

(3)管理角色

--查看角色的权限
SELECT * FROM Role_Sys_Privs WHERE ROLE = 'TEST_ROLE';

--修改角色密码
alter role test_role not identified;--无密码
alter role test_role identified by 147258--新密码

--删除角色
drop role test_role;

你可能感兴趣的:(#,Oracle)