1.创建用户
虽然在oracle数据库之中已经提供了大量的用户,但是从安全以及维护的角度来讲,
往往需要创建属于自己的用户,如果要创建用户可以利用create user 语法来完成。
create user 用户名 identified by 密码[default tablespace表空间名称]
[temporary tablespace表空间名称]
[quota数字[K|M]|unlimited on 表空间名称
quota数字[K|M]|unlimited on 表空间名称...]
[profile概要文件名称|default][password expire][account lock|unlock]
语法组成如下:
create user 用户名 identified by 密码:
创建用户同时设置密码,但是用户名和密码不能是oracle的保留字(例如:create,drop等)
也不能以数字开头(如果要设置为数字,需要将数字使用双引号生命,例如:"1234");
default tablespace表空间名称:
用户存储默认使用的表空间,当用户创建对象没有设置表空间时,就将保存在此处指定的表空间下
这样可以和系统表空间进行区分;
temporary tablespace表空间名称:用户所使用的临时表空间
quota数字[K|M]|unlimited on 表空间名称:
用户在表空间上使用限额,可以指定多个表空间的限额,如果设置为unlimited表示不设置限额
profile概要文件名称|default:用户操作的资源文件,如果不指定则使用默认配置资源文件;
password expire:用户密码失效,则在第一次使用时必须修改密码;
account lock|unlock:用户是否为锁定状态,默认为unlock。
用户管理范例:
创建一个新用户:c##newuser1 密码:123456
create user c##newuser1 identified by 123456
default tablespace dgq_data
temporary tablespace dgq_temp
quota 30M on dgq_data
quota 20M on users
account unlock
password expire;
需要注意的是,现在的用户无法使用,因为没有权限。
查看已创建的用户:
select * from dba_users;
select * from dba_ts_quotas;
2.概要文件
概要文件是一组命名了的口令和资源限制文件,管理员利用它可以直接限制用户的资源访问量
或用户管理等操作。
创建概要文件
CREATE PROFILE 概要文件名称 LIMIT 命令(S)
第一组:资源限制命令
...
第二组:口令限制命令
...
范例:创建概要文件
create profile dgq_profile limit
CPU_PER_SESSION 10000
LOGICAL_READS_PER_SESSION 2000 --数据块
CONNECT_TIME 60 --连接时间
IDLE_TIME 30 --空闲时间
SESSIONS_PER_USER 10 --连接数
FAILED_LOGIN_ATTEMPTS 3 --错误次数
PASSWORD_LOCK_TIME UNLIMITED --锁定时长
PASSWORD_LIFE_TIME 60 --密码使用时间
PASSWORD_REUSE_TIME 30 --旧口令30后使用
PASSWORD_GRACE_TIME 6 ;--密码失效时长6天
查看profile
select * from dba_profiles where profile='DGQ_PROFILE';
范例:创建用户同事使用profile文件
create user user_dgq identified by 123456
profile DGQ_PROFILE;
除了创建用户的时候设置profile文件,还可以修改已有用户使用的profile文件
alter user user_dgq profile default;
修改概要文件
alter profile DGQ_PROFILE limit
CPU_PER_SESSION 1000
PASSWORD_LIFE_TIME 10;
注意:如果现在不需要使用profile文件,那么也可以删除掉,但是如果此时已经在
一个profile文件中定义了用户,那么就必须使用cascade删除掉
drop profile DGQ_PROFILE cascade;
3.维护用户:
在oracle用户量较少,所以可以直接利用基本命令完成操作。
范例:user_dgq的密码为:hello
alter user user_dgq identified by hello;
范例:将user_dgq用户设置为锁定状态
alter user user_dgq account lock;
范例:将user_dgq用户解锁
alter user user_dgq account unlock;
范例:让user_dgq密码失效
alter user user_dgq password expire;
范例:修改user_dgq 用户的表空间配额
alter user user_dgq quota 20M on system quota 35M on users;
4.删除用户
语法:
drop user 用户名[cascade]
范例:删除用户user_dgq
drop user user_dgq cascade;
用户属于oracle对象,在oracle 12c中创建用户要以C##开头,用户可以通过profile文件进行管理。
5.权限管理
对于DCL标准组成实际上只有两个有:grant,revoke
权限分类:
用户创建完成之后实际上是没有任何权限的,即:是无法使用的,如果要想让一个用户真正可用,那么
就必须为此用户授权,在oracle之中,权限分为两类:
系统权限:进行数据库资源操作的权限,例如:创建数据表、索引等权限;
对象权限:维护数据库中对象的能力,即:由一个用户操作另外一个用户的对象。
所有的权限应该有DBA进行控制,在SQL语句规范之中针对与权限的控制提供了两个核心的操作命令:
grant,revoke。
5.1系统权限
系统权限主要指的是资源的操作权限,例如:数据库管理员(DBA)是数据库系统中级别最高的用户,
它拥有一切的系统权限以及各种资源的操作能力。在oracle中有100多种系统权限,并且不同的数据
库版本相应的权限数也会增加。
授权语法:
grant 权限,...to [用户名,...|角色名,...|public]
[with admin option];
语句解释:
权限:主要指的是各个系统权限
to:设置授予权限的用户、角色或者是使用public将此权限设置为公共权限;
with admin option:将用户授予的权限继续授予其他用户。
范例:为C##SCOTT 用户授予创建session权限
grant create session to C##SCOTT;
范例:
grant create table,create sequence,create view to C##SCOTT
with admin option;
使用"with admin option"之后,那么就表示C##SCOTT用户的权限可以继续向下授予。
oracle 12C之前的版本,用户授权之后需要重新登录,因为只有在登录的时候会取权限。
而且这个时候由于使用了with admin option子句,那么下面继续将c##scott用户的
权限授予c##newuser1
grant create table,create session,create sequence to c##newuser1;
现在已经实现了授权的操作,但是现在有一个小问题,如何可以知道一个用户的所有权限呢?
权限的分配信息可以利用dba_sys_privs数据字段查看。
select * from dba_sys_privs where grantee
in('C##SCOTT','C##NEWUSER1');
撤销权限
撤销权限语法:
revoke 权限,...from 用户名;
将c##newuser1用户的create view、create table权限回收
revoke create table ,create view from c##newuser1;
5.2对象权限
系统权限针对的是全局用户,而对象权限指的是一个用户下的所有相关对象的操作。
对象权限指的是数据库之中某一个对象所拥有的权限,即:可以通过某一个用户的
对象权限,让其他用户来操作用户中的所有授权的对象。在oracle之中一共定义了
八种对象权限,分别是:select、insert、update、delete、execute、alter
index、references。
NO.
|
对象权限
|
表(table)
|
列(sequence)
|
视图(view)
|
子程序(procedure)
|
1
|
查询(select)
|
√
|
√
|
√
|
|
2
|
增加(insert)
|
√
|
|
√
|
|
3
|
更新(update)
|
√
|
|
√
|
|
4
|
删除(delete)
|
√
|
|
√
|
|
5
|
执行(execute)
|
|
|
|
√
|
6
|
修改(alter)
|
√
|
√
|
√
|
|
7
|
索引(index)
|
√
|
|
√
|
|
8
|
关联(references)
|
√
|
|
|
|
授予对象权限:
grant 对象权限|all[列,...]
on 对象
to [用户名|角色名|public]
[with grant option];
语法组成:
对象权限:指的是表所列出的权限标记,如果设置为all表示所有对象权限;
on:要授予权限的对象名称;
to:将此权限授予的用户名称或角色名称,如果设置为public表示为公共权限;
with grant option:允许授权用户继续授权其他用户。
范例:为c##newuser1用户授予c##scott用户dept表的增加及查询权限
grant select,insert on c##scott.dept to c##newuser1 ;
范例:将c##scott.dept 数据表更新部门名称的权限授予c##newuser用户
grant update(dname) on c##scott.dept to c##newuser1;
6.角色
建立用户而后为其授权是用户管理的基本操作,但是通过之前的演示,读者可以发现,如果要想让一个用户正常进行操作,那么肯定需要授予很多的操作权限。如果说现在有100个用户,而且这些用户都需要具备相同的权限,那么在进行权限维护的时候肯定不可能针对100个用户分别维护,而是需要将所有用户权限一起进行维护,而在这是就只能够将多个权限加到一个角色之中,通过对角色的维护来实现对多个用户的权限维护(可以是系统权限,也可以是对象权限),所以,所谓的角色就是指一组相关权限的集合。
1.创建角色:
如果用户要创建角色,则可以通过DBA或者是具有相应“create role”权限的用户来完成,
角色的创建语法如下所示。
create role 角色名称
[not identified|identified by]密码;
创建一个普通的角色
create role dgq_role_a;
创建一个带有密码的角色
create role dgq_role_b identified by hello;
select * from dba_roles where role like '%DGQ%';
2.角色授权
grant create session,create table,create view ,create sequence to dgq_role_a;
grant create session,create any table,insert any table to dgq_role_b;
查看角色权限
select * from role_sys_privs where role like 'DGQ%';
3.为用户授予角色
将角色授予用户的过程与授权的过程是非常相似的,继续使用grant语句即可。
范例:将dgq_role_a 授予c##newuser1
grant dgq_role_a to c##newuser1;
select * from role_sys_privs where role like '%DGQ%';
4.修改及回收角色
角色密码的设置
设置或取消角色密码
alter role 角色名称[not identified|identified]by密码;
将dgq_role_a 的角色密码设置为hello
alter role dgq_role_a identified by hello
取消dgq_role_b的密码
alter role dgq_role_b not identified;
通过角色回收权限
将create view 的权限从dgq_role_a角色中回收
revoke create view from dgq_role_a;
删除角色
当某个角色不在使用是,可以利用drop 命令将其进行删除
drop role 角色名称;
删除dgq_role_b;
drop role dgq_role_b;
7,预定义角色
在oracle中为了减轻管理员的负担,专门提供了一些预定义角色。
NO.
|
预定义角色
|
描述
|
1
|
EXP_FULL_DATABASE
|
导出数据库权限
|
2
|
IMP_FULL_DATABASE
|
导入数据库权限
|
3
|
SELECT_CATALOG_ROLE
|
查询数据字典权限
|
4
|
EXECUTE_CATALOG_ROLE
|
数据字典上的执行权限
|
5
|
DELECT_CATALOG_ROLE
|
数据字典上的删除权限
|
6
|
DBA
|
系统管理的相关权限
|
7
|
CONNECT
|
授予用户最典型的权限
|
8
|
RESOURCE
|
授予开发人员的权限
|
范例:将connect、resource角色授予dgq_user用户
grant connect,resource to dgq_user;